diff options
author | Cosimo Alfarano <cosimo.alfarano@collabora.co.uk> | 2010-03-15 18:51:54 +0100 |
---|---|---|
committer | Cosimo Alfarano <cosimo.alfarano@collabora.co.uk> | 2010-03-15 18:51:54 +0100 |
commit | 46f9e25beea604333c045ffb92d1d01111c7a077 (patch) | |
tree | cdeb5326de4fef0e1ae0606aab775c23ab0508c9 | |
parent | 2b51a65a1b5175be655123116f6fcb24a6cbd6c0 (diff) |
LogStoreSQLite: Purging 5-days-old entries every hour instead of every TPL boot.
This way SQLite is ensured to have 5 days+1 hour old entries at most.
-rw-r--r-- | telepathy-logger/log-store-sqlite.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/telepathy-logger/log-store-sqlite.c b/telepathy-logger/log-store-sqlite.c index 0f1a35b04..a1dce644d 100644 --- a/telepathy-logger/log-store-sqlite.c +++ b/telepathy-logger/log-store-sqlite.c @@ -47,6 +47,7 @@ static gboolean _insert_to_cache_table (TplLogStore *self, TplLogEntry *message, GError **error); static void tpl_log_store_sqlite_purge (TplLogStoreSqlite *self, time_t delta, GError **error); +static gboolean purge_entry_timeout (gpointer logstore); G_DEFINE_TYPE_WITH_CODE (TplLogStoreSqlite, tpl_log_store_sqlite, @@ -185,7 +186,6 @@ tpl_log_store_sqlite_init (TplLogStoreSqlite *self) char *filename = get_db_filename (); int e; char *errmsg = NULL; - GError *error = NULL; DEBUG ("cache file is '%s'", filename); @@ -229,13 +229,9 @@ tpl_log_store_sqlite_init (TplLogStoreSqlite *self) goto out; } - tpl_log_store_sqlite_purge (self, TPL_LOG_STORE_SQLITE_CLEANUP_DELTA_LIMIT, - &error); - if (error != NULL) - { - DEBUG ("Unable to purge old entries for Sqlite: %s", error->message); - g_clear_error (&error); - } + /* purge old entries every hour (60*60 secs) and purges 24h old entries */ + g_timeout_add_seconds (60*60, purge_entry_timeout, self); + /* end of cache table init */ /* start of counter table init */ @@ -970,7 +966,6 @@ out: return retval; } - void tpl_log_store_sqlite_set_acknowledgment_by_msg_id (TplLogStore *self, TpChannel *channel, @@ -1045,7 +1040,6 @@ out: sqlite3_finalize (sql); } - static void tpl_log_store_sqlite_purge (TplLogStoreSqlite *self, time_t delta, @@ -1095,6 +1089,24 @@ out: g_free (date); } +static gboolean +purge_entry_timeout (gpointer logstore) +{ + GError *error = NULL; + TplLogStoreSqlite *self = logstore; + + tpl_log_store_sqlite_purge (self, TPL_LOG_STORE_SQLITE_CLEANUP_DELTA_LIMIT, + &error); + if (error != NULL) + { + CRITICAL ("Unable to purge entries: %s", error->message); + g_error_free (error); + } + + /* return TRUE to avoid g_timeout_add_seconds cancel the operation */ + return TRUE; +} + static GList * tpl_log_store_sqlite_get_chats (TplLogStore *self, TpAccount *account) |