tracker r2024 - in branches/indexer-split: . src/libtracker-db utils/qdbm



Author: mr
Date: Thu Aug  7 10:57:16 2008
New Revision: 2024
URL: http://svn.gnome.org/viewvc/tracker?rev=2024&view=rev

Log:
	* src/libtracker-db/tracker-db-index.c: Make sure we close the
	index after flushing it and then reopen it.

	* utils/qdbm/Makefile.am: Added -g to CFLAGS here so we have debug
	symbols.


Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/libtracker-db/tracker-db-index.c
   branches/indexer-split/utils/qdbm/Makefile.am

Modified: branches/indexer-split/src/libtracker-db/tracker-db-index.c
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-index.c	(original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-index.c	Thu Aug  7 10:57:16 2008
@@ -163,8 +163,6 @@
 
 	priv = TRACKER_DB_INDEX_GET_PRIVATE (object);
 
-        g_mutex_lock (priv->mutex);
-
 	g_free (priv->filename);
 
 	if (g_hash_table_size (priv->cache) > 0) {
@@ -175,7 +173,6 @@
 
 	tracker_db_index_close (TRACKER_DB_INDEX (object));
 
-        g_mutex_unlock (priv->mutex);
 	g_mutex_free (priv->mutex);
 
 	G_OBJECT_CLASS (tracker_db_index_parent_class)->finalize (object);
@@ -262,7 +259,6 @@
 
 	g_return_val_if_fail (filename != NULL, NULL);
 	g_return_val_if_fail (min_bucket > 0, NULL);
-	g_return_val_if_fail (max_bucket > 0, NULL);
 	g_return_val_if_fail (min_bucket < max_bucket, NULL);
 
 	index = g_object_new (TRACKER_TYPE_DB_INDEX,
@@ -534,25 +530,15 @@
 
         priv = TRACKER_DB_INDEX_GET_PRIVATE (index);
 
-	g_mutex_lock (priv->mutex);
-
 	if (priv->reload) {
-		g_debug ("Reloading index:'%s'", priv->filename);
-
-		if (priv->index) {
-			g_debug ("Closing index:'%s'", priv->filename);
-
-			dpclose (priv->index);
-			priv->index = NULL;
-		}
+		g_message ("Reloading index:'%s'", priv->filename);
+		tracker_db_index_close (index);
 	}
 
 	if (!priv->index) {
 		tracker_db_index_open (index);
 	}
 
-	g_mutex_unlock (priv->mutex);
-
 	return !priv->reload;
 }
 
@@ -651,7 +637,9 @@
 		 */
 		if (!edited) {
 			if (!pending_hits) {
-				pending_hits = g_array_new (FALSE, TRUE, sizeof (TrackerDBIndexItem));
+				pending_hits = g_array_new (FALSE, 
+							    TRUE, 
+							    sizeof (TrackerDBIndexItem));
 			}
 
 			g_array_append_val (pending_hits, *new_hit);
@@ -713,6 +701,7 @@
 	gint                   flags;
 	gint                   bucket_count;
         gint                   rec_count;
+	gboolean               retval = FALSE;
 
 	g_return_val_if_fail (TRACKER_IS_DB_INDEX (index), FALSE);
 
@@ -720,7 +709,9 @@
 
 	g_return_val_if_fail (priv->filename != NULL, FALSE);
 
-	g_message ("Opening index:'%s'", priv->filename);
+	g_mutex_lock (priv->mutex);
+
+	g_debug ("Opening index:'%s'", priv->filename);
 
 	if (priv->readonly) {
 		flags = DP_OREADER | DP_ONOLCK;
@@ -763,57 +754,81 @@
 
 		priv->reload = FALSE;
 
-		return TRUE;
+		retval = TRUE;
 	}
 
 	priv->reload = TRUE;
 	
-	return FALSE;
+	g_mutex_unlock (priv->mutex);
+
+	return retval;
 }
 
 gboolean
 tracker_db_index_close (TrackerDBIndex *index)
 {
 	TrackerDBIndexPrivate *priv;
+	gboolean               retval;
 
 	g_return_val_if_fail (TRACKER_IS_DB_INDEX (index), FALSE);
 
 	priv = TRACKER_DB_INDEX_GET_PRIVATE (index);
 
-	if (priv->index && !dpclose (priv->index)) {
-		g_message ("Could not close index, %s", 
-			   dperrmsg (dpecode));
-		return FALSE;
+	g_mutex_lock (priv->mutex);
+
+	retval = TRUE;
+
+	if (priv->index) {
+		g_debug ("Closing index:'%s'", priv->filename);
+
+		if (!dpclose (priv->index)) {
+			g_message ("Could not close index, %s", 
+				   dperrmsg (dpecode));
+			retval = FALSE;
+		}
+
+		priv->index = NULL;
 	}
 
-	return TRUE;
+	g_mutex_unlock (priv->mutex);
+
+	return retval;
 }
 
 guint
 tracker_db_index_flush (TrackerDBIndex *index)
 {
 	TrackerDBIndexPrivate *priv;
-	guint size;
+	guint                  size;
 
 	g_return_val_if_fail (TRACKER_IS_DB_INDEX (index), 0);
 
 	priv = TRACKER_DB_INDEX_GET_PRIVATE (index);
 
-	if (!priv->index) {
+        g_mutex_lock (priv->mutex);
+
+	if (priv->index) {
+		size = g_hash_table_size (priv->cache);
+		g_debug ("Flushing index with %d items in cache", size);
+		
+		g_hash_table_foreach_remove (priv->cache, 
+					     cache_flush_foreach, 
+					     priv->index);
+	} else {
 		g_warning ("Flushing index while closed, "
 			   "this indicates a problem in the software");
-		
-		if (!tracker_db_index_open (index)) {
-			return 0;
-		}
+		size = 0;
 	}
 
-	size = g_hash_table_size (priv->cache);
-	g_debug ("Flushing index with %d items in cache", size);
+	g_mutex_unlock (priv->mutex);
 
-	g_hash_table_foreach_remove (priv->cache, 
-				     cache_flush_foreach, 
-				     priv->index);
+	/* If we had items to flush, close the index to write it to
+	 * disk. 
+	 */
+	if (size > 0) {
+		tracker_db_index_close (index);
+		tracker_db_index_open (index);
+	}
 
 	return size;
 }
@@ -974,6 +989,8 @@
 
 	priv = TRACKER_DB_INDEX_GET_PRIVATE (index);
 
+        g_mutex_lock (priv->mutex);
+
 	elem.id = service_id;
 	elem.amalgamated = tracker_db_index_item_calc_amalgamated (service_type, weight);
 
@@ -986,6 +1003,8 @@
 		array = g_array_new (FALSE, TRUE, sizeof (TrackerDBIndexItem));
 		g_hash_table_insert (priv->cache, g_strdup (word), array);
 		g_array_append_val (array, elem);
+		g_mutex_unlock (priv->mutex);
+
 		return;
 	} 
 
@@ -1013,12 +1032,16 @@
 										new_score);
 			}
 
+			g_mutex_unlock (priv->mutex);
+
 			return;
 		}
 	}
 
 	/* First time in the file */
 	g_array_append_val (array, elem);
