]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Add wal checkpoints to bayes backend
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 22 Dec 2015 16:38:16 +0000 (16:38 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 22 Dec 2015 16:38:16 +0000 (16:38 +0000)
src/libstat/backends/sqlite3_backend.c

index c980ddf543fee8145435c731a82b85136c8c73b4..e6ef68a23d6e817ed5098e5cef00179060128205 100644 (file)
@@ -896,6 +896,7 @@ rspamd_sqlite3_finalize_learn (struct rspamd_task *task, gpointer runtime,
 {
        struct rspamd_stat_sqlite3_rt *rt = runtime;
        struct rspamd_stat_sqlite3_db *bk;
+       gint rc, wal_frames, wal_checkpointed, mode;
 
        g_assert (rt != NULL);
        bk = rt->db;
@@ -906,7 +907,24 @@ rspamd_sqlite3_finalize_learn (struct rspamd_task *task, gpointer runtime,
                bk->in_transaction = FALSE;
        }
 
-       return;
+#ifdef SQLITE_OPEN_WAL
+#ifdef SQLITE_CHECKPOINT_TRUNCATE
+       mode = SQLITE_CHECKPOINT_TRUNCATE;
+#elif defined(SQLITE_CHECKPOINT_RESTART)
+       mode = SQLITE_CHECKPOINT_RESTART;
+#elif defined(SQLITE_CHECKPOINT_FULL)
+       mode = SQLITE_CHECKPOINT_FULL;
+#endif
+       /* Perform wal checkpoint (might be long) */
+       if (sqlite3_wal_checkpoint_v2 (bk->sqlite,
+                       NULL,
+                       mode,
+                       &wal_frames,
+                       &wal_checkpointed) != SQLITE_OK) {
+               msg_warn_task ("cannot commit checkpoint: %s",
+                               sqlite3_errmsg (bk->sqlite));
+       }
+#endif
 }
 
 gulong