tracker r1906 - in branches/indexer-split: . src/libtracker-common src/libtracker-db src/trackerd tests/tracker-indexer tests/trackerd



Author: ifrade
Date: Tue Jul 22 15:39:23 2008
New Revision: 1906
URL: http://svn.gnome.org/viewvc/tracker?rev=1906&view=rev

Log:
Refactored indexer code

Added:
   branches/indexer-split/src/libtracker-common/tracker-index-item.c
   branches/indexer-split/src/libtracker-common/tracker-index-item.h
   branches/indexer-split/src/trackerd/tracker-index-manager.c
   branches/indexer-split/src/trackerd/tracker-index-manager.h
   branches/indexer-split/tests/trackerd/run-tests.sh
   branches/indexer-split/tests/trackerd/tracker-indexer-test.c
Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/libtracker-common/Makefile.am
   branches/indexer-split/src/libtracker-db/tracker-db-manager.c
   branches/indexer-split/src/libtracker-db/tracker-db-manager.h
   branches/indexer-split/src/trackerd/Makefile.am
   branches/indexer-split/src/trackerd/tracker-indexer.c
   branches/indexer-split/src/trackerd/tracker-indexer.h
   branches/indexer-split/src/trackerd/tracker-main.c
   branches/indexer-split/src/trackerd/tracker-query-tree.c
   branches/indexer-split/tests/tracker-indexer/tracker-index-test.c
   branches/indexer-split/tests/trackerd/Makefile.am

Modified: branches/indexer-split/src/libtracker-common/Makefile.am
==============================================================================
--- branches/indexer-split/src/libtracker-common/Makefile.am	(original)
+++ branches/indexer-split/src/libtracker-common/Makefile.am	Tue Jul 22 15:39:23 2008
@@ -38,6 +38,8 @@
 	tracker-field-data.h			\
 	tracker-file-utils.c			\
 	tracker-file-utils.h			\
+	tracker-index-item.c			\
+	tracker-index-item.h			\
 	tracker-language.c			\
 	tracker-language.h			\
 	tracker-log.c	 			\

Added: branches/indexer-split/src/libtracker-common/tracker-index-item.c
==============================================================================
--- (empty file)
+++ branches/indexer-split/src/libtracker-common/tracker-index-item.c	Tue Jul 22 15:39:23 2008
@@ -0,0 +1,49 @@
+#include "tracker-index-item.h"
+
+guint32 
+tracker_index_item_calc_amalgamated (gint service_type, gint score)
+{
+	unsigned char a[4];
+	gint16        score16;
+	guint8        service_type_8;
+
+	if (score > 30000) {
+		score16 = 30000;
+	} else {
+		score16 = (gint16) score;
+	}
+
+	service_type_8 = (guint8) service_type;
+
+	/* Amalgamate and combine score and service_type into a single
+         * 32-bit int for compact storage.
+         */
+	a[0] = service_type_8;
+	a[1] = (score16 >> 8) & 0xFF;
+	a[2] = score16 & 0xFF;
+	a[3] = 0;
+
+	return (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3];
+}
+
+guint8  
+tracker_index_item_get_service_type (TrackerIndexItem *details)
+{
+        g_return_val_if_fail (details != NULL, 0);
+
+	return (details->amalgamated >> 24) & 0xFF;
+}
+
+
+gint16  
+tracker_index_item_get_score (TrackerIndexItem *details)
+{
+	unsigned char a[2];
+
+        g_return_val_if_fail (details != NULL, 0);
+
+	a[0] = (details->amalgamated >> 16) & 0xFF;
+	a[1] = (details->amalgamated >> 8) & 0xFF;
+
+	return (gint16) (a[0] << 8) | (a[1]);	
+}

Added: branches/indexer-split/src/libtracker-common/tracker-index-item.h
==============================================================================
--- (empty file)
+++ branches/indexer-split/src/libtracker-common/tracker-index-item.h	Tue Jul 22 15:39:23 2008
@@ -0,0 +1,26 @@
+#ifndef __TRACKER_INDEX_ITEM_H__
+#define __TRACKER_INDEX_ITEM_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct  {                         
+	/* Service ID number of the document */
+	guint32 id;              
+
+	/* Amalgamation of service_type and score of the word in the
+	 * document's metadata.
+	 */
+	gint    amalgamated;     
+} TrackerIndexItem;
+
+guint32 tracker_index_item_calc_amalgamated (gint              service_type,
+                                             gint              score);
+guint8  tracker_index_item_get_service_type (TrackerIndexItem *details);
+gint16  tracker_index_item_get_score        (TrackerIndexItem *details);
+
+
+G_END_DECLS
+
+#endif

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 Jul 22 15:39:23 2008
@@ -42,6 +42,8 @@
 
 #define ZLIBBUFSIZ                    8192
 
+#define MAX_DB_FILE_SIZE        2000000000
+
 typedef enum {
         TRACKER_DB_LOCATION_DATA_DIR,
         TRACKER_DB_LOCATION_USER_DATA_DIR,
@@ -2580,3 +2582,28 @@
 
 	return iface;
 }
+
+gboolean     
+tracker_db_manager_are_db_too_big (void)
+{
+	const gchar *filename_const;
+	gboolean     too_big;
+        filename_const = tracker_db_manager_get_file (TRACKER_DB_FILE_METADATA);
+	too_big = tracker_file_get_size (filename_const) > MAX_DB_FILE_SIZE;
+        
+        if (too_big) {
+                g_critical ("File metadata database is too big, discontinuing indexing");
+		return TRUE;	
+	}
+
+        filename_const = tracker_db_manager_get_file (TRACKER_DB_EMAIL_METADATA);
+	too_big = tracker_file_get_size (filename_const) > MAX_DB_FILE_SIZE;
+        
+        if (too_big) {
+		g_critical ("Email metadata database is too big, discontinuing indexing");
+		return TRUE;	
+	}
+
+	return FALSE;
+
+}

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 Jul 22 15:39:23 2008
@@ -65,6 +65,7 @@
              tracker_db_manager_get_db_interfaces           (gint num, ...);
 TrackerDBInterface *
              tracker_db_manager_get_db_interface_by_service (const gchar           *service);
+gboolean     tracker_db_manager_are_db_too_big              (void);
 
 G_END_DECLS
 

