[tracker/urho-sync] Refactored the journal code a bit



commit 57e8168e31fcd5322798bd2b66f1f079b100ed76
Author: Philip Van Hoof <philip codeminded be>
Date:   Wed Aug 5 10:43:02 2009 +0200

    Refactored the journal code a bit

 src/libtracker-db/Makefile.am                   |    6 +-
 src/libtracker-db/tracker-db-backup.c           |    2 +-
 src/libtracker-db/tracker-db-backup.h           |    2 +
 src/libtracker-db/tracker-db-interface-sqlite.h |    3 -
 src/libtracker-db/tracker-db-journal.c          |   90 +++++++++++++++++++++++
 src/libtracker-db/tracker-db-journal.h          |   41 ++++++++++
 src/libtracker-db/tracker-db-manager.c          |    3 +-
 src/tracker-store/tracker-store.c               |   48 ++++--------
 8 files changed, 155 insertions(+), 40 deletions(-)
---
diff --git a/src/libtracker-db/Makefile.am b/src/libtracker-db/Makefile.am
index 65fffa9..31eaa25 100644
--- a/src/libtracker-db/Makefile.am
+++ b/src/libtracker-db/Makefile.am
@@ -20,14 +20,16 @@ libtracker_db_la_SOURCES = 						\
 	tracker-db-interface.c						\
 	tracker-db-interface-sqlite.c					\
 	tracker-db-manager.c						\
-	tracker-db-backup.c
+	tracker-db-backup.c						\
+	tracker-db-journal.c
 
 noinst_HEADERS =							\
 	tracker-db-dbus.h						\
 	tracker-db-interface.h						\
 	tracker-db-interface-sqlite.h					\
 	tracker-db-manager.h 						\
-	tracker-db-backup.h
+	tracker-db-backup.h						\
+	tracker-db-journal.h
 
 libtracker_db_la_LDFLAGS =						\
 	-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
