tracker r2980 - in trunk: . data/dbus src/libtracker-data src/tracker-indexer src/trackerd



Author: carlosg
Date: Thu Feb 26 16:52:16 2009
New Revision: 2980
URL: http://svn.gnome.org/viewvc/tracker?rev=2980&view=rev

Log:
2009-02-26  Carlos Garnacho  <carlos imendio com>

        Refactor Backups to turtle files support out to a
        org.freedesktop.Tracker.Backup interface.

        * data/dbus/tracker-backup.xml: Definition for the new interface.
        * data/dbus/tracker-daemon.xml: Remove Backup method.

        * src/libtracker-data/Makefile.am:
        * src/libtracker-data/tracker-data-backup.[ch]: New files, contain
        the actual saving/restoring to/from turtle files, this was spread
        before in tracker-indexer and trackerd.

        * src/tracker-indexer/tracker-indexer.c
        (tracker_indexer_restore_backup) (restore_backup_cb): Use new
        functions in libtracker-data.

        * src/trackerd/tracker-backup.[ch]: Now they contain TrackerBackup,
        the object that's going to handle petitions from DBus.
        * src/trackerd/tracker-dbus.c: Hook the new object into trackerd.
        * src/trackerd/tracker-daemon.c: Remove implementation for Backup
        method.

        * src/trackerd/tracker-main.c:
        * src/trackerd/Makefile.am: Miscellaneous changes.

Added:
   trunk/data/dbus/tracker-backup.xml
Modified:
   trunk/ChangeLog
   trunk/data/dbus/Makefile.am
   trunk/data/dbus/tracker-daemon.xml
   trunk/src/libtracker-data/Makefile.am
   trunk/src/tracker-indexer/tracker-indexer.c
   trunk/src/trackerd/Makefile.am
   trunk/src/trackerd/tracker-backup.c
   trunk/src/trackerd/tracker-backup.h
   trunk/src/trackerd/tracker-daemon.c
   trunk/src/trackerd/tracker-dbus.c
   trunk/src/trackerd/tracker-main.c

Modified: trunk/data/dbus/Makefile.am
==============================================================================
--- trunk/data/dbus/Makefile.am	(original)
+++ trunk/data/dbus/Makefile.am	Thu Feb 26 16:52:16 2009
@@ -3,6 +3,7 @@
 configdir = $(datadir)/tracker
 
 config_DATA =						\
+	tracker-backup.xml				\
 	tracker-daemon.xml				\
 	tracker-files.xml				\
 	tracker-keywords.xml				\

Added: trunk/data/dbus/tracker-backup.xml
==============================================================================
--- (empty file)
+++ trunk/data/dbus/tracker-backup.xml	Thu Feb 26 16:52:16 2009
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<node name="/">
+  <interface name="org.freedesktop.Tracker.Backup">
+    <method name="Save">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
+      <arg type="s" name="turtle-file" direction="in" />
+    </method>
+    <method name="Restore">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
+      <arg type="s" name="turtle-file" direction="in" />
+    </method>
+  </interface>
+</node>

Modified: trunk/data/dbus/tracker-daemon.xml
==============================================================================
--- trunk/data/dbus/tracker-daemon.xml	(original)
+++ trunk/data/dbus/tracker-daemon.xml	Thu Feb 26 16:52:16 2009
@@ -136,12 +136,6 @@
       <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
     </method>
 
-    <!-- Makes a backup). -->
-    <method name="Backup">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
-      <arg type="s" name="path" direction="in" />
-    </method>
-
     <!-- Signal change in index status - states are:
 	 "Initializing", "Watching", "Indexing", "Pending",
 	 "Optimizing", "Idle", "Shutdown".

Modified: trunk/src/libtracker-data/Makefile.am
==============================================================================
--- trunk/src/libtracker-data/Makefile.am	(original)
+++ trunk/src/libtracker-data/Makefile.am	Thu Feb 26 16:52:16 2009
@@ -15,6 +15,7 @@
 libtracker_data_LTLIBRARIES = libtracker-data.la
 
 libtracker_data_la_SOURCES = 						\
+	tracker-data-backup.c						\
 	tracker-data-live-search.c					\
 	tracker-data-manager.c						\
 	tracker-data-metadata.c						\