Modified: branches/indexer-split/src/trackerd/Makefile.am
==============================================================================
--- branches/indexer-split/src/trackerd/Makefile.am	(original)
+++ branches/indexer-split/src/trackerd/Makefile.am	Tue Jul 22 15:39:23 2008
@@ -38,6 +38,8 @@
 	tracker-keywords.h						\
 	tracker-indexer.c						\
 	tracker-indexer.h						\
+	tracker-index-manager.c						\
+	tracker-index-manager.h						\
 	tracker-processor.c						\
 	tracker-processor.h						\
 	tracker-main.c							\

Added: branches/indexer-split/src/trackerd/tracker-index-manager.c
==============================================================================
--- (empty file)
+++ branches/indexer-split/src/trackerd/tracker-index-manager.c	Tue Jul 22 15:39:23 2008
@@ -0,0 +1,232 @@
+#include "tracker-index-manager.h"
+#include <libtracker-common/tracker-file-utils.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#include <stdio.h>
+
+#define MIN_BUCKET_DEFAULT 10
+#define MAX_BUCKET_DEFAULT 20
+
+#define TRACKER_INDEXER_FILE_INDEX_DB_FILENAME         "file-index.db"
+#define TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME        "email-index.db"
+#define TRACKER_INDEXER_FILE_UPDATE_INDEX_DB_FILENAME  "file-update-index.db"
+
+#define MAX_INDEX_FILE_SIZE 2000000000
+
+gint   index_manager_min_bucket;
+gint   index_manager_max_bucket;
+gchar *index_manager_data_dir = NULL;
+
+
+static const gchar *
+get_index_name (TrackerIndexerType index) {
+        const gchar *name;
+
+        switch (index) {
+        case TRACKER_INDEXER_TYPE_FILES:
+                name = TRACKER_INDEXER_FILE_INDEX_DB_FILENAME;
+                break;
+        case TRACKER_INDEXER_TYPE_EMAILS:
+                name = TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME;
+                break;
+        case TRACKER_INDEXER_TYPE_FILES_UPDATE:
+                name = TRACKER_INDEXER_FILE_UPDATE_INDEX_DB_FILENAME;
+                break;
+        default:
+                g_critical ("Unrecognized index type");
+        }
+
+        return name;
+}
+
+
+static gboolean
+initialize_indexers (void)
+{
+	gchar *final_index_name;
+
+	/* Create index files */
+	final_index_name = g_build_filename (index_manager_data_dir, "file-index-final", NULL);
+	
+	if (g_file_test (final_index_name, G_FILE_TEST_EXISTS) && 
+	    !tracker_index_manager_has_tmp_merge_files (TRACKER_INDEXER_TYPE_FILES)) {
+		gchar *file_index_name;
+
+		file_index_name = g_build_filename (index_manager_data_dir, 
+						    TRACKER_INDEXER_FILE_INDEX_DB_FILENAME, 
+						    NULL);
+	
+		g_message ("Overwriting '%s' with '%s'", 
+			   file_index_name, 
+			   final_index_name);	
+		rename (final_index_name, file_index_name);
+		g_free (file_index_name);
+	}
+	
+	g_free (final_index_name);
+	
+	final_index_name = g_build_filename (index_manager_data_dir, 
+					     "email-index-final", 
+					     NULL);
+	
+	if (g_file_test (final_index_name, G_FILE_TEST_EXISTS) && 
+	    !tracker_index_manager_has_tmp_merge_files (TRACKER_INDEXER_TYPE_EMAILS)) {
+		gchar *file_index_name;
+
+		file_index_name = g_build_filename (index_manager_data_dir, 
+						    TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME, 
+						    NULL);
+	
+		g_message ("Overwriting '%s' with '%s'", 
+			   file_index_name, 
+			   final_index_name);	
+		rename (final_index_name, file_index_name);
+		g_free (file_index_name);
+	}
+	
+	g_free (final_index_name);
+
+	return TRUE;
+}
+
+
+
+gboolean
+tracker_index_manager_init (const gchar *data_dir, gint min_bucket, gint max_bucket)
+{
+        if (index_manager_data_dir) {
+                /* Avoid reinitialization */
+                return TRUE;
+        }
+
+        index_manager_data_dir = g_strdup (data_dir);
+        index_manager_min_bucket = min_bucket;
+        index_manager_max_bucket = max_bucket;
+
+        return initialize_indexers ();
+}
+
+
+
+TrackerIndexer * 
+tracker_index_manager_get_index (TrackerIndexerType index)
+{
+        gchar          *filename;
+        TrackerIndexer *indexer;
+
+        filename = tracker_index_manager_get_filename (index);
+
+        indexer = tracker_indexer_new (filename,
+                                    index_manager_min_bucket, 
+                                    index_manager_max_bucket);
+        g_free (filename);
+        return indexer;
+}
+
+gchar *
+tracker_index_manager_get_filename (TrackerIndexerType index)
+{
+        return g_build_filename (index_manager_data_dir, get_index_name (index), NULL);
+}
+
+gboolean
+tracker_index_manager_are_indexes_too_big (void)
+{
+	gchar       *filename;
+        gboolean     too_big;
+
+	filename = g_build_filename (index_manager_data_dir, TRACKER_INDEXER_FILE_INDEX_DB_FILENAME, NULL);
+	too_big = tracker_file_get_size (filename) > MAX_INDEX_FILE_SIZE;
+        g_free (filename);
+        
+        if (too_big) {
+		g_critical ("File index database is too big, discontinuing indexing");
+		return TRUE;	
+	}
+
+	filename = g_build_filename (index_manager_data_dir, TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME, NULL);
+	too_big = tracker_file_get_size (filename) > MAX_INDEX_FILE_SIZE;
+	g_free (filename);
+        
+        if (too_big) {
+		g_critical ("Email index database is too big, discontinuing indexing");
+		return TRUE;	
+	}
+
+	return FALSE;
+}
+
+gboolean
+tracker_index_manager_has_tmp_merge_files (TrackerIndexerType type)
+{
+	GFile           *file;
+	GFileEnumerator *enumerator;
+	GFileInfo       *info;
+	GError          *error = NULL;
+	const gchar     *prefix;
+	const gchar     *data_dir;
+	gboolean         found;
+
+	file = g_file_new_for_path (index_manager_data_dir);
+
+	enumerator = g_file_enumerate_children (file,
+						G_FILE_ATTRIBUTE_STANDARD_NAME ","
+						G_FILE_ATTRIBUTE_STANDARD_TYPE,
+						G_PRIORITY_DEFAULT,
+						NULL, 
+						&error);
+
+	if (error) {
+		g_warning ("Could not check for temporary indexer files in "
+			   "directory:'%s', %s",
+			   data_dir,
+			   error->message);
+		g_error_free (error);
+		g_object_unref (file);
+		return FALSE;
+	}
+
+	
+	if (type == TRACKER_INDEXER_TYPE_FILES) {
+		prefix = "file-index.tmp.";
+	} else {
+		prefix = "email-index.tmp.";
+	}
+
+	found = FALSE;
+
+	for (info = g_file_enumerator_next_file (enumerator, NULL, &error);
+	     info && !error && !found;
+	     info = g_file_enumerator_next_file (enumerator, NULL, &error)) {
+		/* Check each file has or hasn't got the prefix */
+		if (g_str_has_prefix (g_file_info_get_name (info), prefix)) {
+			found = TRUE;
+		}
+
+		g_object_unref (info);
+	}
+
+	if (error) {
+		g_warning ("Could not get file information for temporary "
+			   "indexer files in directory:'%s', %s",
+			   data_dir,
+			   error->message);
+		g_error_free (error);
+	}
+		
+	g_object_unref (enumerator);
+	g_object_unref (file);
+
+	return found;
+}
+
+
+void
+tracker_index_manager_shutdown ()
+{
+        if (index_manager_data_dir) {
+                g_free (index_manager_data_dir);
+        }
+        index_manager_data_dir = NULL;
+}