+
+        g_mutex_unlock (priv->mutex);
 }
 
 /*
@@ -1033,11 +1056,11 @@
 				  GSList         *dud_list)
 {
         TrackerDBIndexPrivate *priv;
-	gchar               *tmp;
-	gint                 tsiz;
+	gchar                 *tmp;
+	gint                   tsiz;
+	gboolean               retval = FALSE;
 
 	g_return_val_if_fail (index, FALSE);
-	g_return_val_if_fail (priv->index, FALSE);
 	g_return_val_if_fail (word, FALSE);
 	g_return_val_if_fail (dud_list, FALSE);
 
@@ -1047,17 +1070,20 @@
 
 	priv = TRACKER_DB_INDEX_GET_PRIVATE (index);
 
-	/* Check if existing record is there  */
+	g_return_val_if_fail (priv->index, FALSE);
+
 	g_mutex_lock (priv->mutex);
+
+	/* Check if existing record is there  */
 	tmp = dpget (priv->index,
                      word,
                      -1,
                      0,
                      MAX_HIT_BUFFER,
                      &tsiz);
-	g_mutex_unlock (priv->mutex);
 
         if (!tmp) {
+		g_mutex_unlock (priv->mutex);
                 return FALSE;
         }
 
@@ -1082,12 +1108,17 @@
 				if (details[i].id == rank->service_id) {
 					gint k;
 					
-					/* Shift all subsequent records in array down one place */
+					/* Shift all subsequent
+					 * records in array down one
+					 * place.
+					 */
 					for (k = i + 1; k < pnum; k++) {
 						details[k - 1] = details[k];
 					}
 					
-					/* Make size of array one size smaller */
+					/* Make size of array one size
+					 * smaller.
+					 */
 					tsiz -= sizeof (TrackerDBIndexItem);
 					pnum--;
 					
@@ -1096,16 +1127,14 @@
                         }
                 }
 
-                g_mutex_lock (priv->mutex);
                 dpput (priv->index, word, -1, (gchar *) details, tsiz, DP_DOVER);
-                g_mutex_unlock (priv->mutex);
 
-                g_free (tmp);
-
-                return TRUE;
+		retval = TRUE;
         }
 
         g_free (tmp);
 
-	return FALSE;
+	g_mutex_unlock (priv->mutex);
+
+	return retval;
 }

Modified: branches/indexer-split/utils/qdbm/Makefile.am
==============================================================================
--- branches/indexer-split/utils/qdbm/Makefile.am	(original)
+++ branches/indexer-split/utils/qdbm/Makefile.am	Thu Aug  7 10:57:16 2008
@@ -1,6 +1,7 @@
 noinst_PROGRAMS = print search
 
 INCLUDES = 								\
+	-g						 		\
 	-DG_LOG_DOMAIN=\"Tracker\"					\
 	-I$(top_srcdir)/src						\
 	$(QDBM_CFLAGS) 							\



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