diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-09-30 10:51:20 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-10-02 13:32:16 +0200 |
commit | 202c73c8d204b2e45923ccdf7889bcff1b8e498c (patch) | |
tree | 4281dcc67b9cf2b9f6a2d851ff12417774b19e44 /src/libtracker-direct | |
parent | 46043ac52387cd6dc9c677f9580dfd4720245c86 (diff) | |
download | tracker-202c73c8d204b2e45923ccdf7889bcff1b8e498c.tar.gz |
libtracker-data: Move WAL checkpointing to TrackerDBManager
The WAL logging and manual checkpoint handling is defined in the deepmost
layers, it doesn't make sense to handle WAL checkpoints in the highest ones.
Besides, the GThread for the deferred checkpoint is no longer leaked, and
we ensure that deferred and blocking checkpoints are mutually exclusive.
Diffstat (limited to 'src/libtracker-direct')
-rw-r--r-- | src/libtracker-direct/tracker-direct.c | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/src/libtracker-direct/tracker-direct.c b/src/libtracker-direct/tracker-direct.c index 3dee1bc8b..9864e7d01 100644 --- a/src/libtracker-direct/tracker-direct.c +++ b/src/libtracker-direct/tracker-direct.c @@ -186,57 +186,6 @@ query_thread_pool_func (gpointer data, g_object_unref (task); } -static void -wal_checkpoint (TrackerDBInterface *iface, - gboolean blocking) -{ - GError *error = NULL; - - g_debug ("Checkpointing database..."); - - tracker_db_interface_sqlite_wal_checkpoint (iface, blocking, - blocking ? &error : NULL); - - if (error) { - g_warning ("Error in WAL checkpoint: %s", error->message); - g_error_free (error); - } - - g_debug ("Checkpointing complete"); -} - -static gpointer -wal_checkpoint_thread (gpointer data) -{ - TrackerDBInterface *wal_iface = data; - - wal_checkpoint (wal_iface, FALSE); - g_object_unref (wal_iface); - return NULL; -} - -static void -wal_hook (TrackerDBInterface *iface, - gint n_pages) -{ - TrackerDataManager *data_manager = tracker_db_interface_get_user_data (iface); - TrackerDBInterface *wal_iface = tracker_data_manager_get_wal_db_interface (data_manager); - - if (!wal_iface) - return; - - if (n_pages >= 10000) { - /* Do immediate checkpointing (blocking updates) to - * prevent excessive WAL file growth. - */ - wal_checkpoint (wal_iface, TRUE); - } else { - /* Defer non-blocking checkpoint to thread */ - g_thread_try_new ("wal-checkpoint", wal_checkpoint_thread, - g_object_ref (wal_iface), NULL); - } -} - static gint task_compare_func (GTask *a, GTask *b, @@ -280,7 +229,6 @@ tracker_direct_connection_initable_init (GInitable *initable, TrackerDirectConnectionPrivate *priv; TrackerDirectConnection *conn; TrackerDBManagerFlags db_flags = TRACKER_DB_MANAGER_ENABLE_MUTEXES; - TrackerDBInterface *iface; GHashTable *namespaces; GHashTableIter iter; gchar *prefix, *ns; @@ -305,12 +253,6 @@ tracker_direct_connection_initable_init (GInitable *initable, return FALSE; } - if ((priv->flags & TRACKER_SPARQL_CONNECTION_FLAGS_READONLY) == 0) { - /* Set up WAL hook on our connection */ - iface = tracker_data_manager_get_writable_db_interface (priv->data_manager); - tracker_db_interface_sqlite_wal_hook (iface, wal_hook); - } - /* Initialize namespace manager */ priv->namespace_manager = tracker_namespace_manager_new (); namespaces = tracker_data_manager_get_namespaces (priv->data_manager); @@ -394,19 +336,11 @@ tracker_direct_connection_finalize (GObject *object) if (priv->select_pool) g_thread_pool_free (priv->select_pool, TRUE, FALSE); - if (priv->data_manager) { - TrackerDBInterface *wal_iface; - wal_iface = tracker_data_manager_get_wal_db_interface (priv->data_manager); - if (wal_iface) - tracker_db_interface_sqlite_wal_checkpoint (wal_iface, TRUE, NULL); - } - tracker_data_manager_shutdown (priv->data_manager); g_clear_object (&priv->store); g_clear_object (&priv->journal); g_clear_object (&priv->ontology); - g_clear_object (&priv->data_manager); g_clear_object (&priv->namespace_manager); G_OBJECT_CLASS (tracker_direct_connection_parent_class)->finalize (object); @@ -881,7 +815,6 @@ void tracker_direct_connection_sync (TrackerDirectConnection *conn) { TrackerDirectConnectionPrivate *priv; - TrackerDBInterface *wal_iface; priv = tracker_direct_connection_get_instance_private (conn); @@ -896,8 +829,4 @@ tracker_direct_connection_sync (TrackerDirectConnection *conn) g_thread_pool_free (priv->select_pool, TRUE, FALSE); set_up_thread_pools (conn, NULL); - - wal_iface = tracker_data_manager_get_wal_db_interface (priv->data_manager); - if (wal_iface) - tracker_db_interface_sqlite_wal_checkpoint (wal_iface, TRUE, NULL); } |