Added: branches/indexer-split/src/trackerd/tracker-index-manager.h
==============================================================================
--- (empty file)
+++ branches/indexer-split/src/trackerd/tracker-index-manager.h	Tue Jul 22 15:39:23 2008
@@ -0,0 +1,29 @@
+#ifndef __TRACKERD_INDEX_MANAGER_H__
+#define __TRACKERD_INDEX_MANAGER_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#include "tracker-indexer.h"
+
+typedef enum {
+	TRACKER_INDEXER_TYPE_FILES,
+	TRACKER_INDEXER_TYPE_EMAILS,
+	TRACKER_INDEXER_TYPE_FILES_UPDATE
+} TrackerIndexerType;
+
+
+gboolean        tracker_index_manager_init                  (const gchar        *data_dir,
+                                                             gint                min_bucket,
+                                                             gint                max_bucket);
+gchar *         tracker_index_manager_get_filename          (TrackerIndexerType index);
+TrackerIndexer *tracker_index_manager_get_index             (TrackerIndexerType  index);
+gboolean        tracker_index_manager_are_indexes_too_big   (void);
+gboolean        tracker_index_manager_has_tmp_merge_files   (TrackerIndexerType  type);
+void            tracker_index_manager_shutdown              (void);
+
+
+G_END_DECLS
+
+#endif

Modified: branches/indexer-split/src/trackerd/tracker-indexer.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-indexer.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-indexer.c	Tue Jul 22 15:39:23 2008
@@ -21,47 +21,25 @@
 
 #include "config.h"
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
 #include <string.h>
 
-/* Needed before including math.h for lrintf() */
-#define _ISOC9X_SOURCE   1
-#define _ISOC99_SOURCE   1
-
-#define __USE_ISOC9X     1
-#define __USE_ISOC99     1
-
-#include <math.h>
-
 #include <depot.h>
 
 #include <glib.h>
 #include <glib/gstdio.h>
-#include <gio/gio.h>
 
 #include <libtracker-common/tracker-log.h>
-#include <libtracker-common/tracker-config.h>
 #include <libtracker-common/tracker-file-utils.h>
-#include <libtracker-common/tracker-hal.h>
-#include <libtracker-common/tracker-ontology.h>
+#include <libtracker-common/tracker-index-item.h>
 
 #include <libtracker-db/tracker-db-manager.h>
 
-#include "tracker-query-tree.h"
 #include "tracker-indexer.h"
-#include "tracker-dbus.h"
-#include "tracker-daemon.h"
 #include "tracker-query-tree.h"
-#include "tracker-main.h"
-#include "tracker-status.h"
 
 /* Size of free block pool of inverted index */
 #define MAX_HIT_BUFFER      480000
-#define MAX_INDEX_FILE_SIZE 2000000000
+
 
 #define TRACKER_INDEXER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_INDEXER, TrackerIndexerPrivate))
 
@@ -71,12 +49,12 @@
         /* File hashtable handle for the word -> {serviceID,
          * ServiceTypeID, Score}.
          */
-        TrackerConfig *config;
-
 	DEPOT         *word_index;	
 	GMutex        *word_mutex;
 
 	gchar         *name;
+	guint          min_bucket;
+        guint          max_bucket;
 };
 
 static void tracker_indexer_class_init   (TrackerIndexerClass *class);
@@ -94,7 +72,8 @@
 enum {
 	PROP_0,
 	PROP_NAME,
-        PROP_CONFIG
+        PROP_MIN_BUCKET,
+	PROP_MAX_BUCKET
 };
 
 G_DEFINE_TYPE (TrackerIndexer, tracker_indexer, G_TYPE_OBJECT)
@@ -114,15 +93,26 @@
 							      "Name",
 							      "Name",
 							      NULL,
-							      G_PARAM_READABLE));
+							      G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 	g_object_class_install_property (object_class,
-					 PROP_CONFIG,
-					 g_param_spec_object ("config",
-							      "Config",
-							      "Config",
-							      tracker_config_get_type (),
-							      G_PARAM_READWRITE));
+					 PROP_MIN_BUCKET,
+					 g_param_spec_int ("min-bucket",
+							   "Minimum bucket",
+							   "Minimum bucket",
+							   0,
+							   1000000, /* FIXME MAX_GUINT ?? */
+							   0,
+							   G_PARAM_READWRITE));
 
+	g_object_class_install_property (object_class,
+					 PROP_MAX_BUCKET,
+					 g_param_spec_int ("max-bucket",
+							   "Maximum bucket",
+							   "Maximum bucket",
+							   0,
+							   1000000, /* FIXME MAX_GUINT ?? */
+							   0,
+							   G_PARAM_READWRITE));
 	g_type_class_add_private (object_class, sizeof (TrackerIndexerPrivate));
 }
 
@@ -143,7 +133,9 @@
 
 	priv = TRACKER_INDEXER_GET_PRIVATE (object);
 
-        g_free (priv->name);
+	if (priv->name) {
+		g_free (priv->name);
+	}
 
         g_mutex_lock (priv->word_mutex);
 
@@ -155,10 +147,6 @@
 
 	g_mutex_free (priv->word_mutex);
 
