From f17a6859e036604e7a1da97d59ebe46e1a7af5be Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 17 Apr 2013 00:06:37 -0700 Subject: [PATCH] Simplify and improve the WAL code. --- src/cpp/database/SqliteDatabase.cpp | 44 +++++++++-------------------- src/cpp/database/SqliteDatabase.h | 1 - 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/src/cpp/database/SqliteDatabase.cpp b/src/cpp/database/SqliteDatabase.cpp index c9a540ff83..d8b3551895 100644 --- a/src/cpp/database/SqliteDatabase.cpp +++ b/src/cpp/database/SqliteDatabase.cpp @@ -223,10 +223,10 @@ bool SqliteDatabase::setupCheckpointing(JobQueue *q) void SqliteDatabase::doHook(const char *db, int pages) { - if (pages < 512) + if (pages < 1024) return; boost::mutex::scoped_lock sl(walMutex); - if (walDBs.insert(db).second && !walRunning) + if (!walRunning) { walRunning = true; if (mWalQ) @@ -238,36 +238,20 @@ void SqliteDatabase::doHook(const char *db, int pages) void SqliteDatabase::runWal() { - std::set walSet; - std::string name = sqlite3_db_filename(mConnection, "main"); - - int pass = 1; - while (1) + int log = 0, ckpt = 0; + int ret = sqlite3_wal_checkpoint_v2(mConnection, NULL, SQLITE_CHECKPOINT_PASSIVE, &log, &ckpt); + if (ret != SQLITE_OK) { - { - boost::mutex::scoped_lock sl(walMutex); - if (walDBs.empty()) - { - walRunning = false; - return; - } - walDBs.swap(walSet); - } + cLog((ret == SQLITE_LOCKED) ? lsTRACE : lsWARNING) << "WAL(" + << sqlite3_db_filename(mConnection, "main") << "): error " << ret; + } + else + cLog(lsTRACE) << "WAL(" << sqlite3_db_filename(mConnection, "main") << + "): frames=" << log << ", written=" << ckpt; - BOOST_FOREACH(const std::string& db, walSet) - { - int log = 0, ckpt = 0; - int ret = sqlite3_wal_checkpoint_v2(mConnection, db.c_str(), SQLITE_CHECKPOINT_PASSIVE, &log, &ckpt); - if (ret != SQLITE_OK) - { - cLog((ret == SQLITE_LOCKED) ? lsTRACE : lsWARNING) << "WAL " << name << ":" - << db << " error " << ret; - } - else - cLog(lsTRACE) << "WAL(" << name << "): pass=" << pass << ", frames=" << log << ", written=" << ckpt; - } - walSet.clear(); - ++pass; + { + boost::mutex::scoped_lock sl(walMutex); + walRunning = false; } } diff --git a/src/cpp/database/SqliteDatabase.h b/src/cpp/database/SqliteDatabase.h index 19569a69b8..7e6a8c67a0 100644 --- a/src/cpp/database/SqliteDatabase.h +++ b/src/cpp/database/SqliteDatabase.h @@ -17,7 +17,6 @@ class SqliteDatabase : public Database boost::mutex walMutex; JobQueue* mWalQ; - std::set walDBs; bool walRunning; public: