[tracker] libtracker-data: Propagate "locale mismatch" error from locale_changed()



commit 623982154901d90a60a29e7171f86bd773bdc3bd
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Oct 19 20:29:27 2016 +0200

    libtracker-data: Propagate "locale mismatch" error from locale_changed()
    
    And set the differing locales in the error message. Errors here are
    mainly due to 1) inconsistent locales, specifically the client running
    with a different locale than tracker-store, and 2) faulty apps that don't
    call setlocale() as appropriate.
    
    We already used to warn when locales differ, but the message wasn't
    that useful. Including the differing locales helps narrow down the
    issue. This error is mainly visible in the libtracker-direct backend,
    tracker-store shall handle locale changes on (re)start.

 src/libtracker-data/libtracker-data.vapi   |    2 +-
 src/libtracker-data/tracker-data-manager.c |    2 +-
 src/libtracker-data/tracker-db-manager.c   |    9 ++++++---
 src/libtracker-data/tracker-db-manager.h   |    2 +-
 src/libtracker-direct/tracker-direct.vala  |    4 +---
 5 files changed, 10 insertions(+), 9 deletions(-)
---
diff --git a/src/libtracker-data/libtracker-data.vapi b/src/libtracker-data/libtracker-data.vapi
index 65ca605..943346c 100644
--- a/src/libtracker-data/libtracker-data.vapi
+++ b/src/libtracker-data/libtracker-data.vapi
@@ -87,7 +87,7 @@ namespace Tracker {
                public void lock ();
                public bool trylock ();
                public void unlock ();
-               public bool locale_changed ();
+               public bool locale_changed () throws DBInterfaceError;
        }
 
        [CCode (cheader_filename = "libtracker-data/tracker-db-interface.h")]
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 6004878..9de0213 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -4600,7 +4600,7 @@ tracker_data_manager_init (TrackerDBManagerFlags   flags,
 #endif /* DISABLE_JOURNAL */
 
        /* If locale changed, re-create indexes */
-       if (!read_only && tracker_db_manager_locale_changed ()) {
+       if (!read_only && tracker_db_manager_locale_changed (NULL)) {
                /* Report OPERATION - STATUS */
                busy_status = g_strdup_printf ("%s - %s",
                                               busy_operation,
diff --git a/src/libtracker-data/tracker-db-manager.c b/src/libtracker-data/tracker-db-manager.c
index ef7d762..febaf06 100644
--- a/src/libtracker-data/tracker-db-manager.c
+++ b/src/libtracker-data/tracker-db-manager.c
@@ -646,7 +646,7 @@ db_set_locale (const gchar *locale)
 }
 
 gboolean
-tracker_db_manager_locale_changed (void)
+tracker_db_manager_locale_changed (GError **error)
 {
        gchar *db_locale;
        gchar *current_locale;
@@ -670,8 +670,11 @@ tracker_db_manager_locale_changed (void)
         * both to NULL is actually valid, they would default to
         * the unicode collation without locale-specific stuff. */
        if (g_strcmp0 (db_locale, current_locale) != 0) {
-               g_message ("Locale change detected from '%s' to '%s'...",
-                          db_locale, current_locale);
+               g_set_error (error,
+                            TRACKER_DB_INTERFACE_ERROR,
+                            TRACKER_DB_OPEN_ERROR,
+                            "Locale change detected (DB:%s, User/App:%s)",
+                            db_locale, current_locale);
                changed = TRUE;
        } else {
                g_message ("Current and DB locales match: '%s'", db_locale);
diff --git a/src/libtracker-data/tracker-db-manager.h b/src/libtracker-data/tracker-db-manager.h
index c88c7b4..396a13a 100644
--- a/src/libtracker-data/tracker-db-manager.h
+++ b/src/libtracker-data/tracker-db-manager.h
@@ -87,7 +87,7 @@ void                tracker_db_manager_set_first_index_done   (gboolean done);
 void                tracker_db_manager_set_last_crawl_done    (gboolean done);
 void                tracker_db_manager_set_need_mtime_check   (gboolean needed);
 
-gboolean            tracker_db_manager_locale_changed         (void);
+gboolean            tracker_db_manager_locale_changed         (GError **error);
 void                tracker_db_manager_set_current_locale     (void);
 
 gboolean            tracker_db_manager_get_tokenizer_changed  (void);
diff --git a/src/libtracker-direct/tracker-direct.vala b/src/libtracker-direct/tracker-direct.vala
index 1cacf09..00440cc 100644
--- a/src/libtracker-direct/tracker-direct.vala
+++ b/src/libtracker-direct/tracker-direct.vala
@@ -29,9 +29,7 @@ public class Tracker.Direct.Connection : Tracker.Sparql.Connection {
                                // make sure that current locale vs db locale are the same,
                                // otherwise return an error
                                Locale.init ();
-                               if (DBManager.locale_changed ()) {
-                                       throw new Sparql.Error.INTERNAL ("Locale mismatch, cannot use direct 
connection");
-                               }
+                               DBManager.locale_changed ();
 
                                uint select_cache_size = 100;
                                string env_cache_size = Environment.get_variable 
("TRACKER_SPARQL_CACHE_SIZE");


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