-        if (priv->config) {
-                g_object_unref (priv->config);
-        }
-
 	G_OBJECT_CLASS (tracker_indexer_parent_class)->finalize (object);
 }
 
@@ -169,9 +157,17 @@
                               GParamSpec   *pspec)
 {
 	switch (prop_id) {
-	case PROP_CONFIG:
-		tracker_indexer_set_config (TRACKER_INDEXER (object),
-                                            g_value_get_object (value));
+	case PROP_NAME:
+		tracker_indexer_set_name (TRACKER_INDEXER (object),
+					  g_value_get_string (value));
+	break;
+	case PROP_MIN_BUCKET:
+		tracker_indexer_set_min_bucket (TRACKER_INDEXER (object),
+						g_value_get_int (value));
+		break;
+	case PROP_MAX_BUCKET:
+		tracker_indexer_set_max_bucket (TRACKER_INDEXER (object),
+						g_value_get_int (value));
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -192,68 +188,90 @@
 	case PROP_NAME:
 		g_value_set_string (value, priv->name);
 		break;
-	case PROP_CONFIG:
-		g_value_set_object (value, priv->config);
+	case PROP_MIN_BUCKET:
+		g_value_set_int (value, priv->min_bucket);
+		break;
+	case PROP_MAX_BUCKET:
+		g_value_set_int (value, priv->max_bucket);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 	}
 }
 
-static inline gint16
-get_score (TrackerIndexerWordDetails *details)
+void 
+tracker_indexer_set_name (TrackerIndexer *indexer,
+			  const gchar *name) {
+
+	TrackerIndexerPrivate *priv;
+
+	g_return_if_fail (TRACKER_IS_INDEXER (indexer));
+
+	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
+
+	if (priv->name) {
+		g_free (priv->name);
+	}
+	priv->name = g_strdup (name);
+}
+
+void
+tracker_indexer_set_min_bucket (TrackerIndexer *indexer,
+				gint min_bucket)
 {
-	unsigned char a[2];
+	TrackerIndexerPrivate *priv;
 
-	a[0] = (details->amalgamated >> 16) & 0xFF;
-	a[1] = (details->amalgamated >> 8) & 0xFF;
+	g_return_if_fail (TRACKER_IS_INDEXER (indexer));
+
+	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
+
+	priv->min_bucket = min_bucket;
 
-	return (gint16) (a[0] << 8) | (a[1]);	
 }
 
-static inline guint8
-get_service_type (TrackerIndexerWordDetails *details)
+void
+tracker_indexer_set_max_bucket (TrackerIndexer *indexer,
+				gint max_bucket)
 {
-	return (details->amalgamated >> 24) & 0xFF;
+	TrackerIndexerPrivate *priv;
+
+	g_return_if_fail (TRACKER_IS_INDEXER (indexer));
+
+	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
+
+	priv->max_bucket = max_bucket;
 }
 
+
 static inline DEPOT *
-open_index (const gchar *name,
+open_index (const gchar *filename,
             gint         min_bucket_count,
             gint         max_bucket_count)
 {
 	DEPOT *word_index = NULL;
 
-        if (!name) {
-                return NULL;
-        }
+	g_return_val_if_fail (filename, NULL);
 
-	g_message ("Opening index:'%s'", name);
+	g_message ("Opening index:'%s'", filename);
 
-	if (strstr (name, "tmp")) {
-		word_index = dpopen (name, 
-                                     DP_OWRITER | DP_OCREAT | DP_ONOLCK, 
-                                     min_bucket_count);
-	} else {
-		word_index = dpopen (name, 
-                                     DP_OWRITER | DP_OCREAT | DP_ONOLCK, 
-                                     max_bucket_count);
-	}
+	word_index = dpopen (filename, 
+			     DP_OWRITER | DP_OCREAT | DP_ONOLCK, /* Should be DP_OREADER!!!! */
+			     max_bucket_count);
 
 	if (!word_index) {
 		g_critical ("Index was not closed properly, index:'%s', %s", 
-                            name, 
+                            filename, 
                             dperrmsg (dpecode));
 		g_message ("Attempting to repair...");
 
-		if (dprepair (name)) {
-			word_index = dpopen (name, 
-                                             DP_OWRITER | DP_OCREAT | DP_ONOLCK, 
-                                             min_bucket_count);
+		if (dprepair (filename)) {
+			word_index = dpopen (filename, 
+                                             DP_OWRITER | DP_OCREAT | DP_ONOLCK, /* Should be DP_OREADER!!!! */
+                                             max_bucket_count);
 		} else {
 			g_critical ("Index file is dead, it is suggested you remove "
                                     "the indexe file:'%s' and restart trackerd",
-                                    name);
+                                    filename);
                         return NULL;
 		}
 	}
@@ -261,12 +279,6 @@
 	return word_index;
 }
 
-static inline gchar *
-get_index_file (const gchar *name)
-{
-	return g_build_filename (tracker_get_data_dir (), name, NULL);
-}
-
 static inline gboolean 
 has_word (TrackerIndexer *indexer, 
           const gchar    *word)
@@ -402,54 +414,36 @@
         tsiz = count_hit_size_for_word (indexer, str);
 
         if (tsiz == -1 || 
-            tsiz % sizeof (TrackerIndexerWordDetails) != 0) {
+            tsiz % sizeof (TrackerIndexItem) != 0) {
                 return -1;
         }
 
-        hits = tsiz / sizeof (TrackerIndexerWordDetails);
+        hits = tsiz / sizeof (TrackerIndexItem);
 
         return hits;
 }
 
 TrackerIndexer *
