]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Add retries for simple sql commands in fuzzy backend
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 7 Nov 2015 00:21:16 +0000 (00:21 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 7 Nov 2015 00:21:16 +0000 (00:21 +0000)
src/libserver/fuzzy_backend.c

index d3461752143336a7a77e32022152a2315a8419da..1d9cc754c24b4b90a6c6e06e50a319517dd14258 100644 (file)
@@ -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));