summaryrefslogtreecommitdiff
path: root/src/libtracker-direct
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-09-30 10:51:20 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-10-02 13:32:16 +0200
commit202c73c8d204b2e45923ccdf7889bcff1b8e498c (patch)
tree4281dcc67b9cf2b9f6a2d851ff12417774b19e44 /src/libtracker-direct
parent46043ac52387cd6dc9c677f9580dfd4720245c86 (diff)
downloadtracker-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.c71
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);
}