tracker r1942 - in branches/indexer-split: . src/trackerd
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1942 - in branches/indexer-split: . src/trackerd
- Date: Fri, 25 Jul 2008 21:08:45 +0000 (UTC)
Author: mr
Date: Fri Jul 25 21:08:45 2008
New Revision: 1942
URL: http://svn.gnome.org/viewvc/tracker?rev=1942&view=rev
Log:
* src/trackerd/tracker-db.c: Finding a dud hit is no longer a
warning, just a regular message.
* src/trackerd/tracker-index-manager.c: Reworked the way we get
indexes so we remember them to avoid creating too many
TrackerIndex objects. Also fixed a nasty bug here which was
getting one for EVERY time the status callback was triggered by
the indexer :O
* src/trackerd/tracker-index.c: Cleaned up the code a bit and put
some more locking in place. This is redundant for now since we
don't have a multithreaded approach at the moment.
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/trackerd/tracker-db.c
branches/indexer-split/src/trackerd/tracker-index-manager.c
branches/indexer-split/src/trackerd/tracker-index.c
Modified: branches/indexer-split/src/trackerd/tracker-db.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db.c (original)
+++ branches/indexer-split/src/trackerd/tracker-db.c Fri Jul 25 21:08:45 2008
@@ -884,7 +884,7 @@
g_free (path);
g_object_unref (result_set);
} else {
- g_warning ("Dud hit for search detected");
+ g_message ("Dud hit for search detected");
duds = g_slist_prepend (duds, &hit);
}
}
Modified: branches/indexer-split/src/trackerd/tracker-index-manager.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-index-manager.c (original)
+++ branches/indexer-split/src/trackerd/tracker-index-manager.c Fri Jul 25 21:08:45 2008
@@ -1,6 +1,5 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
- * Copyright (C) 2006, Mr Jamie McCracken (jamiemcc gnome org)
* Copyright (C) 2008, Nokia
*
* This library is free software; you can redistribute it and/or
@@ -38,10 +37,11 @@
#define MAX_INDEX_FILE_SIZE 2000000000
-static gboolean initialized;
-static gint index_manager_min_bucket;
-static gint index_manager_max_bucket;
-static gchar *index_manager_data_dir;
+static gboolean initialized;
+static TrackerIndex *indexes[] = { NULL, NULL, NULL };
+static gint index_manager_min_bucket;
+static gint index_manager_max_bucket;
+static gchar *index_manager_data_dir;
static const gchar *
get_index_name (TrackerIndexType index)
@@ -64,7 +64,7 @@
}
static gboolean
-initialize_indexs (void)
+initialize_indexes (void)
{
gchar *final_index_name;
@@ -130,12 +130,14 @@
initialized = TRUE;
- return initialize_indexs ();
+ return initialize_indexes ();
}
void
tracker_index_manager_shutdown (void)
{
+ guint i;
+
if (!initialized) {
return;
}
@@ -143,23 +145,30 @@
g_free (index_manager_data_dir);
index_manager_data_dir = NULL;
+ for (i = 0; i < G_N_ELEMENTS (indexes); i++) {
+ g_object_unref (indexes[i]);
+ indexes[i] = NULL;
+ }
+
initialized = FALSE;
}
TrackerIndex *
tracker_index_manager_get_index (TrackerIndexType type)
{
- TrackerIndex *index;
- gchar *filename;
+ gchar *filename;
- filename = tracker_index_manager_get_filename (type);
+ if (indexes[type]) {
+ return indexes[type];
+ }
- index = tracker_index_new (filename,
- index_manager_min_bucket,
- index_manager_max_bucket);
+ filename = tracker_index_manager_get_filename (type);
+ indexes[type] = tracker_index_new (filename,
+ index_manager_min_bucket,
+ index_manager_max_bucket);
g_free (filename);
- return index;
+ return indexes[type];
}
gchar *
Modified: branches/indexer-split/src/trackerd/tracker-index.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-index.c (original)
+++ branches/indexer-split/src/trackerd/tracker-index.c Fri Jul 25 21:08:45 2008
@@ -46,17 +46,14 @@
typedef struct TrackerIndexPrivate TrackerIndexPrivate;
struct TrackerIndexPrivate {
- /* File hashtable handle for the word -> {serviceID,
- * ServiceTypeID, Score}.
- */
- DEPOT *word_index;
- GMutex *word_mutex;
+ DEPOT *word_index;
+ GMutex *word_mutex;
- gchar *name;
- guint min_bucket;
- guint max_bucket;
+ gchar *name;
+ guint min_bucket;
+ guint max_bucket;
- gboolean reload;
+ gboolean reload;
};
static void tracker_index_class_init (TrackerIndexClass *class);
@@ -147,18 +144,16 @@
priv = TRACKER_INDEX_GET_PRIVATE (object);
- if (priv->name) {
- g_free (priv->name);
- }
-
g_mutex_lock (priv->word_mutex);
+ g_free (priv->name);
+
if (priv->word_index && !dpclose (priv->word_index)) {
- g_message ("Index closure has failed, %s", dperrmsg (dpecode));
+ g_message ("Could not close index, %s",
+ dperrmsg (dpecode));
}
g_mutex_unlock (priv->word_mutex);
-
g_mutex_free (priv->word_mutex);
G_OBJECT_CLASS (tracker_index_parent_class)->finalize (object);
@@ -224,8 +219,8 @@
void
tracker_index_set_name (TrackerIndex *index,
- const gchar *name) {
-
+ const gchar *name)
+{
TrackerIndexPrivate *priv;
g_return_if_fail (TRACKER_IS_INDEX (index));
@@ -235,12 +230,15 @@
if (priv->name) {
g_free (priv->name);
}
+
priv->name = g_strdup (name);
+
+ g_object_notify (G_OBJECT (index), "name");
}
void
tracker_index_set_min_bucket (TrackerIndex *index,
- gint min_bucket)
+ gint min_bucket)
{
TrackerIndexPrivate *priv;
@@ -250,11 +248,12 @@
priv->min_bucket = min_bucket;
+ g_object_notify (G_OBJECT (index), "min-bucket");
}
void
tracker_index_set_max_bucket (TrackerIndex *index,
- gint max_bucket)
+ gint max_bucket)
{
TrackerIndexPrivate *priv;
@@ -263,12 +262,13 @@
priv = TRACKER_INDEX_GET_PRIVATE (index);
priv->max_bucket = max_bucket;
-}
+ g_object_notify (G_OBJECT (index), "max-bucket");
+}
void
tracker_index_set_reload (TrackerIndex *index,
- gboolean reload)
+ gboolean reload)
{
TrackerIndexPrivate *priv;
@@ -277,6 +277,8 @@
priv = TRACKER_INDEX_GET_PRIVATE (index);
priv->reload = reload;
+
+ g_object_notify (G_OBJECT (index), "reload");
}
gboolean
@@ -292,67 +294,12 @@
}
static inline gboolean
-tracker_index_open_index (TrackerIndex *index)
-{
- TrackerIndexPrivate *priv = NULL;
- gint bucket_count;
- gint rec_count;
-
- g_return_val_if_fail (TRACKER_IS_INDEX (index), FALSE);
-
- priv = TRACKER_INDEX_GET_PRIVATE (index);
-
- g_return_val_if_fail (priv->name, FALSE);
-
- g_message ("Opening index:'%s'", priv->name);
-
- priv->word_index = dpopen (priv->name,
- DP_OREADER | DP_ONOLCK,
- priv->max_bucket);
-
- if (!priv->word_index) {
- g_debug ("Index doesnt exists or was not closed properly, index:'%s', %s",
- priv->name,
- dperrmsg (dpecode));
-
- if (g_file_test (priv->name, G_FILE_TEST_EXISTS)) {
-
- if (dprepair (priv->name)) {
- priv->word_index = dpopen (priv->name,
- DP_OREADER | DP_ONOLCK,
- priv->max_bucket);
- } else {
- g_critical ("Corrupted index file %s. Remove and restart trackerd.",
- priv->name);
- }
- }
- }
-
-
- if (priv->word_index) {
- dpsetalign (priv->word_index, 8);
-
- /* Re optimize database if bucket count < rec count */
- bucket_count = dpbnum (priv->word_index);
- rec_count = dprnum (priv->word_index);
-
- g_message ("Bucket count (max is %d) is %d and record count is %d",
- priv->max_bucket,
- bucket_count,
- rec_count);
- }
-
- return (priv->word_index != NULL);
-
-}
-
-static inline gboolean
has_word (TrackerIndex *index,
- const gchar *word)
+ const gchar *word)
{
TrackerIndexPrivate *priv;
- gchar buffer[32];
- gint count;
+ gchar buffer[32];
+ gint count;
priv = TRACKER_INDEX_GET_PRIVATE (index);
@@ -368,7 +315,7 @@
const gchar *word)
{
TrackerIndexPrivate *priv;
- gint tsiz;
+ gint tsiz;
priv = TRACKER_INDEX_GET_PRIVATE (index);
@@ -490,61 +437,126 @@
return hits;
}
-TrackerIndex *
-tracker_index_new (const gchar *filename,
- gint min_bucket,
- gint max_bucket)
+static inline void
+open_index (TrackerIndex *index)
{
- TrackerIndex *index;
- TrackerIndexPrivate *priv;
+ TrackerIndexPrivate *priv;
+ gint bucket_count;
+ gint rec_count;
- index = g_object_new (TRACKER_TYPE_INDEX,
- "name", filename,
- "min-bucket", min_bucket,
- "max-bucket", max_bucket,
- NULL);
+ g_return_if_fail (TRACKER_IS_INDEX (index));
priv = TRACKER_INDEX_GET_PRIVATE (index);
- priv->reload = !tracker_index_open_index (index);
+ g_return_if_fail (priv->name);
- return index;
+ g_message ("Opening index:'%s'", priv->name);
+
+ priv->word_index = dpopen (priv->name,
+ DP_OREADER | DP_ONOLCK,
+ priv->max_bucket);
+
+ if (!priv->word_index) {
+ g_debug ("Index doesnt exists or was not closed properly, index:'%s', %s",
+ priv->name,
+ dperrmsg (dpecode));
+
+ if (g_file_test (priv->name, G_FILE_TEST_EXISTS)) {
+ if (dprepair (priv->name)) {
+ priv->word_index = dpopen (priv->name,
+ DP_OREADER | DP_ONOLCK,
+ priv->max_bucket);
+ } else {
+ g_critical ("Corrupted index file %s.",
+ priv->name);
+ }
+ }
+ }
+
+ if (priv->word_index) {
+ dpsetalign (priv->word_index, 8);
+
+ /* Reoptimize database if bucket count < rec count */
+ bucket_count = dpbnum (priv->word_index);
+ rec_count = dprnum (priv->word_index);
+
+ g_debug ("Bucket count (max is %d) is %d and record count is %d",
+ priv->max_bucket,
+ bucket_count,
+ rec_count);
+
+ priv->reload = FALSE;
+
+ return;
+ }
+
+ priv->reload = TRUE;
}
static gboolean
-index_is_up_to_date (TrackerIndex *index)
+check_index_is_up_to_date (TrackerIndex *index)
{
TrackerIndexPrivate *priv;
- g_return_val_if_fail (TRACKER_IS_INDEX (index), 0);
+ g_return_val_if_fail (TRACKER_IS_INDEX (index), FALSE);
priv = TRACKER_INDEX_GET_PRIVATE (index);
- if (priv->reload || !priv->word_index) {
+ g_mutex_lock (priv->word_mutex);
+
+ if (priv->reload) {
+ g_debug ("Reloading index:'%s'", priv->name);
+
if (priv->word_index) {
+ g_debug ("Closing index:'%s'", priv->name);
+
dpclose (priv->word_index);
priv->word_index = NULL;
}
- priv->reload = !tracker_index_open_index (index);
- g_message ("Reloading the index %s", priv->name);
}
- return !priv->reload;
+ if (!priv->word_index) {
+ open_index (index);
+ }
+
+ g_mutex_unlock (priv->word_mutex);
+ return !priv->reload;
}
+TrackerIndex *
+tracker_index_new (const gchar *name,
+ gint min_bucket,
+ gint max_bucket)
+{
+ TrackerIndex *index;
+
+ g_return_val_if_fail (name != NULL, NULL);
+ g_return_val_if_fail (min_bucket > 1, NULL);
+ g_return_val_if_fail (min_bucket > 1, NULL);
+ g_return_val_if_fail (min_bucket < max_bucket, NULL);
+
+ index = g_object_new (TRACKER_TYPE_INDEX,
+ "name", name,
+ "min-bucket", min_bucket,
+ "max-bucket", max_bucket,
+ NULL);
+
+ return index;
+}
guint32
tracker_index_get_size (TrackerIndex *index)
{
TrackerIndexPrivate *priv;
- guint32 size;
+ guint32 size;
g_return_val_if_fail (TRACKER_IS_INDEX (index), 0);
- if (!index_is_up_to_date (index)) {
+ if (!check_index_is_up_to_date (index)) {
return 0;
}
+
priv = TRACKER_INDEX_GET_PRIVATE (index);
g_mutex_lock (priv->word_mutex);
@@ -554,23 +566,24 @@
return size;
}
-char *
+gchar *
tracker_index_get_suggestion (TrackerIndex *index,
- const gchar *term,
- gint maxdist)
+ const gchar *term,
+ gint maxdist)
{
TrackerIndexPrivate *priv;
- gchar *str;
- gint dist;
- gchar *winner_str;
- gint winner_dist;
- gint hits;
- GTimeVal start, current;
+ gchar *str;
+ gint dist;
+ gchar *winner_str;
+ gint winner_dist;
+ gint hits;
+ GTimeVal start, current;
g_return_val_if_fail (TRACKER_IS_INDEX (index), NULL);
g_return_val_if_fail (term != NULL, NULL);
+ g_return_val_if_fail (maxdist >= 0, NULL);
- if (!index_is_up_to_date (index)) {
+ if (!check_index_is_up_to_date (index)) {
return NULL;
}
@@ -613,8 +626,10 @@
g_get_current_time (¤t);
- if (current.tv_sec - start.tv_sec >= 2) { /* 2 second time out */
- g_message ("Timeout in tracker_dbus_method_search_suggest");
+ /* 2 second time out */
+ if (current.tv_sec - start.tv_sec >= 2) {
+ g_message ("Timed out in %s, not collecting more suggestions.",
+ __FUNCTION__);
break;
}
@@ -632,16 +647,16 @@
guint *count)
{
TrackerIndexPrivate *priv;
- TrackerIndexItem *details;
- gint tsiz;
- gchar *tmp;
+ TrackerIndexItem *details;
+ gint tsiz;
+ gchar *tmp;
g_return_val_if_fail (TRACKER_IS_INDEX (index), NULL);
g_return_val_if_fail (word != NULL, NULL);
priv = TRACKER_INDEX_GET_PRIVATE (index);
- if (!index_is_up_to_date (index)) {
+ if (!check_index_is_up_to_date (index)) {
return NULL;
}
@@ -676,19 +691,19 @@
*/
gboolean
tracker_index_remove_dud_hits (TrackerIndex *index,
- const gchar *word,
- GSList *dud_list)
+ const gchar *word,
+ GSList *dud_list)
{
TrackerIndexPrivate *priv;
- gchar *tmp;
- gint tsiz;
+ gchar *tmp;
+ gint tsiz;
g_return_val_if_fail (index, FALSE);
g_return_val_if_fail (priv->word_index, FALSE);
g_return_val_if_fail (word, FALSE);
g_return_val_if_fail (dud_list, FALSE);
- if (!index_is_up_to_date (index)) {
+ if (!check_index_is_up_to_date (index)) {
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]