[tracker/remove-journal-on-db-bump] tracker-data: Remove the journal when a db-bump takes place



commit 4751f6916f9c23f1ba36bee8acf84d60f1b4c7f1
Author: Philip Van Hoof <philip codeminded be>
Date:   Thu Aug 12 13:48:54 2010 +0200

    tracker-data: Remove the journal when a db-bump takes place
    
    Also remove the db-version.txt file when tracker-control -r is called.
    
    This fixes NB#184823,

 src/libtracker-data/tracker-data-manager.c |    6 +-
 src/libtracker-data/tracker-db-manager.c   |  148 +++++++++++++++-------------
 src/libtracker-data/tracker-db-manager.h   |    1 -
 src/tracker-control/tracker-control.c      |    2 +-
 4 files changed, 84 insertions(+), 73 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index c568808..232e55b 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -2684,7 +2684,7 @@ tracker_data_manager_init (TrackerDBManagerFlags  flags,
 	GList *sorted = NULL, *l;
 	const gchar *env_path;
 	gint max_id = 0;
-	gboolean read_only, needed_reindex = FALSE;
+	gboolean read_only;
 
 	tracker_data_update_init ();
 
@@ -2704,7 +2704,7 @@ tracker_data_manager_init (TrackerDBManagerFlags  flags,
 
 	read_journal = FALSE;
 
-	if (!tracker_db_manager_init (flags, &is_first_time_index, &needed_reindex, TRUE)) {
+	if (!tracker_db_manager_init (flags, &is_first_time_index, TRUE)) {
 		return FALSE;
 	}
 
@@ -2718,7 +2718,7 @@ tracker_data_manager_init (TrackerDBManagerFlags  flags,
 
 	iface = tracker_db_manager_get_db_interface ();
 
-	if (journal_check && is_first_time_index && !needed_reindex) {
+	if (journal_check && is_first_time_index) {
 		if (tracker_db_journal_reader_init (NULL)) {
 			if (tracker_db_journal_reader_next (NULL)) {
 				/* journal with at least one valid transaction
diff --git a/src/libtracker-data/tracker-db-manager.c b/src/libtracker-data/tracker-db-manager.c
index 37ad10f..fbd4c82 100644
--- a/src/libtracker-data/tracker-db-manager.c
+++ b/src/libtracker-data/tracker-db-manager.c
@@ -384,92 +384,105 @@ db_interface_create (TrackerDB db)
 }
 
 static void
-db_manager_remove_all (gboolean rm_journal)
+db_manager_remove_journal (void)
 {
-	guint i;
-
-	g_message ("Removing all database/storage files");
+	const gchar *opath = tracker_db_journal_get_filename ();
 
-	/* Remove stamp files */
-	tracker_db_manager_set_first_index_done (FALSE);
-	tracker_db_manager_set_last_crawl_done (FALSE);
+	if (opath) {
+		GFile *file;
+		gchar *cpath;
+		gchar *directory, *rotate_to = NULL;
+		gsize chunk_size;
+		gboolean do_rotate = FALSE;
+		const gchar *dirs[3] = { NULL, NULL, NULL };
+		guint i;
 
-	/* NOTE: We don't have to be initialized for this so we
-	 * calculate the absolute directories here.
-	 */
-	for (i = 1; i < G_N_ELEMENTS (dbs); i++) {
+		cpath = g_strdup (opath);
 
-		g_message ("  Removing database:'%s'",
-		           dbs[i].abs_filename);
-		g_unlink (dbs[i].abs_filename);
-	}
+		g_message ("  Removing journal:'%s'", cpath);
 
-	if (rm_journal) {
-		const gchar *opath = tracker_db_journal_get_filename ();
+		directory = g_path_get_dirname (cpath);
 
-		if (opath) {
-			GFile *file;
-			gchar *cpath;
-			gchar *directory, *rotate_to = NULL;
-			gsize chunk_size;
-			gboolean do_rotate = FALSE;
-			const gchar *dirs[3] = { NULL, NULL, NULL };
+		tracker_db_journal_get_rotating (&do_rotate, &chunk_size, &rotate_to);
 
-			cpath = g_strdup (opath);
+		tracker_db_journal_shutdown ();
 
-			g_message ("  Removing journal:'%s'", cpath);
+		dirs[0] = directory;
+		dirs[1] = do_rotate ? rotate_to : NULL;
 
-			directory = g_path_get_dirname (cpath);
+		for (i = 0; dirs[i] != NULL; i++) {
+			GDir *journal_dir;
+			const gchar *f_name;
 
-			tracker_db_journal_get_rotating (&do_rotate, &chunk_size, &rotate_to);
+			journal_dir = g_dir_open (dirs[i], 0, NULL);
+			if (!journal_dir) {
+				continue;
+			}
+			f_name = g_dir_read_name (journal_dir);
 
-			tracker_db_journal_shutdown ();
+			/* Remove rotated chunks */
+			while (f_name) {
+				gchar *fullpath;
 
-			dirs[0] = directory;
-			dirs[1] = do_rotate ? rotate_to : NULL;
+				if (f_name) {
+					if (!g_str_has_prefix (f_name, TRACKER_DB_JOURNAL_FILENAME ".")) {
+						f_name = g_dir_read_name (journal_dir);
+						continue;
+					}
+				}
 
-			for (i = 0; dirs[i] != NULL; i++) {
-				GDir *journal_dir;
-				const gchar *f_name;
+				fullpath = g_build_filename (dirs[i], f_name, NULL);
+				file = g_file_new_for_path (fullpath);
+				g_file_delete (file, NULL, NULL);
+				g_object_unref (file);
+				g_free (fullpath);
 
-				journal_dir = g_dir_open (dirs[i], 0, NULL);
-				if (!journal_dir) {
-					continue;
-				}
 				f_name = g_dir_read_name (journal_dir);
+			}
 
-				/* Remove rotated chunks */
-				while (f_name) {
-					gchar *fullpath;
+			g_dir_close (journal_dir);
+		}
 
-					if (f_name) {
-						if (!g_str_has_prefix (f_name, TRACKER_DB_JOURNAL_FILENAME ".")) {
-							f_name = g_dir_read_name (journal_dir);
-							continue;
-						}
-					}
+		g_free (rotate_to);
+		g_free (directory);
 
-					fullpath = g_build_filename (dirs[i], f_name, NULL);
-					file = g_file_new_for_path (fullpath);
-					g_file_delete (file, NULL, NULL);
-					g_object_unref (file);
-					g_free (fullpath);
+		/* Remove active journal */
+		file = g_file_new_for_path (cpath);
+		g_file_delete (file, NULL, NULL);
+		g_object_unref (file);
+		g_free (cpath);
+	}
+}
 
-					f_name = g_dir_read_name (journal_dir);
-				}
+static void
+db_manager_remove_all (gboolean rm_journal)
+{
+	guint i;
 
-				g_dir_close (journal_dir);
-			}
+	g_message ("Removing all database/storage files");
+
+	/* Remove stamp files */
+	tracker_db_manager_set_first_index_done (FALSE);
+	tracker_db_manager_set_last_crawl_done (FALSE);
+
+	/* NOTE: We don't have to be initialized for this so we
+	 * calculate the absolute directories here.
+	 */
+	for (i = 1; i < G_N_ELEMENTS (dbs); i++) {
 
-			g_free (rotate_to);
-			g_free (directory);
+		g_message ("  Removing database:'%s'", dbs[i].abs_filename);
+		g_unlink (dbs[i].abs_filename);
+	}
 
-			/* Remove active journal */
-			file = g_file_new_for_path (cpath);
-			g_file_delete (file, NULL, NULL);
-			g_object_unref (file);
-			g_free (cpath);
-		}
+	if (rm_journal) {
+		gchar *filename;
+		db_manager_remove_journal ();
+		/* If also the journal is gone, we can also remove db-version.txt, it
+		 * would have no more relevance whatsoever. */
+		filename = g_build_filename (data_dir, TRACKER_DB_VERSION_FILE, NULL);
+		g_message ("  Removing db-version file:'%s'", filename);
+		g_unlink (filename);
+		g_free (filename);
 	}
 }
 
@@ -654,7 +667,6 @@ free_thread_interface (gpointer data)
 gboolean
 tracker_db_manager_init (TrackerDBManagerFlags  flags,
                          gboolean              *first_time,
-                         gboolean              *needed_reindex,
                          gboolean               shared_cache)
 {
 	GType               etype;
@@ -745,9 +757,9 @@ tracker_db_manager_init (TrackerDBManagerFlags  flags,
 	}
 
 	if (need_reindex) {
-		if (needed_reindex) {
-			*needed_reindex = TRUE;
-		}
+		tracker_db_journal_init (NULL, FALSE);
+		db_manager_remove_journal ();
+		tracker_db_journal_shutdown ();
 		db_set_version ();
 	}
 
diff --git a/src/libtracker-data/tracker-db-manager.h b/src/libtracker-data/tracker-db-manager.h
index dd9cc56..635f4f5 100644
--- a/src/libtracker-data/tracker-db-manager.h
+++ b/src/libtracker-data/tracker-db-manager.h
@@ -49,7 +49,6 @@ typedef enum {
 GType               tracker_db_get_type                       (void) G_GNUC_CONST;
 gboolean            tracker_db_manager_init                   (TrackerDBManagerFlags  flags,
                                                                gboolean              *first_time,
-                                                               gboolean              *needed_reindex,
                                                                gboolean               shared_cache);
 void                tracker_db_manager_shutdown               (void);
 void                tracker_db_manager_remove_all             (gboolean               rm_journal);
diff --git a/src/tracker-control/tracker-control.c b/src/tracker-control/tracker-control.c
index 04fb4a8..3efe871 100644
--- a/src/tracker-control/tracker-control.c
+++ b/src/tracker-control/tracker-control.c
@@ -431,7 +431,7 @@ main (int argc, char **argv)
 		g_object_unref (db_config);
 
 		/* Clean up */
-		if (!tracker_db_manager_init (TRACKER_DB_MANAGER_REMOVE_ALL, NULL, NULL, FALSE)) {
+		if (!tracker_db_manager_init (TRACKER_DB_MANAGER_REMOVE_ALL, NULL, FALSE)) {
 			return EXIT_FAILURE;
 		}
 



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