tracker r1751 - in branches/indexer-split: . src/libtracker-db src/tracker-indexer



Author: pvanhoof
Date: Tue Jun 24 14:56:21 2008
New Revision: 1751
URL: http://svn.gnome.org/viewvc/tracker?rev=1751&view=rev

Log:
2008-06-24  Philip Van Hoof  <pvanhoof gnome org>

        * src/tracker-indexer/tracker-indexer.c:
        * src/libtracker-db/tracker-db-manager.c:
        * src/libtracker-db/tracker-db-manager.h:

        First piece of the puzzle for transactions in the indexer



Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/libtracker-db/tracker-db-manager.c
   branches/indexer-split/src/libtracker-db/tracker-db-manager.h
   branches/indexer-split/src/tracker-indexer/tracker-indexer.c

Modified: branches/indexer-split/src/libtracker-db/tracker-db-manager.c
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-manager.c	(original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-manager.c	Tue Jun 24 14:56:21 2008
@@ -2438,6 +2438,45 @@
 }
 
 TrackerDBInterface *
+tracker_db_manager_get_db_interfaces (gint num, ...)
+{
+	gint                n_args;
+	va_list             args;
+	TrackerDBInterface *connection = NULL;
+
+	va_start (args, num);
+	for (n_args = 1; n_args <= num; n_args++) {
+		TrackerDB db = va_arg (args, TrackerDB);
+
+		if (!connection) {
+			connection = tracker_db_interface_sqlite_new (dbs[db].abs_filename);
+			tracker_db_interface_set_procedure_table (connection, 
+								  prepared_queries);
+
+			/* You could set specific cache and page sizes for the
+			 * indexer's INSERT connection here. */
+
+			db_set_params (connection,
+				       dbs[db].cache_size,
+				       dbs[db].page_size,
+				       TRUE,
+				       FALSE);
+
+		} else {
+			db_exec_no_reply (connection, 
+					  "ATTACH '%s' as '%s'",
+					  dbs[db].abs_filename,
+					  dbs[db].name);
+		}
+
+	}
+	va_end (args);
+
+	return connection;
+}
+
+
+TrackerDBInterface *
 tracker_db_manager_get_db_interface (TrackerDB db)
 {
 	g_return_val_if_fail (initialized != FALSE, NULL);

Modified: branches/indexer-split/src/libtracker-db/tracker-db-manager.h
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-manager.h	(original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-manager.h	Tue Jun 24 14:56:21 2008
@@ -57,6 +57,8 @@
 TrackerDBInterface *
              tracker_db_manager_get_db_interface            (TrackerDB              db);
 TrackerDBInterface *
+             tracker_db_manager_get_db_interfaces           (gint num, ...);
+TrackerDBInterface *
              tracker_db_manager_get_db_interface_by_service (const gchar           *service, 
 							     gboolean               content);
 TrackerDBInterface *

Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer.c	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer.c	Tue Jun 24 14:56:21 2008
@@ -342,7 +342,7 @@
 
 	priv->cache = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
 	priv->common = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
-	priv->metadata = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+	priv->metadata = tracker_db_manager_get_db_interfaces (3, TRACKER_DB_COMMON, TRACKER_DB_CACHE, TRACKER_DB_FILE_METADATA);
 	priv->contents = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_CONTENTS);
 
 	priv->timer = g_timer_new ();
@@ -487,15 +487,24 @@
 		service = tracker_ontology_get_service_type_by_name (service_type);
 		id = tracker_db_get_new_service_id (priv->common);
 
+		/* Begin of transaction point X */
+
+		/* If you ever need to remove this transaction, because it gets
+		 * wrapped into a larger one, that's fine IF you indeed have a
+		 * larger one in place that spans cache,common and the selected
+		 * metadata database file */
+
+		tracker_db_interface_start_transaction (priv->metadata);
+
 		if (tracker_db_create_service (priv->metadata, id, service, info->path, metadata)) {
 			gchar *text;
 			guint32 eid;
 
-			eid = tracker_db_get_new_event_id (priv->common);
+			eid = tracker_db_get_new_event_id (priv->metadata);
 
-			tracker_db_create_event (priv->cache, eid, id, "Create");
+			tracker_db_create_event (priv->metadata, eid, id, "Create");
 
-			tracker_db_increment_stats (priv->common, service);
+			tracker_db_increment_stats (priv->metadata, service);
 
 			index_metadata (indexer, id, service, metadata);
 
@@ -506,6 +515,10 @@
 				g_free (text);
 			}
 		}
+		
+		tracker_db_interface_end_transaction (priv->metadata); 
+		
+		/* End of transaction point X */
 
 		g_hash_table_destroy (metadata);
 	}



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