summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2017-11-21 00:30:50 +0100
committerCarlos Garnacho <carlosg@gnome.org>2018-07-20 18:27:32 +0200
commit05383d974bfa9c557171ad1101600abb4ca2ae77 (patch)
tree79145e3372a8cbbb561a68b55114a038366eb0ec
parentcb3ef04c5c7389fafbc0625c4aa89530b21f5add (diff)
downloadtracker-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.c61
-rw-r--r--src/libtracker-direct/tracker-direct.h2
-rw-r--r--src/libtracker-direct/tracker-direct.vapi1
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);
}
}