-tracker_indexer_new (TrackerIndexerType  type,
-                     TrackerConfig      *config)
+tracker_indexer_new (const gchar *filename,
+		     gint min_bucket,
+		     gint max_bucket)
 {
         TrackerIndexer        *indexer;
         TrackerIndexerPrivate *priv;
-        const gchar           *name;
-        gchar                 *directory;
 	gint                   bucket_count;
         gint                   rec_count;
 
-	g_return_val_if_fail (TRACKER_IS_CONFIG (config), NULL);
-
 	indexer = g_object_new (TRACKER_TYPE_INDEXER,
-                                "config", config,
+				"name", filename,
+                                "min-bucket", min_bucket,
+				"max-bucket", max_bucket,
                                 NULL);
 
-        switch (type) {
-        case TRACKER_INDEXER_TYPE_FILES:
-                name = TRACKER_INDEXER_FILE_INDEX_DB_FILENAME;
-                break;
-        case TRACKER_INDEXER_TYPE_EMAILS:
-                name = TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME;
-                break;
-        case TRACKER_INDEXER_TYPE_FILES_UPDATE:
-                name = TRACKER_INDEXER_FILE_UPDATE_INDEX_DB_FILENAME;
-                break;
-        }
-
         priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
 
-	priv->name = g_strdup (name);
-
-	directory = get_index_file (name);
-	priv->word_index = open_index (directory,
-                                       tracker_config_get_min_bucket_count (priv->config),
-                                       tracker_config_get_max_bucket_count (priv->config));
-        g_free (directory);
-
+	priv->word_index = open_index (filename,
+                                       min_bucket,
+                                       max_bucket);
 	dpsetalign (priv->word_index, 8);
 
 	/* Re optimize database if bucket count < rec count */
@@ -457,37 +451,13 @@
 	rec_count = dprnum (priv->word_index);
 
 	g_message ("Bucket count (max is %d) is %d and record count is %d", 
-                   tracker_config_get_max_bucket_count (priv->config),
+                   max_bucket,
                    bucket_count, 
                    rec_count);
        
         return indexer;
 }
 
-void
-tracker_indexer_set_config (TrackerIndexer *object,
-			    TrackerConfig  *config)
-{
-	TrackerIndexerPrivate *priv;
-
-	g_return_if_fail (TRACKER_IS_INDEXER (object));
-	g_return_if_fail (TRACKER_IS_CONFIG (config));
-
-	priv = TRACKER_INDEXER_GET_PRIVATE (object);
-
-	if (config) {
-		g_object_ref (config);
-	}
-
-	if (priv->config) {
-		g_object_unref (priv->config);
-	}
-
-	priv->config = config;
-
-	g_object_notify (G_OBJECT (object), "config");
-}
-
 guint32
 tracker_indexer_get_size (TrackerIndexer *indexer)
 {
@@ -505,166 +475,6 @@
 	return size;
 }
 
-gboolean
-tracker_indexer_are_databases_too_big (void)
-{
-	gchar       *filename;
-        const gchar *filename_const;
-        const gchar *data_dir;
-        gboolean     too_big;
-
-        data_dir = tracker_get_data_dir ();
-
-	filename = g_build_filename (data_dir, TRACKER_INDEXER_FILE_INDEX_DB_FILENAME, NULL);
-	too_big = tracker_file_get_size (filename) > MAX_INDEX_FILE_SIZE;
-        g_free (filename);
-        
-        if (too_big) {
-		g_critical ("File index database is too big, discontinuing indexing");
-		return TRUE;	
-	}
-
-	filename = g_build_filename (data_dir, TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME, NULL);
-	too_big = tracker_file_get_size (filename) > MAX_INDEX_FILE_SIZE;
-	g_free (filename);
-        
-        if (too_big) {
-		g_critical ("Email index database is too big, discontinuing indexing");
-		return TRUE;	
-	}
-
-        filename_const = tracker_db_manager_get_file (TRACKER_DB_FILE_METADATA);
-	too_big = tracker_file_get_size (filename_const) > MAX_INDEX_FILE_SIZE;
-        
-        if (too_big) {
-                g_critical ("File metadata database is too big, discontinuing indexing");
-		return TRUE;	
-	}
-
-        filename_const = tracker_db_manager_get_file (TRACKER_DB_EMAIL_METADATA);
-	too_big = tracker_file_get_size (filename_const) > MAX_INDEX_FILE_SIZE;
-        
-        if (too_big) {
-		g_critical ("Email metadata database is too big, discontinuing indexing");
-		return TRUE;	
-	}
-
-	return FALSE;
-}
-
-guint32
-tracker_indexer_calc_amalgamated (gint service, 
-                                  gint score)
-{
-	unsigned char a[4];
-	gint16        score16;
-	guint8        service_type;
-
-	if (score > 30000) {
-		score16 = 30000;
-	} else {
-		score16 = (gint16) score;
-	}
-
-	service_type = (guint8) service;
-
-	/* Amalgamate and combine score and service_type into a single
-         * 32-bit int for compact storage.
-         */
-	a[0] = service_type;
-	a[1] = (score16 >> 8) & 0xFF;
-	a[2] = score16 & 0xFF;
-	a[3] = 0;
-
-	return (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3];
-}
-
-gboolean
-tracker_indexer_has_tmp_merge_files (TrackerIndexerType type)
-{
-	GFile           *file;
-	GFileEnumerator *enumerator;
-	GFileInfo       *info;
-	GError          *error = NULL;
-	const gchar     *prefix;
-	const gchar     *data_dir;
-	gboolean         found;
-
-	data_dir = tracker_get_data_dir ();
-	file = g_file_new_for_path (data_dir);
-
-	enumerator = g_file_enumerate_children (file,
-						G_FILE_ATTRIBUTE_STANDARD_NAME ","
-						G_FILE_ATTRIBUTE_STANDARD_TYPE,
-						G_PRIORITY_DEFAULT,
-						NULL, 
-						&error);
-
-	if (error) {
-		g_warning ("Could not check for temporary indexer files in "
-			   "directory:'%s', %s",
-			   data_dir,
-			   error->message);
-		g_error_free (error);
-		g_object_unref (file);
-		return FALSE;
-	}
-
-	
-	if (type == TRACKER_INDEXER_TYPE_FILES) {
-		prefix = "file-index.tmp.";
-	} else {
-		prefix = "email-index.tmp.";
-	}
-
-	found = FALSE;
-
-	for (info = g_file_enumerator_next_file (enumerator, NULL, &error);
-	     info && !error && !found;
-	     info = g_file_enumerator_next_file (enumerator, NULL, &error)) {
-		/* Check each file has or hasn't got the prefix */
-		if (g_str_has_prefix (g_file_info_get_name (info), prefix)) {
-			found = TRUE;
-		}
-
-		g_object_unref (info);
-	}
-
-	if (error) {
-		g_warning ("Could not get file information for temporary "
-			   "indexer files in directory:'%s', %s",
-			   data_dir,
-			   error->message);
-		g_error_free (error);
-	}
-		
-	g_object_unref (enumerator);
-	g_object_unref (file);
-
-	return found;
-}
-
-guint8
-tracker_indexer_word_details_get_service_type (TrackerIndexerWordDetails *details)
-{
-        g_return_val_if_fail (details != NULL, 0);
-
-	return (details->amalgamated >> 24) & 0xFF;
-}
-
-gint16
-tracker_indexer_word_details_get_score (TrackerIndexerWordDetails *details)
-{
-	unsigned char a[2];
-
-        g_return_val_if_fail (details != NULL, 0);
-
-	a[0] = (details->amalgamated >> 16) & 0xFF;
-	a[1] = (details->amalgamated >> 8) & 0xFF;
-
-	return (gint16) (a[0] << 8) | (a[1]);	
-}
-
 char *
 tracker_indexer_get_suggestion (TrackerIndexer *indexer, 
                                 const gchar    *term, 
@@ -733,15 +543,15 @@
         return winner_str;
 }
 