@@ -29,6 +30,7 @@
 	tracker-xesam-query.c
 
 noinst_HEADERS =							\
+	tracker-data-backup.h						\
 	tracker-data-live-search.h					\
 	tracker-data-manager.h						\
 	tracker-data-metadata.h						\

Modified: trunk/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- trunk/src/tracker-indexer/tracker-indexer.c	(original)
+++ trunk/src/tracker-indexer/tracker-indexer.c	Thu Feb 26 16:52:16 2009
@@ -72,6 +72,7 @@
 #include <libtracker-data/tracker-data-update.h>
 #include <libtracker-data/tracker-data-search.h>
 #include <libtracker-data/tracker-turtle.h>
+#include <libtracker-data/tracker-data-backup.h>
 
 #include "tracker-indexer.h"
 #include "tracker-indexer-module.h"
@@ -3017,34 +3018,26 @@
 }
 
 static void
-restore_backup_triple (void *user_data, const TrackerRaptorStatement *triple) {
-
-	const gchar    *values[2];
+restore_backup_cb (const gchar *subject,
+		   const gchar *predicate,
+		   const gchar *object,
+		   gpointer     user_data)
+{
+	const gchar *values[2] = { object, NULL };
 	TrackerIndexer *indexer = user_data;
-	GError         *error = NULL;
+	GError *error = NULL;
 
-	g_return_if_fail (TRACKER_IS_INDEXER (indexer));
-
-	g_debug ("Turtle loading <%s, %s, %s>",
-		 (gchar *)triple->subject, 
-		 (gchar *)triple->predicate, 
-		 (gchar *)triple->object);
-
-	values[0] = triple->object;
-	values[1] = NULL;
-
-	handle_metadata_add (indexer, 
-			     "Files", 
-			     triple->subject, 
-			     triple->predicate, 
-			     (GStrv) values, 
+	handle_metadata_add (indexer,
+			     "Files",
+			     subject,
+			     predicate,
+			     (GStrv) values,
 			     &error);
 
 	if (error) {
 		g_warning ("Restoring backup: %s", error->message);
 		g_error_free (error);
 	}
-
 }
 
 void
@@ -3054,6 +3047,7 @@
 				GError                **error)
 {
 	guint request_id;
+	GError *err = NULL;
 
 	request_id = tracker_dbus_get_next_request_id ();
 
@@ -3062,14 +3056,27 @@
 	tracker_dbus_request_new (request_id,
 				  "DBus request to restore backup data from '%s'",
 				  backup_file);
-	
-	tracker_turtle_process (backup_file, 
-				"/", 
-				(TurtleTripleCallback) restore_backup_triple, 
-				indexer);
 
-	dbus_g_method_return (context);
-	tracker_dbus_request_success (request_id);
+	tracker_data_backup_restore (backup_file,
+				     restore_backup_cb,
+				     indexer,
+				     &err);
+
+	if (err) {
+		GError *actual_error = NULL;
+
+		tracker_dbus_request_failed (request_id,
+					     &actual_error,
+					     err->message);
+
+		dbus_g_method_return_error (context, actual_error);
+
+		g_error_free (actual_error);
+		g_error_free (err);
+	} else {
+		dbus_g_method_return (context);
+		tracker_dbus_request_success (request_id);
+	}
 }
 
 

Modified: trunk/src/trackerd/Makefile.am
==============================================================================
--- trunk/src/trackerd/Makefile.am	(original)
+++ trunk/src/trackerd/Makefile.am	Thu Feb 26 16:52:16 2009
@@ -115,6 +115,7 @@
         tracker-marshal.c
 
 dbus_sources = 								\
+	tracker-backup-glue.h						\
 	tracker-daemon-glue.h						\
 	tracker-files-glue.h						\
 	tracker-keywords-glue.h						\

Modified: trunk/src/trackerd/tracker-backup.c
==============================================================================
--- trunk/src/trackerd/tracker-backup.c	(original)
+++ trunk/src/trackerd/tracker-backup.c	Thu Feb 26 16:52:16 2009
@@ -20,89 +20,100 @@
  */
 #include "config.h"
 
-#include <glib.h>
+#include <glib-object.h>
 #include <glib/gstdio.h>
+#include <libtracker-common/tracker-dbus.h>
+#include <libtracker-data/tracker-data-backup.h>
 
-#ifdef HAVE_RAPTOR
-#include <raptor.h>
-#endif
+#include "tracker-dbus.h"
+#include "tracker-indexer-client.h"
+#include "tracker-backup.h"
 
-#include <libtracker-data/tracker-data-query.h>
-#include <libtracker-data/tracker-turtle.h>
 
-#include "tracker-backup.h"
+G_DEFINE_TYPE (TrackerBackup, tracker_backup, G_TYPE_OBJECT)
 
-/*
- * (uri, metadataid, value)
- */
 static void
-extended_result_set_to_turtle (TrackerDBResultSet  *result_set, TurtleFile *turtle_file)
+tracker_backup_class_init (TrackerBackupClass *klass)
 {
-	TrackerField        *field;
-	gint	             metadata_id;
-	gboolean             valid = TRUE;
-
-	while (valid) {
-		GValue transform = {0, };
-		gchar *str = NULL;
-		gchar *uri;
-		gchar *service_type;
-
-		g_value_init (&transform, G_TYPE_STRING);
-
-		tracker_db_result_set_get (result_set, 0, &uri, -1);
-		tracker_db_result_set_get (result_set, 1, &service_type, -1);
-		tracker_db_result_set_get (result_set, 2, &metadata_id, -1);
-		tracker_db_result_set_get (result_set, 3, &str, -1);
-
-		field = tracker_ontology_get_field_by_id (metadata_id);
-		if (!field) {
-			g_critical ("Field id %d in database but not in tracker-ontology",
-				    metadata_id);
-			g_free (str);
-			g_free (service_type);
-			g_free (uri);
-			return;
-		}
-
-		g_debug ("Insertion in turtle <%s, %s, %s>",
-			 uri, tracker_field_get_name (field), str);
-		tracker_turtle_add_triple (turtle_file, uri, field, str);
-
-		g_free (str);
-		g_free (service_type);
-		g_free (uri);
-
-		valid = tracker_db_result_set_iter_next (result_set);
-	}
+}
 
+static void
+tracker_backup_init (TrackerBackup *backup)
+{
 }
 
+TrackerBackup *
+tracker_backup_new (void)
+{
+	return g_object_new (TRACKER_TYPE_BACKUP, NULL);
+}
 
-void 
-tracker_backup_save (const gchar *turtle_filename)
+void
+tracker_backup_save (TrackerBackup          *object,
+		     const gchar            *path,
+		     DBusGMethodInvocation  *context,
+		     GError                **error)
 {
-	TrackerDBResultSet *data;
-	TrackerService     *service;
-	TurtleFile          *turtle_file;
-
-	/* TODO: temporary location */
-	if (g_file_test (turtle_filename, G_FILE_TEST_EXISTS)) {
-		g_unlink (turtle_filename);
-	}
+	guint request_id;
+	GError *err = NULL;
 
-	turtle_file = tracker_turtle_open (turtle_filename);
+	request_id = tracker_dbus_get_next_request_id ();
 
-	g_message ("***** tracker_backup: Saving metadata in turtle file *****");
+	tracker_dbus_request_new (request_id,
+				  "DBus request to save backup into '%s'",
+				  path);
 
-	service = tracker_ontology_get_service_by_name ("Files");
-	data = tracker_data_query_backup_metadata (service);
+	g_message ("Backing up metadata");
+	tracker_data_backup_save (path, &err);
 
-	if (data) {
-		extended_result_set_to_turtle (data, turtle_file);
-		g_object_unref (data);
-	}
+	if (err) {
+		GError *actual_error = NULL;
+
+		tracker_dbus_request_failed (request_id,
+					     &actual_error,
+					     err->message);
 
-	tracker_turtle_close (turtle_file);
+		dbus_g_method_return_error (context, actual_error);
+
+		g_error_free (actual_error);
+		g_error_free (err);
+	} else {
+		dbus_g_method_return (context);
+		tracker_dbus_request_success (request_id);
+	}
 }
 
+void
+tracker_backup_restore (TrackerBackup          *object,
+			const gchar            *path,
+			DBusGMethodInvocation  *context,
+			GError                **error)
+{
+	guint request_id;
+	GError *err = NULL;
+
+	request_id = tracker_dbus_get_next_request_id ();
+
+	tracker_dbus_request_new (request_id,
+				  "DBus request to restore backup from '%s'",
+				  path);
+
+	org_freedesktop_Tracker_Indexer_restore_backup (tracker_dbus_indexer_get_proxy (),
+							path, &err);
+
+	if (err) {
+		GError *actual_error = NULL;
+
+		tracker_dbus_request_failed (request_id,
+					     &actual_error,
+					     err->message);
+
+		dbus_g_method_return_error (context, actual_error);
+
+		g_error_free (actual_error);
+		g_error_free (err);
+	} else {
+		dbus_g_method_return (context);
+		tracker_dbus_request_success (request_id);
+	}
+}

Modified: trunk/src/trackerd/tracker-backup.h
==============================================================================
--- trunk/src/trackerd/tracker-backup.h	(original)
+++ trunk/src/trackerd/tracker-backup.h	Thu Feb 26 16:52:16 2009
@@ -18,11 +18,49 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA  02110-1301, USA.
  */
-#ifndef __TRACKER_BACKUP_H__
-#define __TRACKER_BACKUP_H__
 
-#include <glib.h>
+#ifndef __TRACKERD_BACKUP_H__
+#define __TRACKERD_BACKUP_H__
 
-void tracker_backup_save (const gchar *turtle_filename);
+#include <glib-object.h>
 
-#endif /* __TRACKER_BACKUP_H__ */
+#define TRACKER_BACKUP_SERVICE	       "org.freedesktop.Tracker"
+#define TRACKER_BACKUP_PATH	       "/org/freedesktop/Tracker/Backup"
+#define TRACKER_BACKUP_INTERFACE       "org.freedesktop.Tracker.Backup"
+
+G_BEGIN_DECLS
+
+#define TRACKER_TYPE_BACKUP	       (tracker_backup_get_type ())
+#define TRACKER_BACKUP(object)	       (G_TYPE_CHECK_INSTANCE_CAST ((object), TRACKER_TYPE_BACKUP, TrackerBackup))
+#define TRACKER_BACKUP_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), TRACKER_TYPE_DBUS_BACKUP, TrackerBackupClass))
+#define TRACKER_IS_BACKUP(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), TRACKER_TYPE_BACKUP))
+#define TRACKER_IS_BACKUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TRACKER_TYPE_BACKUP))
+#define TRACKER_BACKUP_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), TRACKER_TYPE_BACKUP, TrackerBackupClass))
+
+typedef struct TrackerBackup	  TrackerBackup;
+typedef struct TrackerBackupClass TrackerBackupClass;
+
+struct TrackerBackup {
+	GObject parent;
+};
+
+struct TrackerBackupClass {
+	GObjectClass parent;
+};
+
+GType	       tracker_backup_get_type		   (void) G_GNUC_CONST;
+
+TrackerBackup *tracker_backup_new		   (void);
+
+void           tracker_backup_save                 (TrackerBackup         *object,
+						    const gchar           *path,
+						    DBusGMethodInvocation *context,
+						    GError **error);
+void           tracker_backup_restore              (TrackerBackup         *object,
+						    const gchar           *path,
+						    DBusGMethodInvocation *context,
+						    GError **error);
+
+G_END_DECLS
+
+#endif /* __TRACKERD_BACKUP_H__ */

Modified: trunk/src/trackerd/tracker-daemon.c
==============================================================================
--- trunk/src/trackerd/tracker-daemon.c	(original)
+++ trunk/src/trackerd/tracker-daemon.c	Thu Feb 26 16:52:16 2009
@@ -35,7 +35,6 @@
 
 #include "tracker-dbus.h"
 #include "tracker-daemon.h"
-#include "tracker-backup.h"
 #include <libtracker-data/tracker-data-manager.h>
 #include "tracker-indexer-client.h"
 #include "tracker-main.h"
@@ -576,30 +575,6 @@
 }
 
 void