diff --git a/src/libtracker-db/tracker-db-backup.c b/src/libtracker-db/tracker-db-backup.c
index 647995f..4ed9a3c 100644
--- a/src/libtracker-db/tracker-db-backup.c
+++ b/src/libtracker-db/tracker-db-backup.c
@@ -190,7 +190,7 @@ tracker_db_backup_save (TrackerBackupFinished callback,
 	file = g_file_new_for_path (db_file);
 	parent = g_file_get_parent (file);
 	g_object_unref (file);
-	file = g_file_get_child (parent, TRACKER_META_BACKUP_DB_FILENAME);
+	file = g_file_get_child (parent, TRACKER_DB_BACKUP_META_FILENAME);
 	g_object_unref (parent);
 	info->backup_fname = g_file_get_path (file);
 	g_object_unref (file);
diff --git a/src/libtracker-db/tracker-db-backup.h b/src/libtracker-db/tracker-db-backup.h
index e8ec27a..c67d6dc 100644
--- a/src/libtracker-db/tracker-db-backup.h
+++ b/src/libtracker-db/tracker-db-backup.h
@@ -26,6 +26,8 @@
 #include <glib.h>
 #include <gio/gio.h>
 
+#define TRACKER_DB_BACKUP_META_FILENAME		"meta-backup.db"
+
 G_BEGIN_DECLS
 
 #define TRACKER_DB_BACKUP_ERROR	    (tracker_db_backup_error_quark ())
diff --git a/src/libtracker-db/tracker-db-interface-sqlite.h b/src/libtracker-db/tracker-db-interface-sqlite.h
index bd2e305..8ef3ace 100644
--- a/src/libtracker-db/tracker-db-interface-sqlite.h
+++ b/src/libtracker-db/tracker-db-interface-sqlite.h
@@ -20,9 +20,6 @@
 #ifndef __TRACKER_DB_INTERFACE_SQLITE_H__
 #define __TRACKER_DB_INTERFACE_SQLITE_H__
 
-#define TRACKER_META_BACKUP_DB_FILENAME		"meta-backup.db"
-#define TRACKER_META_BACKUP_LOG_FILENAME	"log.sparql.txt"
-
 #include "tracker-db-interface.h"
 
 G_BEGIN_DECLS
diff --git a/src/libtracker-db/tracker-db-journal.c b/src/libtracker-db/tracker-db-journal.c
new file mode 100644
index 0000000..a704531
--- /dev/null
+++ b/src/libtracker-db/tracker-db-journal.c
@@ -0,0 +1,90 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2009, Nokia
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ *
+ * Author: Philip Van Hoof <philip codeminded be>
+ */
+#include "config.h"
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "tracker-db-journal.h"
+
+static gchar *filename = NULL;
+static FILE *journal = NULL;
+
+static void
+get_filename (void)
+{
+	if (!filename) {
+		filename = g_build_filename (g_get_tmp_dir (), 
+		                             TRACKER_DB_JOURNAL_LOG_FILENAME, 
+		                             NULL);
+	}
+}
+
+void
+tracker_db_journal_open (void)
+{
+	get_filename ();
+	journal = fopen (filename, "a");
+}
+
+void
+tracker_db_journal_log (const gchar *query)
+{
+	if (journal) {
+		write (fileno (journal), query, strlen (query));
+		write (fileno (journal), "\n", 1);
+		fsync (fileno (journal));
+	}
+}
+
+void
+tracker_db_journal_truncate (void)
+{
+	if (journal) {
+		ftruncate(fileno (journal), 0);
+	}
+}
+
+void
+tracker_db_journal_close (void)
+{
+	if (journal) {
+		fclose (journal);
+	}
+
+	g_free (filename);
+}
+
+gchar *
+tracker_db_journal_get_content (void)
+{
+	gchar *lines = NULL;
+	gsize len;
+
+	get_filename ();
+
+	g_file_get_contents (filename, &lines, &len, NULL);
+
+	return lines;
+}
diff --git a/src/libtracker-db/tracker-db-journal.h b/src/libtracker-db/tracker-db-journal.h
new file mode 100644
index 0000000..bb2aeac
--- /dev/null
+++ b/src/libtracker-db/tracker-db-journal.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2009, Nokia
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ *
+ * Author: Philip Van Hoof <philip codeminded be>
+ */
+
+#ifndef __TRACKER_DB_JOURNAL_H__
+#define __TRACKER_DB_JOURNAL_H__
+
+#include <glib.h>
+#include <gio/gio.h>
+
+#define TRACKER_DB_JOURNAL_LOG_FILENAME		"log.sparql.txt"
+
+G_BEGIN_DECLS
+
+void tracker_db_journal_open (void);
+void tracker_db_journal_log (const gchar *query);
+void tracker_db_journal_truncate (void);
+void tracker_db_journal_close (void);
+gchar * tracker_db_journal_get_content (void);
+
+G_END_DECLS
+
+#endif /* __TRACKER_DB_JOURNAL_H__ */
diff --git a/src/libtracker-db/tracker-db-manager.c b/src/libtracker-db/tracker-db-manager.c
index f9f031c..89fee9c 100644
--- a/src/libtracker-db/tracker-db-manager.c
+++ b/src/libtracker-db/tracker-db-manager.c
@@ -35,6 +35,7 @@
 #include <libtracker-common/tracker-type-utils.h>
 #include <libtracker-common/tracker-utils.h>
 
+#include "tracker-db-backup.h"
 #include "tracker-db-manager.h"
 #include "tracker-db-interface-sqlite.h"
 
@@ -1144,7 +1145,7 @@ tracker_db_manager_init (TrackerDBManagerFlags	flags,
 			GFile *parent, *backup;
 
 			parent = g_file_get_parent (file);
-			backup = g_file_get_child (parent, TRACKER_META_BACKUP_DB_FILENAME);
+			backup = g_file_get_child (parent, TRACKER_DB_BACKUP_META_FILENAME);
 
 			if (g_file_query_exists (backup, NULL)) {
 				g_file_move (backup, file, G_FILE_COPY_OVERWRITE, NULL,
diff --git a/src/tracker-store/tracker-store.c b/src/tracker-store/tracker-store.c
index d4c862f..c04635e 100644
--- a/src/tracker-store/tracker-store.c
+++ b/src/tracker-store/tracker-store.c
@@ -28,6 +28,7 @@
 #include <libtracker-common/tracker-dbus.h>
 #include <libtracker-db/tracker-db-dbus.h>
 #include <libtracker-db/tracker-db-backup.h>
+#include <libtracker-db/tracker-db-journal.h>
 #include <libtracker-db/tracker-db-interface-sqlite.h>
 
 #include <libtracker-data/tracker-data-update.h>
@@ -71,7 +72,6 @@ typedef struct {
 } TrackerStoreTask;
 
 static GStaticPrivate private_key = G_STATIC_PRIVATE_INIT;
-static FILE *journal = NULL;
 
 static void
 private_free (gpointer data)
@@ -181,10 +181,8 @@ queue_idle_handler (gpointer user_data)
 
 		tracker_data_update_sparql (task->data.query, &error);
 
-		if (journal && private->start_log) {
-			write (fileno (journal), task->data.query, strlen (task->data.query));
-			write (fileno (journal), "\n", 1);
-			fsync (fileno (journal));
+		if (private->start_log) {
+			tracker_db_journal_log (task->data.query);
 		}
 
 		if (!error) {
@@ -259,7 +257,7 @@ static void
 on_backup_done (GError *error, gpointer user_data)
 {
 	if (!error) {
-		ftruncate(fileno (journal), 0);
+		tracker_db_journal_truncate ();
 	}
 }
 
@@ -285,7 +283,7 @@ sync_idle_destroy (gpointer user_data)
 {
 	TrackerStorePrivate *private = user_data;
 
-	fclose (journal);
+	tracker_db_journal_close ();
 
 	private->have_sync_handler = FALSE;
 }
@@ -295,9 +293,7 @@ on_committed (gpointer user_data)
 {
 	TrackerStorePrivate *private;
 
-	if (journal) {
-		ftruncate(fileno (journal), 0);
-	}
+	tracker_db_journal_truncate ();
 
 	private = g_static_private_get (&private_key);
 	g_return_if_fail (private != NULL);
@@ -315,9 +311,7 @@ void
 tracker_store_init (gboolean load_journal)
 {
 	TrackerStorePrivate *private;
-	gchar *filename;
 	gchar *lines = NULL;
-	gsize len;
 
 	private = g_new0 (TrackerStorePrivate, 1);
 
@@ -327,15 +321,11 @@ tracker_store_init (gboolean load_journal)
 	                      private,
 	                      private_free);
 
-	filename = g_build_filename (g_get_tmp_dir (), 
-	                             TRACKER_META_BACKUP_LOG_FILENAME, 
-	                             NULL);
-
 	if (load_journal) {
-		g_file_get_contents (filename, &lines, &len, NULL);
+		lines = tracker_db_journal_get_content ();
 	}
 
-	journal = fopen (filename, "a");
+	tracker_db_journal_open ();
 
 	if (lines) {
 
@@ -353,16 +343,11 @@ tracker_store_init (gboolean load_journal)
 		private->start_log = TRUE;
 	}
 
-	g_free (filename);
-
-	if (journal) {
-		private->sync_handler = g_timeout_add_seconds_full (G_PRIORITY_LOW,
-		                                                    60,
-		                                                    sync_idle_handler,
-		                                                    private,
-		                                                    sync_idle_destroy);
-	}
-
+	private->sync_handler = g_timeout_add_seconds_full (G_PRIORITY_LOW,
+	                                                    60,
+	                                                    sync_idle_handler,
+	                                                    private,
+	                                                    sync_idle_destroy);
 }
 
 void
@@ -498,11 +483,8 @@ tracker_store_sparql_update (const gchar *sparql,
 
 	tracker_data_update_sparql (sparql, error);
 
-	if (journal && private->start_log) {
-		write (fileno (journal), sparql, strlen (sparql));
-		write (fileno (journal), "\n", 1);
-
-		fsync (fileno (journal));
+	if (private->start_log) {
+		tracker_db_journal_log (sparql);
 	}
 
 }



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