From a496040058553462cfe9e7edda664ea2f091ddee Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sat, 7 Nov 2015 00:21:16 +0000 Subject: [PATCH] Add retries for simple sql commands in fuzzy backend --- src/libserver/fuzzy_backend.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libserver/fuzzy_backend.c b/src/libserver/fuzzy_backend.c index d346175214..1d9cc754c2 100644 --- a/src/libserver/fuzzy_backend.c +++ b/src/libserver/fuzzy_backend.c @@ -348,7 +348,17 @@ static gboolean rspamd_fuzzy_backend_run_sql (const gchar *sql, struct rspamd_fuzzy_backend *bk, GError **err) { - if (sqlite3_exec (bk->db, sql, NULL, NULL, NULL) != SQLITE_OK) { + guint retries = 0; + struct timespec ts; + gint ret; + + do { + ret = sqlite3_exec (bk->db, sql, NULL, NULL, NULL); + double_to_ts (sql_sleep_time, &ts); + } while (ret == SQLITE_BUSY && retries++ < max_retries && + nanosleep (&ts, NULL) == 0); + + if (ret != SQLITE_OK) { g_set_error (err, rspamd_fuzzy_backend_quark (), -1, "Cannot execute raw sql `%s`: %s", sql, sqlite3_errmsg (bk->db)); -- 2.47.3