-tracker_daemon_backup (TrackerDaemon *object,
-                       const gchar *path,
-                       DBusGMethodInvocation *context,
-                       GError **error)
-{
-	guint request_id;
-
-	request_id = tracker_dbus_get_next_request_id ();
-
-	tracker_dbus_request_new (request_id,
-				  "DBus request to backup, "
-				  "reindex:%s", path);
-
-
-	tracker_backup_save (path);
-
-	g_message ("Tracker daemon making a backup");
-
-	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
-}
-
-void
 tracker_daemon_shutdown (TrackerDaemon		*object,
 			 gboolean		 reindex,
 			 DBusGMethodInvocation	*context,

Modified: trunk/src/trackerd/tracker-dbus.c
==============================================================================
--- trunk/src/trackerd/tracker-dbus.c	(original)
+++ trunk/src/trackerd/tracker-dbus.c	Thu Feb 26 16:52:16 2009
@@ -41,6 +41,8 @@
 #include "tracker-metadata-glue.h"
 #include "tracker-search.h"
 #include "tracker-search-glue.h"
+#include "tracker-backup.h"
+#include "tracker-backup-glue.h"
 #include "tracker-xesam.h"
 #include "tracker-xesam-glue.h"
 #include "tracker-indexer-client.h"
@@ -374,6 +376,20 @@
 			      TRACKER_SEARCH_PATH);
 	objects = g_slist_prepend (objects, object);
 