-TrackerIndexerWordDetails *
+TrackerIndexItem *
 tracker_indexer_get_word_hits (TrackerIndexer *indexer,
 			       const gchar    *word,
 			       guint          *count)
 {
-        TrackerIndexerPrivate     *priv;
-	TrackerIndexerWordDetails *details;
-	gint                       tsiz;
-	gchar                     *tmp;
+        TrackerIndexerPrivate *priv;
+	TrackerIndexItem      *details;
+	gint                   tsiz;
+	gchar                 *tmp;
 
         g_return_val_if_fail (TRACKER_IS_INDEXER (indexer), NULL);
         g_return_val_if_fail (word != NULL, NULL);
@@ -757,11 +567,11 @@
         }
 
 	if ((tmp = dpget (priv->word_index, word, -1, 0, MAX_HIT_BUFFER, &tsiz)) != NULL) {
-		if (tsiz >= (gint) sizeof (TrackerIndexerWordDetails)) {
-			details = (TrackerIndexerWordDetails *) tmp;
+		if (tsiz >= (gint) sizeof (TrackerIndexItem)) {
+			details = (TrackerIndexItem *) tmp;
 
                         if (count) {
-                                *count = tsiz / sizeof (TrackerIndexerWordDetails);
+                                *count = tsiz / sizeof (TrackerIndexItem);
                         }
 		}
 	}
@@ -804,12 +614,12 @@
                 return FALSE;
         }
 
-        if (tsiz >= (int) sizeof (TrackerIndexerWordDetails)) {
-                TrackerIndexerWordDetails *details;
-                gint                       wi, i, pnum;
+        if (tsiz >= (int) sizeof (TrackerIndexItem)) {
+                TrackerIndexItem *details;
+                gint              wi, i, pnum;
                 
-                details = (TrackerIndexerWordDetails *) tmp;
-                pnum = tsiz / sizeof (TrackerIndexerWordDetails);
+                details = (TrackerIndexItem *) tmp;
+                pnum = tsiz / sizeof (TrackerIndexItem);
                 wi = 0;	
                 
                 for (i = 0; i < pnum; i++) {
@@ -828,7 +638,7 @@
                                                 }
                                                 
                                                 /* Make size of array one size smaller */
-                                                tsiz -= sizeof (TrackerIndexerWordDetails); 
+                                                tsiz -= sizeof (TrackerIndexItem); 
                                                 pnum--;
                                                 
                                                 break;

Modified: branches/indexer-split/src/trackerd/tracker-indexer.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-indexer.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-indexer.h	Tue Jul 22 15:39:23 2008
@@ -24,13 +24,11 @@
 
 #include <glib.h>
 
-#include <libtracker-common/tracker-config.h>
+G_BEGIN_DECLS
 
-#define TRACKER_INDEXER_FILE_INDEX_DB_FILENAME         "file-index.db"
-#define TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME        "email-index.db"
-#define TRACKER_INDEXER_FILE_UPDATE_INDEX_DB_FILENAME  "file-update-index.db"
+#include <glib-object.h>
+#include <libtracker-common/tracker-index-item.h>
 
-G_BEGIN_DECLS
 
 #define TRACKER_TYPE_INDEXER         (tracker_indexer_get_type())
 #define TRACKER_INDEXER(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), TRACKER_TYPE_INDEXER, TrackerIndexer))
@@ -51,50 +49,28 @@
 	GObjectClass parent_class;
 };
 
-struct TrackerIndexerWordDetails {                         
-	/* Service ID number of the document */
-	guint32 id;              
-
-	/* Amalgamation of service_type and score of the word in the
-	 * document's metadata.
-	 */
-	gint    amalgamated;     
-};
 
-typedef enum {
-	TRACKER_INDEXER_TYPE_FILES,
-	TRACKER_INDEXER_TYPE_EMAILS,
-	TRACKER_INDEXER_TYPE_FILES_UPDATE
-} TrackerIndexerType;
-
-
-GType           tracker_indexer_get_type                      (void);
-
-TrackerIndexer *tracker_indexer_new                           (TrackerIndexerType         type,
-							       TrackerConfig             *config);
-void            tracker_indexer_set_config                    (TrackerIndexer            *object,
-							       TrackerConfig             *config);
-guint32         tracker_indexer_get_size                      (TrackerIndexer            *indexer);
-
-gboolean        tracker_indexer_are_databases_too_big         (void);
-gboolean        tracker_indexer_has_tmp_merge_files           (TrackerIndexerType         type);
-guint32         tracker_indexer_calc_amalgamated              (gint                       service,
-							       gint                       score);
-
-guint8          tracker_indexer_word_details_get_service_type (TrackerIndexerWordDetails *details);
-gint16          tracker_indexer_word_details_get_score        (TrackerIndexerWordDetails *details);
-
-char *          tracker_indexer_get_suggestion                (TrackerIndexer            *indexer,
-							       const gchar               *term,
-							       gint                       maxdist);
-TrackerIndexerWordDetails *
-                tracker_indexer_get_word_hits                 (TrackerIndexer            *indexer,
-							       const gchar               *word,
-							       guint                     *count);
-
-gboolean        tracker_indexer_remove_dud_hits               (TrackerIndexer            *indexer,
-							       const gchar               *word,
-							       GSList                    *dud_list);
+GType                      tracker_indexer_get_type                      (void);
+TrackerIndexer *           tracker_indexer_new                           (const gchar               *name,
+									  gint                       min_bucket,
+									  gint                       max_bucket);
+void                       tracker_indexer_set_name                      (TrackerIndexer            *indexer,
+									  const gchar               *name);
+void                       tracker_indexer_set_min_bucket                (TrackerIndexer            *indexer,
+									  gint                       min_bucket);
+void                       tracker_indexer_set_max_bucket                (TrackerIndexer            *indexer,
+									  gint                       max_bucket);
+guint32                    tracker_indexer_get_size                      (TrackerIndexer            *indexer);
+char *                     tracker_indexer_get_suggestion                (TrackerIndexer            *indexer,
+									  const gchar               *term,
+									  gint                       maxdist);
+TrackerIndexItem *         tracker_indexer_get_word_hits                 (TrackerIndexer            *indexer,
+									  const gchar               *word,
+									  guint                     *count);
+gboolean                   tracker_indexer_remove_dud_hits               (TrackerIndexer            *indexer,
+									  const gchar               *word,
+									  GSList                    *dud_list);
+
 
 G_END_DECLS
 

Modified: branches/indexer-split/src/trackerd/tracker-main.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-main.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-main.c	Tue Jul 22 15:39:23 2008
@@ -53,6 +53,7 @@
 #include "tracker-dbus.h"
 #include "tracker-indexer.h"
 #include "tracker-indexer-client.h"
+#include "tracker-index-manager.h"
 #include "tracker-main.h"
 #include "tracker-monitor.h"
 #include "tracker-processor.h"
@@ -471,54 +472,6 @@
 	return TRUE;
 }
 
