summaryrefslogtreecommitdiff
path: root/src/libtracker-sparql
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2023-01-23 13:11:43 +0100
committerCarlos Garnacho <carlosg@gnome.org>2023-01-23 15:51:36 +0100
commit6555ef2c8d5c7933f1d8be3d79671a9a4ed99282 (patch)
treecf9e62a1c3f0a7dfaf38f5f8422c3cc59cc656a4 /src/libtracker-sparql
parentb7f0bd26bdf257ad18de40bcd5aab2dee0bdda74 (diff)
downloadtracker-6555ef2c8d5c7933f1d8be3d79671a9a4ed99282.tar.gz
libtracker-common: Add 'fts-integrity' debug flag
This debug flag forces a FTS integrity check after every set of FTS updates, and raises an error if the integrity check did fail. This is a more proactive (and expensive) approach to finding out FTS index corruptions. In order to make this helpful right away, toggle this flag on for our own test suite, so that CI may catch any remaining/popping issues.
Diffstat (limited to 'src/libtracker-sparql')
-rw-r--r--src/libtracker-sparql/core/tracker-data-update.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libtracker-sparql/core/tracker-data-update.c b/src/libtracker-sparql/core/tracker-data-update.c
index 1a3789cc4..e564fdaf0 100644
--- a/src/libtracker-sparql/core/tracker-data-update.c
+++ b/src/libtracker-sparql/core/tracker-data-update.c
@@ -1578,6 +1578,7 @@ tracker_data_update_buffer_flush (TrackerData *data,
TrackerDataUpdateBufferResource *resource;
GHashTableIter iter;
GError *actual_error = NULL;
+ G_GNUC_UNUSED gboolean fts_updated = FALSE;
guint i;
if (data->update_buffer.update_log->len == 0)
@@ -1589,6 +1590,7 @@ tracker_data_update_buffer_flush (TrackerData *data,
while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &resource)) {
if (resource->fts_update && !resource->create) {
+ fts_updated = TRUE;
if (!tracker_data_ensure_graph_fts_stmts (data,
graph,
error))
@@ -1611,6 +1613,7 @@ tracker_data_update_buffer_flush (TrackerData *data,
while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &resource)) {
if (resource->fts_update) {
+ fts_updated = TRUE;
if (!tracker_data_ensure_graph_fts_stmts (data,
graph,
error))
@@ -1633,6 +1636,30 @@ tracker_data_update_buffer_flush (TrackerData *data,
g_array_set_size (graph->refcounts, 0);
}
+#ifdef G_ENABLE_DEBUG
+ if (fts_updated && TRACKER_DEBUG_CHECK (FTS_INTEGRITY)) {
+ TrackerDBInterface *iface;
+
+ iface = tracker_data_manager_get_writable_db_interface (data->manager);
+
+ for (i = 0; i < data->update_buffer.graphs->len; i++) {
+ const gchar *database;
+
+ graph = g_ptr_array_index (data->update_buffer.graphs, i);
+ database = graph->graph ? graph->graph : "main";
+
+ if (!tracker_db_interface_sqlite_fts_integrity_check (iface, database)) {
+ g_set_error (error,
+ TRACKER_DB_INTERFACE_ERROR,
+ TRACKER_DB_CORRUPT,
+ "FTS index is corrupt in %s",
+ graph->graph ? graph->graph : "default graph");
+ goto out;
+ }
+ }
+ }
+#endif
+
out:
g_hash_table_remove_all (data->update_buffer.new_resources);
g_hash_table_remove_all (data->update_buffer.class_updates);