[tracker/urho-sync] Changed the logic about journal playing and meta-backup.db picking
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/urho-sync] Changed the logic about journal playing and meta-backup.db picking
- Date: Tue, 4 Aug 2009 14:36:34 +0000 (UTC)
commit 06fee84f767a2363c8eac30ccd424ac1f932d975
Author: Philip Van Hoof <philip codeminded be>
Date: Tue Aug 4 16:35:55 2009 +0200
Changed the logic about journal playing and meta-backup.db picking
src/libtracker-data/tracker-data-manager.c | 5 ++-
src/libtracker-data/tracker-data-manager.h | 3 +-
src/libtracker-db/tracker-db-interface-sqlite.c | 17 +---------
src/libtracker-db/tracker-db-manager.c | 37 ++++++++++++++++++++++-
src/libtracker-db/tracker-db-manager.h | 3 +-
src/tracker-store/tracker-main.c | 8 +++--
src/tracker-store/tracker-store.c | 6 ++-
src/tracker-store/tracker-store.h | 2 +-
src/tracker-utils/tracker-processes.c | 2 +-
tests/libtracker-data/tracker-ontology-test.c | 2 +-
tests/libtracker-data/tracker-sparql-test.c | 2 +-
11 files changed, 58 insertions(+), 29 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 7595243..59c90f4 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -748,7 +748,8 @@ create_fts_table (TrackerDBInterface *iface)
gboolean
tracker_data_manager_init (TrackerDBManagerFlags flags,
const gchar *test_schema,
- gboolean *first_time)
+ gboolean *first_time,
+ gboolean *need_journal)
{
TrackerDBInterface *iface;
gboolean is_first_time_index;
@@ -757,7 +758,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
return TRUE;
}
- tracker_db_manager_init (flags, &is_first_time_index, FALSE);
+ tracker_db_manager_init (flags, &is_first_time_index, FALSE, need_journal);
if (first_time != NULL) {
*first_time = is_first_time_index;
diff --git a/src/libtracker-data/tracker-data-manager.h b/src/libtracker-data/tracker-data-manager.h
index 012a6c2..b9b19a8 100644
--- a/src/libtracker-data/tracker-data-manager.h
+++ b/src/libtracker-data/tracker-data-manager.h
@@ -36,7 +36,8 @@ G_BEGIN_DECLS
gboolean tracker_data_manager_init (TrackerDBManagerFlags flags,
const gchar *test_schema,
- gboolean *first_time);
+ gboolean *first_time,
+ gboolean *need_journal);
void tracker_data_manager_shutdown (void);
gint tracker_data_manager_get_db_option_int (const gchar *option);
diff --git a/src/libtracker-db/tracker-db-interface-sqlite.c b/src/libtracker-db/tracker-db-interface-sqlite.c
index 7deab6a..68e8beb 100644
--- a/src/libtracker-db/tracker-db-interface-sqlite.c
+++ b/src/libtracker-db/tracker-db-interface-sqlite.c
@@ -601,29 +601,16 @@ create_result_set_from_stmt (TrackerDBInterfaceSqlite *interface,
if (sqlite3_errcode (priv->db) == SQLITE_IOERR ||
sqlite3_errcode (priv->db) == SQLITE_CORRUPT ||
sqlite3_errcode (priv->db) == SQLITE_NOTADB) {
- GFile *orig, *file, *parent;
sqlite3_finalize (stmt);
sqlite3_close (priv->db);
- orig = g_file_new_for_path (priv->filename);
- parent = g_file_get_parent (orig);
- file = g_file_get_child (parent, TRACKER_META_BACKUP_DB_FILENAME);
-
- if (g_file_query_exists (file, NULL)) {
- g_file_copy (file, orig, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, NULL);
- } else {
- g_file_delete (file, NULL, NULL);
- }
-
- g_object_unref (file);
- g_object_unref (parent);
- g_object_unref (file);
+ g_unlink (priv->filename);
g_error ("SQLite experienced an error with file:'%s'. "
"It is either NOT a SQLite database or it is "
"corrupt or there was an IO error accessing the data. "
- "This file has now been replaced with the last known backup "
+ "This file has now been removed and will be recreated on the next start. "
"Shutting down now.",
priv->filename);
diff --git a/src/libtracker-db/tracker-db-manager.c b/src/libtracker-db/tracker-db-manager.c
index 9b89d9a..c26a433 100644
--- a/src/libtracker-db/tracker-db-manager.c
+++ b/src/libtracker-db/tracker-db-manager.c
@@ -1019,7 +1019,8 @@ tracker_db_manager_ensure_locale (void)
gboolean
tracker_db_manager_init (TrackerDBManagerFlags flags,
gboolean *first_time,
- gboolean shared_cache)
+ gboolean shared_cache,
+ gboolean *need_journal)
{
GType etype;
TrackerDBVersion version;
@@ -1028,6 +1029,7 @@ tracker_db_manager_init (TrackerDBManagerFlags flags,
const gchar *env_path;
gboolean need_reindex;
guint i;
+ const gchar *meta_filename;
if (first_time) {
*first_time = FALSE;
@@ -1126,6 +1128,39 @@ tracker_db_manager_init (TrackerDBManagerFlags flags,
}
}
+ /* This is currently the only test for need_journal. We should add a
+ * couple tests that test meta.db against consistenty, and if not
+ * good, copy meta-backup.db over and set need_journal (being less
+ * conservative about using the backup, and not trusting the meta.db
+ * as much as we do right now) */
+
+ meta_filename = tracker_db_manager_get_file (TRACKER_DB_METADATA);
+
+ if (meta_filename) {
+ GFile *file;
+
+ file = g_file_new_for_path (meta_filename);
+ if (g_file_query_exists (file, NULL)) {
+ GFile *parent, *backup;
+
+ parent = g_file_get_parent (file);
+ backup = g_file_get_child (parent, TRACKER_META_BACKUP_DB_FILENAME);
+
+ if (g_file_query_exists (backup, NULL)) {
+ g_file_move (backup, file, G_FILE_COPY_OVERWRITE, NULL,
+ NULL, NULL, NULL);
+ if (need_journal) {
+ *need_journal = TRUE;
+ }
+ }
+
+ g_object_unref (parent);
+ g_object_unref (backup);
+ }
+
+ g_object_unref (file);
+ }
+
/* If we are just initializing to remove the databases,
* return here.
*/
diff --git a/src/libtracker-db/tracker-db-manager.h b/src/libtracker-db/tracker-db-manager.h
index d7701ba..9dc067d 100644
--- a/src/libtracker-db/tracker-db-manager.h
+++ b/src/libtracker-db/tracker-db-manager.h
@@ -49,7 +49,8 @@ GType tracker_db_get_type (void) G_GNUC_CONST;
gboolean tracker_db_manager_init (TrackerDBManagerFlags flags,
gboolean *first_time,
- gboolean shared_cache);
+ gboolean shared_cache,
+ gboolean *need_journal);
void tracker_db_manager_shutdown (void);
void tracker_db_manager_remove_all (void);
diff --git a/src/tracker-store/tracker-main.c b/src/tracker-store/tracker-main.c
index 8519d92..1683588 100644
--- a/src/tracker-store/tracker-main.c
+++ b/src/tracker-store/tracker-main.c
@@ -645,7 +645,7 @@ main (gint argc, gchar *argv[])
TrackerPower *hal_power;
TrackerStorage *hal_storage;
TrackerDBManagerFlags flags = 0;
- gboolean is_first_time_index;
+ gboolean is_first_time_index, need_journal = FALSE;
g_type_init ();
@@ -747,7 +747,6 @@ main (gint argc, gchar *argv[])
NULL);
#endif /* HAVE_HAL */
- tracker_store_init ();
tracker_turtle_init ();
flags |= TRACKER_DB_MANAGER_REMOVE_CACHE;
@@ -763,10 +762,13 @@ main (gint argc, gchar *argv[])
flags |= TRACKER_DB_MANAGER_LOW_MEMORY_MODE;
}
- if (!tracker_data_manager_init (flags, NULL, &is_first_time_index)) {
+ if (!tracker_data_manager_init (flags, NULL, &is_first_time_index,
+ &need_journal)) {
return EXIT_FAILURE;
}
+ tracker_store_init (need_journal);
+
#ifdef HAVE_HAL
/* We set up the mount points here. For the mount points, this
* means contacting the Indexer. This means that we have to
diff --git a/src/tracker-store/tracker-store.c b/src/tracker-store/tracker-store.c
index 6ef5760..d4c862f 100644
--- a/src/tracker-store/tracker-store.c
+++ b/src/tracker-store/tracker-store.c
@@ -312,7 +312,7 @@ immediate_commit (GError *error, gpointer user_data)
}
void
-tracker_store_init (void)
+tracker_store_init (gboolean load_journal)
{
TrackerStorePrivate *private;
gchar *filename;
@@ -331,7 +331,9 @@ tracker_store_init (void)
TRACKER_META_BACKUP_LOG_FILENAME,
NULL);
- g_file_get_contents (filename, &lines, &len, NULL);
+ if (load_journal) {
+ g_file_get_contents (filename, &lines, &len, NULL);
+ }
journal = fopen (filename, "a");
diff --git a/src/tracker-store/tracker-store.h b/src/tracker-store/tracker-store.h
index 27f7eb6..114c92c 100644
--- a/src/tracker-store/tracker-store.h
+++ b/src/tracker-store/tracker-store.h
@@ -36,7 +36,7 @@ typedef void (* TrackerStoreCommitCallback) (gpointer user_data);
typedef void (* TrackerStoreTurtleCallback) (GError *error,
gpointer user_data);
-void tracker_store_init (void);
+void tracker_store_init (gboolean load_journal);
void tracker_store_shutdown (void);
void tracker_store_queue_commit (TrackerStoreCommitCallback callback,
gpointer user_data,
diff --git a/src/tracker-utils/tracker-processes.c b/src/tracker-utils/tracker-processes.c
index 344853d..84499d7 100644
--- a/src/tracker-utils/tracker-processes.c
+++ b/src/tracker-utils/tracker-processes.c
@@ -246,7 +246,7 @@ main (int argc, char **argv)
g_log_set_default_handler (log_handler, NULL);
/* Clean up */
- if (!tracker_db_manager_init (TRACKER_DB_MANAGER_REMOVE_ALL, NULL, FALSE)) {
+ if (!tracker_db_manager_init (TRACKER_DB_MANAGER_REMOVE_ALL, NULL, FALSE, NULL)) {
return EXIT_FAILURE;
}
diff --git a/tests/libtracker-data/tracker-ontology-test.c b/tests/libtracker-data/tracker-ontology-test.c
index 571398a..8ab7c0e 100644
--- a/tests/libtracker-data/tracker-ontology-test.c
+++ b/tests/libtracker-data/tracker-ontology-test.c
@@ -111,7 +111,7 @@ test_query (gconstpointer test_data)
/* initialization */
tracker_data_manager_init (TRACKER_DB_MANAGER_FORCE_REINDEX,
NULL,
- NULL);
+ NULL, NULL);
/* load data set */
data_filename = g_strconcat (data_prefix, ".ttl", NULL);
diff --git a/tests/libtracker-data/tracker-sparql-test.c b/tests/libtracker-data/tracker-sparql-test.c
index e0376e1..12fff5e 100644
--- a/tests/libtracker-data/tracker-sparql-test.c
+++ b/tests/libtracker-data/tracker-sparql-test.c
@@ -98,7 +98,7 @@ test_sparql_query (gconstpointer test_data)
tracker_data_manager_init (TRACKER_DB_MANAGER_FORCE_REINDEX,
data_prefix,
- NULL);
+ NULL, NULL);
/* data_path = g_build_path (G_DIR_SEPARATOR_S, TOP_SRCDIR, "tests", "libtracker-data", NULL); */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]