[tracker/remove-journal-on-db-bump] tracker-data: Remove the journal when a db-bump takes place
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/remove-journal-on-db-bump] tracker-data: Remove the journal when a db-bump takes place
- Date: Thu, 12 Aug 2010 11:50:42 +0000 (UTC)
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]