tracker r1906 - in branches/indexer-split: . src/libtracker-common src/libtracker-db src/trackerd tests/tracker-indexer tests/trackerd
- From: ifrade svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1906 - in branches/indexer-split: . src/libtracker-common src/libtracker-db src/trackerd tests/tracker-indexer tests/trackerd
- Date: Tue, 22 Jul 2008 15:39:23 +0000 (UTC)
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]