+	/* Add org.freedesktop.Tracker.Backup */
+	object = tracker_backup_new ();
+	if (!object) {
+		g_critical ("Could not create TrackerBackup object to register");
+		return FALSE;
+	}
+
+	dbus_register_object (connection,
+			      gproxy,
+			      G_OBJECT (object),
+			      &dbus_glib_tracker_backup_object_info,
+			      TRACKER_BACKUP_PATH);
+	objects = g_slist_prepend (objects, object);
+
 	/* Register the XESAM object if enabled */
 	if (tracker_config_get_enable_xesam (config)) {
 		object = tracker_xesam_new ();

Modified: trunk/src/trackerd/tracker-main.c
==============================================================================
--- trunk/src/trackerd/tracker-main.c	(original)
+++ trunk/src/trackerd/tracker-main.c	Thu Feb 26 16:52:16 2009
@@ -57,6 +57,7 @@
 
 #include <libtracker-data/tracker-data-manager.h>
 #include <libtracker-data/tracker-turtle.h>
+#include <libtracker-data/tracker-data-backup.h>
 
 #include <tracker-push.h>
 
@@ -646,7 +647,7 @@
 
 	/* If we are reindexing, save the user metadata  */
 	if (private->reindex_on_shutdown) {
-		tracker_backup_save (private->ttl_backup_file);
+		tracker_data_backup_save (private->ttl_backup_file, NULL);
 	}
 	/* Reset integrity status as threads have closed cleanly */
 	tracker_data_manager_set_db_option_int ("IntegrityCheck", 0);
@@ -674,7 +675,6 @@
 static const gchar *
 get_ttl_backup_filename (void) 
 {
-
 	TrackerMainPrivate *private;
 
 	private = g_static_private_get (&private_key);
@@ -715,7 +715,7 @@
 	tracker_data_manager_init (config, language, file_index, email_index);
 	
 	/* Actual save of the metadata */
-	tracker_backup_save (get_ttl_backup_filename ());
+	tracker_data_backup_save (get_ttl_backup_filename (), NULL);
 	
 	/* Shutdown the DB stack */
 	tracker_data_manager_shutdown ();
@@ -746,12 +746,12 @@
 		g_signal_handler_disconnect (processor, *callback_id);
 
 		if (g_file_test (get_ttl_backup_filename (), G_FILE_TEST_EXISTS)) {
-			org_freedesktop_Tracker_Indexer_restore_backup (tracker_dbus_indexer_get_proxy (), 
+			org_freedesktop_Tracker_Indexer_restore_backup (tracker_dbus_indexer_get_proxy (),
 									get_ttl_backup_filename (),
 									&error);
-		
+
 			if (error) {
-				g_message ("Could not restore backup, %s", 
+				g_message ("Could not restore backup, %s",
 					   error->message);
 				g_error_free (error);
 				return;



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