From 7895577bd6c4d4bf98fa2933cbee42ea5c6a95a2 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 21 Jan 2016 16:45:18 +0000 Subject: [PATCH] Add dedicated function to checkpoint sqlite --- src/libutil/sqlite_utils.c | 34 ++++++++++++++++++++++++++++++++++ src/libutil/sqlite_utils.h | 7 +++++++ 2 files changed, 41 insertions(+) diff --git a/src/libutil/sqlite_utils.c b/src/libutil/sqlite_utils.c index 76a7085939..0d0d565c37 100644 --- a/src/libutil/sqlite_utils.c +++ b/src/libutil/sqlite_utils.c @@ -431,3 +431,37 @@ rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const return sqlite; } + +gboolean +rspamd_sqlite3_sync (sqlite3 *db, gint *wal_frames, gint *wal_checkpoints) +{ + gint wf = 0, wc = 0, mode; + +#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 (db, + NULL, + mode, + &wf, + &wc) != SQLITE_OK) { + return FALSE; + + } +#endif + + if (wal_frames) { + *wal_frames = wf; + } + if (wal_checkpoints) { + *wal_checkpoints = wc; + } + + return TRUE; +} diff --git a/src/libutil/sqlite_utils.h b/src/libutil/sqlite_utils.h index fba1b0091b..84b3180b96 100644 --- a/src/libutil/sqlite_utils.h +++ b/src/libutil/sqlite_utils.h @@ -81,4 +81,11 @@ void rspamd_sqlite3_close_prstmt (sqlite3 *db, GArray *stmts); sqlite3 * rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const gchar *create_sql, GError **err); + +/** + * Sync sqlite3 db ensuring that all wal things are done + * @param db + */ +gboolean rspamd_sqlite3_sync (sqlite3 *db, gint *wal_frames, gint *wal_checkpoints); + #endif /* SRC_LIBUTIL_SQLITE_UTILS_H_ */ -- 2.47.3