-static gboolean
-initialize_indexers (TrackerConfig *config)
-{
-	gchar *final_index_name;
-
-	/* Create index files */
-	final_index_name = g_build_filename (data_dir, "file-index-final", NULL);
-	
-	if (g_file_test (final_index_name, G_FILE_TEST_EXISTS) && 
-	    !tracker_indexer_has_tmp_merge_files (TRACKER_INDEXER_TYPE_FILES)) {
-		gchar *file_index_name;
-
-		file_index_name = g_build_filename (data_dir, 
-						    TRACKER_INDEXER_FILE_INDEX_DB_FILENAME, 
-						    NULL);
-	
-		g_message ("Overwriting '%s' with '%s'", 
-			   file_index_name, 
-			   final_index_name);	
-		rename (final_index_name, file_index_name);
-		g_free (file_index_name);
-	}
-	
-	g_free (final_index_name);
-	
-	final_index_name = g_build_filename (data_dir, 
-					     "email-index-final", 
-					     NULL);
-	
-	if (g_file_test (final_index_name, G_FILE_TEST_EXISTS) && 
-	    !tracker_indexer_has_tmp_merge_files (TRACKER_INDEXER_TYPE_EMAILS)) {
-		gchar *file_index_name;
-
-		file_index_name = g_build_filename (data_dir, 
-						    TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME, 
-						    NULL);
-	
-		g_message ("Overwriting '%s' with '%s'", 
-			   file_index_name, 
-			   final_index_name);	
-		rename (final_index_name, file_index_name);
-		g_free (file_index_name);
-	}
-	
-	g_free (final_index_name);
-
-	return TRUE;
-}
 
 static void
 shutdown_indexer (void)
@@ -713,6 +666,11 @@
 	}
 
 	tracker_db_manager_init (flags, &is_first_time_index);
+	if (!tracker_index_manager_init (tracker_get_data_dir (), 
+					 tracker_config_get_min_bucket_count (config),
+					 tracker_config_get_max_bucket_count (config))) {
+		return EXIT_FAILURE;
+	}
 
 	/*
 	 * Check instances running
@@ -736,13 +694,9 @@
 		return EXIT_FAILURE;
 	}
 
-	if (!initialize_indexers (config)) {
-		return EXIT_FAILURE;
-	}
-
-	file_index = tracker_indexer_new (TRACKER_INDEXER_TYPE_FILES, config);
-	file_update_index = tracker_indexer_new (TRACKER_INDEXER_TYPE_FILES_UPDATE, config);
-	email_index = tracker_indexer_new (TRACKER_INDEXER_TYPE_EMAILS, config);
+	file_index = tracker_index_manager_get_index (TRACKER_INDEXER_TYPE_FILES);
+	file_update_index = tracker_index_manager_get_index (TRACKER_INDEXER_TYPE_FILES_UPDATE);
+	email_index = tracker_index_manager_get_index (TRACKER_INDEXER_TYPE_EMAILS);
 
 	if (!TRACKER_IS_INDEXER (file_index) || 
 	    !TRACKER_IS_INDEXER (file_update_index) ||
@@ -815,6 +769,7 @@
 	tracker_xesam_manager_shutdown ();
 	tracker_dbus_shutdown ();
 	tracker_db_manager_shutdown ();
+	tracker_index_manager_shutdown ();
 	tracker_db_shutdown ();
         tracker_module_config_shutdown ();
 	tracker_nfs_lock_shutdown ();

Modified: branches/indexer-split/src/trackerd/tracker-query-tree.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-query-tree.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-query-tree.c	Tue Jul 22 15:39:23 2008
@@ -35,6 +35,7 @@
 #include <libtracker-common/tracker-config.h>
 #include <libtracker-common/tracker-parser.h>
 #include <libtracker-common/tracker-ontology.h>
+#include <libtracker-common/tracker-index-item.h>
 
 #include "tracker-query-tree.h"
 #include "tracker-utils.h"
@@ -651,13 +652,13 @@
 }
 
 static gint
-get_idf_score (TrackerIndexerWordDetails *details, 
+get_idf_score (TrackerIndexItem *details, 
                gfloat                     idf)
 {
 	guint32 score;
 	gfloat  f;
 
-        score = tracker_indexer_word_details_get_score (details);
+        score = tracker_index_item_get_score (details);
         f = idf * score * SCORE_MULTIPLIER;
 
         return (f > 1.0) ? lrintf (f) : 1;
@@ -690,7 +691,7 @@
 		      const gchar      *term)
 {
 	TrackerQueryTreePrivate *priv;
-	TrackerIndexerWordDetails *details;
+	TrackerIndexItem *details;
 	GHashTable *result;
 	guint count, i;
 
@@ -707,7 +708,7 @@
 		SearchHitData *data;
 		gint service;
 
-		service = tracker_indexer_word_details_get_service_type (&details[i]);
+		service = tracker_index_item_get_service_type (&details[i]);
 
 		if (in_array (priv->services, service)) {
 			data = g_slice_new (SearchHitData);

Modified: branches/indexer-split/tests/tracker-indexer/tracker-index-test.c
==============================================================================
--- branches/indexer-split/tests/tracker-indexer/tracker-index-test.c	(original)
+++ branches/indexer-split/tests/tracker-indexer/tracker-index-test.c	Tue Jul 22 15:39:23 2008
@@ -3,31 +3,11 @@
 #include <glib/gstdio.h>
 
 #include <tracker-indexer/tracker-index.h>
-
+#include <libtracker-common/tracker-index-item.h>
 #include <qdbm/depot.h>
 
 #define BUCKET_COUNT 100
 
-
-
-/* Private code from the module. Used here to check results */
-typedef struct {
-	guint32 id;
-	guint32 amalgamated; 
-} TrackerIndexElement;
-
-gint16
-helper_get_score (TrackerIndexElement *element) 
-{
-	unsigned char a[2];
-
-	a[0] = (element->amalgamated >> 16) & 0xFF;
-	a[1] = (element->amalgamated >> 8) & 0xFF;
-
-	return (gint16) (a[0] << 8) | (a[1]);	
-}
-
-
 /* Helper functions to read the index */
 gint
 get_number_words_in_index (const gchar *index_file)
