[tracker/urho-sync] Changed the logic about journal playing and meta-backup.db picking



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]