[tracker/wip/carlosg/fts-error-propagation: 2/3] libtracker-data: Propagate errors when rebuilding FTS tokenized data




commit a1ba3ec3b9fb5a546f25f9ff10f09ae20fab91e0
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Mar 13 13:48:47 2021 +0100

    libtracker-data: Propagate errors when rebuilding FTS tokenized data
    
    So these are caught during database initialization.

 src/libtracker-data/tracker-data-manager.c        | 24 +++++++++++++++--------
 src/libtracker-data/tracker-db-interface-sqlite.c |  9 +++++----
 src/libtracker-data/tracker-db-interface-sqlite.h |  6 +++---
 src/libtracker-fts/tracker-fts.c                  | 19 +++++++++++++-----
 src/libtracker-fts/tracker-fts.h                  |  7 ++++---
 5 files changed, 42 insertions(+), 23 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 3e6cc98d8..67f97e687 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -3535,23 +3535,29 @@ ontology_get_fts_properties (TrackerDataManager  *manager,
        }
 }
 
-static void
-rebuild_fts_tokens (TrackerDataManager *manager,
-                    TrackerDBInterface *iface)
+static gboolean
+rebuild_fts_tokens (TrackerDataManager  *manager,
+                    TrackerDBInterface  *iface,
+                    GError             **error)
 {
        GHashTableIter iter;
        gchar *graph;
 
        g_debug ("Rebuilding FTS tokens, this may take a moment...");
-       tracker_db_interface_sqlite_fts_rebuild_tokens (iface, "main");
+       if (!tracker_db_interface_sqlite_fts_rebuild_tokens (iface, "main", error))
+               return FALSE;
 
        g_hash_table_iter_init (&iter, manager->graphs);
-       while (g_hash_table_iter_next (&iter, (gpointer*) &graph, NULL))
-               tracker_db_interface_sqlite_fts_rebuild_tokens (iface, graph);
+       while (g_hash_table_iter_next (&iter, (gpointer*) &graph, NULL)) {
+               if (!tracker_db_interface_sqlite_fts_rebuild_tokens (iface, graph, error))
+                       return FALSE;
+       }
 
        g_debug ("FTS tokens rebuilt");
        /* Update the stamp file */
        tracker_db_manager_tokenizer_update (manager->db_manager);
+
+       return TRUE;
 }
 
 static gboolean
@@ -4412,9 +4418,11 @@ skip_ontology_check:
 
                tracker_db_manager_set_current_locale (manager->db_manager);
 
-               rebuild_fts_tokens (manager, iface);
+               if (!rebuild_fts_tokens (manager, iface, error))
+                       return FALSE;
        } else if (!read_only && tracker_db_manager_get_tokenizer_changed (manager->db_manager)) {
-               rebuild_fts_tokens (manager, iface);
+               if (!rebuild_fts_tokens (manager, iface, error))
+                       return FALSE;
        }
 
        if (!read_only) {
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c 
b/src/libtracker-data/tracker-db-interface-sqlite.c
index b8de62afa..6a7dd5353 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -2494,11 +2494,12 @@ tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *db_interface,
        return TRUE;
 }
 
-void
-tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface,
-                                                const gchar        *database)
+gboolean
+tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface  *interface,
+                                                const gchar         *database,
+                                                GError             **error)
 {
-       tracker_fts_rebuild_tokens (interface->db, database, "fts5");
+       return tracker_fts_rebuild_tokens (interface->db, database, "fts5", error);
 }
 
 void
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.h 
b/src/libtracker-data/tracker-db-interface-sqlite.h
index 47919447b..1499a3aca 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.h
+++ b/src/libtracker-data/tracker-db-interface-sqlite.h
@@ -85,9 +85,9 @@ gboolean            tracker_db_interface_sqlite_fts_delete_text        (TrackerD
 gboolean            tracker_db_interface_sqlite_fts_delete_id          (TrackerDBInterface       *interface,
                                                                         const gchar              *database,
                                                                         int                       rowid);
-void                tracker_db_interface_sqlite_fts_rebuild_tokens     (TrackerDBInterface       *interface,
-                                                                        const gchar              *database);
-
+gboolean            tracker_db_interface_sqlite_fts_rebuild_tokens     (TrackerDBInterface       *interface,
+                                                                        const gchar              *database,
+                                                                        GError                  **error);
 
 gboolean            tracker_db_interface_attach_database               (TrackerDBInterface       
*db_interface,
                                                                         GFile                    *file,
diff --git a/src/libtracker-fts/tracker-fts.c b/src/libtracker-fts/tracker-fts.c
index e8f474fd9..95767f33f 100644
--- a/src/libtracker-fts/tracker-fts.c
+++ b/src/libtracker-fts/tracker-fts.c
@@ -270,10 +270,11 @@ error:
        return TRUE;
 }
 
-void
-tracker_fts_rebuild_tokens (sqlite3     *db,
-                           const gchar *database,
-                            const gchar *table_name)
+gboolean
+tracker_fts_rebuild_tokens (sqlite3      *db,
+                           const gchar  *database,
+                            const gchar  *table_name,
+                            GError      **error)
 {
        gchar *query;
        gint rc;
@@ -284,5 +285,13 @@ tracker_fts_rebuild_tokens (sqlite3     *db,
        rc = sqlite3_exec(db, query, NULL, NULL, NULL);
        g_free (query);
 
-       g_warn_if_fail (rc == SQLITE_OK);
+       if (rc != SQLITE_OK) {
+               g_set_error (error,
+                            TRACKER_DB_INTERFACE_ERROR,
+                            TRACKER_DB_OPEN_ERROR,
+                            "%s", sqlite3_errstr (rc));
+               return FALSE;
+       }
+
+       return TRUE;
 }
diff --git a/src/libtracker-fts/tracker-fts.h b/src/libtracker-fts/tracker-fts.h
index 04074bacf..65f5665fa 100644
--- a/src/libtracker-fts/tracker-fts.h
+++ b/src/libtracker-fts/tracker-fts.h
@@ -49,9 +49,10 @@ gboolean    tracker_fts_alter_table      (sqlite3      *db,
                                           GHashTable   *tables,
                                           GHashTable   *grouped_columns,
                                           GError      **error);
-void        tracker_fts_rebuild_tokens   (sqlite3     *db,
-                                          const gchar *database,
-                                          const gchar *table_name);
+gboolean    tracker_fts_rebuild_tokens   (sqlite3      *db,
+                                          const gchar  *database,
+                                          const gchar  *table_name,
+                                          GError      **error);
 
 G_END_DECLS
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]