@@ -56,7 +36,7 @@
 
         dpclose (index);
 
-        return result / sizeof (TrackerIndexElement);
+        return result / sizeof (TrackerIndexItem);
 }
 
 gint
@@ -64,19 +44,19 @@
 {
         DEPOT *index;
         gint tsiz;
-        TrackerIndexElement *results;
+        TrackerIndexItem *results;
         gint score;
 
         index = dpopen (index_file, DP_OREADER, BUCKET_COUNT);
 
-        results = (TrackerIndexElement *)dpget (index, word, -1, 0, -1, &tsiz);
+        results = (TrackerIndexItem *)dpget (index, word, -1, 0, -1, &tsiz);
 
         dpclose (index);
 
-        g_return_val_if_fail ((tsiz / sizeof (TrackerIndexElement)) == 1, -1);
+        g_return_val_if_fail ((tsiz / sizeof (TrackerIndexItem)) == 1, -1);
         g_return_val_if_fail (results, -1);
 
-        score = helper_get_score (&results[0]);
+        score = tracker_index_item_get_score (&results[0]);
 
         g_free (results);
         return score;
@@ -88,7 +68,7 @@
         DEPOT *index;
         gint rsiz, elements, i;
         gchar *iter; 
-        TrackerIndexElement *results;
+        TrackerIndexItem *results;
 
         g_print ("Contents of %s\n", index_file);
 
@@ -98,13 +78,13 @@
         
         while ((iter = dpiternext (index, NULL)) != NULL) {
                 g_print ("word: %s doc_ids:", iter);
-                results = (TrackerIndexElement *)dpget (index, iter, -1, 0, -1, &rsiz);
+                results = (TrackerIndexItem *)dpget (index, iter, -1, 0, -1, &rsiz);
 
                 if (!results) {
                         g_print ("[No results]\n");
                         continue;
                 } else {
-                        elements = rsiz / sizeof (TrackerIndexElement);
+                        elements = rsiz / sizeof (TrackerIndexItem);
                         for (i = 0; i < elements; i++) {
                                 g_print ("%d ", results[i].id);
                         }

Modified: branches/indexer-split/tests/trackerd/Makefile.am
==============================================================================
--- branches/indexer-split/tests/trackerd/Makefile.am	(original)
+++ branches/indexer-split/tests/trackerd/Makefile.am	Tue Jul 22 15:39:23 2008
@@ -8,14 +8,17 @@
 	-g \
 	-DG_LOG_DOMAIN=\"Tracker\" \
 	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/trackerd \
+	-I$(top_srcdir)/tests/common	\
 	$(GMODULE_CFLAGS) \
 	$(GTHREAD_CFLAGS) \
 	$(GLIB2_CFLAGS) \
+	$(QDBM_CFLAGS) \
 	$(DBUS_CFLAGS)
 
 if HAVE_XESAM_GLIB
 
-TEST_PROGS += tracker-xesam
+TEST_PROGS += tracker-xesam 
 
 INCLUDES += $(XESAM_GLIB_CFLAGS)
 
@@ -39,3 +42,17 @@
 
 endif
 
+TEST_PROGS += tracker-indexer
+
+tracker_indexer_SOURCES = \
+	tracker-indexer-test.c \
+	tracker-indexer.c
+
+tracker_indexer_LDADD = \
+	$(top_builddir)/tests/common/libtracker-testcommon.la 		\
+	$(GMODULE_LIBS) \
+	$(GTHREAD_LIBS) \
+	$(GLIB2_LIBS) \
+	$(DBUS_LIBS) \
+	$(QDBM_LIBS) 
+

Added: branches/indexer-split/tests/trackerd/run-tests.sh
==============================================================================
--- (empty file)
+++ branches/indexer-split/tests/trackerd/run-tests.sh	Tue Jul 22 15:39:23 2008
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+ln -s ../../src/trackerd/tracker-indexer.c
+ln -s ../../src/trackerd/tracker-indexer.h
+
+make test
\ No newline at end of file

Added: branches/indexer-split/tests/trackerd/tracker-indexer-test.c
==============================================================================
--- (empty file)
+++ branches/indexer-split/tests/trackerd/tracker-indexer-test.c	Tue Jul 22 15:39:23 2008
@@ -0,0 +1,49 @@
+#include <glib.h>
+#include <glib/gtestutils.h>
+#include <tracker-test-helpers.h>
+
+#include "tracker-indexer.h"
+
+/* From libtracker-common/tracker-config.c */
+#define DEFAULT_MAX_BUCKET_COUNT		 524288
+#define DEFAULT_MIN_BUCKET_COUNT		 65536
+
+static void
+test_get_suggestion ()
+{
+        TrackerIndexer *indexer;
+        gchar          *suggestion;
+        indexer = tracker_indexer_new ("./example.index", 
+                                       DEFAULT_MIN_BUCKET_COUNT,
+                                       DEFAULT_MAX_BUCKET_COUNT);
+        suggestion = tracker_indexer_get_suggestion (indexer, "Thiz", 9);
+
+        g_assert (tracker_test_helpers_cmpstr_equal (suggestion, "this"));
+
+        g_free (suggestion);
+
+        g_object_unref (indexer);
+}
+
+
+
+int
+main (int argc, char **argv) {
+
+        int result;
+
+	g_type_init ();
+        g_thread_init (NULL);
+	g_test_init (&argc, &argv, NULL);
+
+        /* Init */
+
+        g_test_add_func ("/trackerd/tracker-indexer/get_suggestion",
+                         test_get_suggestion );
+
+        result = g_test_run ();
+        
+        /* End */
+
+        return result;
+}



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