diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2017-11-21 00:30:50 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-07-20 18:27:32 +0200 |
commit | 05383d974bfa9c557171ad1101600abb4ca2ae77 (patch) | |
tree | 79145e3372a8cbbb561a68b55114a038366eb0ec | |
parent | cb3ef04c5c7389fafbc0625c4aa89530b21f5add (diff) | |
download | tracker-05383d974bfa9c557171ad1101600abb4ca2ae77.tar.gz |
libtracker-direct: Add sync() call
This will flush all updates and trigger the WAL hook.
-rw-r--r-- | src/libtracker-direct/tracker-direct.c | 61 | ||||
-rw-r--r-- | src/libtracker-direct/tracker-direct.h | 2 | ||||
-rw-r--r-- | src/libtracker-direct/tracker-direct.vapi | 1 |
3 files changed, 52 insertions, 12 deletions
diff --git a/src/libtracker-direct/tracker-direct.c b/src/libtracker-direct/tracker-direct.c index 8923b8da3..572fdb0c8 100644 --- a/src/libtracker-direct/tracker-direct.c +++ b/src/libtracker-direct/tracker-direct.c @@ -238,23 +238,13 @@ task_compare_func (GTask *a, } static gboolean -tracker_direct_connection_initable_init (GInitable *initable, - GCancellable *cancellable, - GError **error) +set_up_thread_pools (TrackerDirectConnection *conn, + GError **error) { TrackerDirectConnectionPrivate *priv; - TrackerDirectConnection *conn; - TrackerDBManagerFlags db_flags = TRACKER_DB_MANAGER_ENABLE_MUTEXES; - TrackerDBInterface *iface; - GHashTable *namespaces; - GHashTableIter iter; - gchar *prefix, *ns; - conn = TRACKER_DIRECT_CONNECTION (initable); priv = tracker_direct_connection_get_instance_private (conn); - tracker_locale_sanity_check (); - priv->select_pool = g_thread_pool_new (query_thread_pool_func, conn, 16, FALSE, error); if (!priv->select_pool) @@ -271,6 +261,29 @@ tracker_direct_connection_initable_init (GInitable *initable, g_thread_pool_set_sort_function (priv->update_thread, (GCompareDataFunc) task_compare_func, conn); + return TRUE; +} + +static gboolean +tracker_direct_connection_initable_init (GInitable *initable, + GCancellable *cancellable, + GError **error) +{ + TrackerDirectConnectionPrivate *priv; + TrackerDirectConnection *conn; + TrackerDBManagerFlags db_flags = TRACKER_DB_MANAGER_ENABLE_MUTEXES; + TrackerDBInterface *iface; + GHashTable *namespaces; + GHashTableIter iter; + gchar *prefix, *ns; + + conn = TRACKER_DIRECT_CONNECTION (initable); + priv = tracker_direct_connection_get_instance_private (conn); + + tracker_locale_sanity_check (); + + if (!set_up_thread_pools (conn, error)) + return FALSE; /* Init data manager */ if (priv->flags & TRACKER_SPARQL_CONNECTION_FLAGS_READONLY) @@ -845,3 +858,27 @@ tracker_direct_connection_set_default_flags (TrackerDBManagerFlags flags) { default_flags = flags; } + +void +tracker_direct_connection_sync (TrackerDirectConnection *conn) +{ + TrackerDirectConnectionPrivate *priv; + TrackerDBInterface *wal_iface; + + priv = tracker_direct_connection_get_instance_private (conn); + + if (!priv->data_manager) + return; + + /* Wait for pending updates. */ + if (priv->update_thread) + g_thread_pool_free (priv->update_thread, TRUE, TRUE); + /* Selects are less important, readonly interfaces won't be bothersome */ + if (priv->select_pool) + 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); + tracker_db_interface_sqlite_wal_checkpoint (wal_iface, TRUE, NULL); +} diff --git a/src/libtracker-direct/tracker-direct.h b/src/libtracker-direct/tracker-direct.h index b8c1392b8..d1ebfd6ee 100644 --- a/src/libtracker-direct/tracker-direct.h +++ b/src/libtracker-direct/tracker-direct.h @@ -54,4 +54,6 @@ TrackerDataManager *tracker_direct_connection_get_data_manager (TrackerDirectCon void tracker_direct_connection_set_default_flags (TrackerDBManagerFlags flags); +void tracker_direct_connection_sync (TrackerDirectConnection *conn); + #endif /* __TRACKER_LOCAL_CONNECTION_H__ */ diff --git a/src/libtracker-direct/tracker-direct.vapi b/src/libtracker-direct/tracker-direct.vapi index 79b293a5d..df15c5890 100644 --- a/src/libtracker-direct/tracker-direct.vapi +++ b/src/libtracker-direct/tracker-direct.vapi @@ -5,6 +5,7 @@ namespace Tracker { public class Connection : Tracker.Sparql.Connection, GLib.Initable, GLib.AsyncInitable { public Connection (Tracker.Sparql.ConnectionFlags connection_flags, GLib.File loc, GLib.File? journal, GLib.File? ontology) throws Tracker.Sparql.Error, GLib.IOError, GLib.DBusError; public Tracker.Data.Manager get_data_manager (); + public void sync (); public static void set_default_flags (Tracker.DBManagerFlags flags); } } |