diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2016-10-19 20:29:27 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2016-10-19 20:44:53 +0200 |
commit | 623982154901d90a60a29e7171f86bd773bdc3bd (patch) | |
tree | cab7b5ac438dd20e3f27379d2c16aa9a36be41b2 | |
parent | 1249dce7320afba7a6a49bc0afead1c1d59a3146 (diff) | |
download | tracker-623982154901d90a60a29e7171f86bd773bdc3bd.tar.gz |
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.
-rw-r--r-- | src/libtracker-data/libtracker-data.vapi | 2 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 2 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-manager.c | 9 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-manager.h | 2 | ||||
-rw-r--r-- | 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 65ca605a6..943346ca4 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 60048786f..9de0213ab 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 ef7d76241..febaf0686 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 c88c7b43c..396a13a3a 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 1cacf09fd..00440ccf9 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"); |