summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2016-10-19 20:29:27 +0200
committerCarlos Garnacho <carlosg@gnome.org>2016-10-19 20:44:53 +0200
commit623982154901d90a60a29e7171f86bd773bdc3bd (patch)
treecab7b5ac438dd20e3f27379d2c16aa9a36be41b2
parent1249dce7320afba7a6a49bc0afead1c1d59a3146 (diff)
downloadtracker-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.vapi2
-rw-r--r--src/libtracker-data/tracker-data-manager.c2
-rw-r--r--src/libtracker-data/tracker-db-manager.c9
-rw-r--r--src/libtracker-data/tracker-db-manager.h2
-rw-r--r--src/libtracker-direct/tracker-direct.vala4
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");