tracker r1745 - in branches/indexer-split: . src/tracker-indexer
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1745 - in branches/indexer-split: . src/tracker-indexer
- Date: Tue, 24 Jun 2008 10:12:00 +0000 (UTC)
Author: mr
Date: Tue Jun 24 10:12:00 2008
New Revision: 1745
URL: http://svn.gnome.org/viewvc/tracker?rev=1745&view=rev
Log:
* src/tracker-indexer/tracker-index.[ch]:
* src/tracker-indexer/tracker-indexer.c: Added a timer and a count
so we know when we are finished how long it took and how many
items were indexed. Also, don't flush after every item, flush
every 10 seconds or so.
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/tracker-indexer/tracker-index.c
branches/indexer-split/src/tracker-indexer/tracker-index.h
branches/indexer-split/src/tracker-indexer/tracker-indexer.c
Modified: branches/indexer-split/src/tracker-indexer/tracker-index.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-index.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-index.c Tue Jun 24 10:12:00 2008
@@ -155,10 +155,15 @@
return TRUE;
}
-void
+guint
tracker_index_flush (TrackerIndex *index)
{
- g_message ("Flushing index");
+ guint size;
+
+ size = g_hash_table_size (index->cache);
+ g_message ("Flushing index with %d items", size);
g_hash_table_foreach_remove (index->cache, cache_flush_foreach, index->index);
+
+ return size;
}
Modified: branches/indexer-split/src/tracker-indexer/tracker-index.h
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-index.h (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-index.h Tue Jun 24 10:12:00 2008
@@ -38,7 +38,7 @@
gint service_type,
gint weight);
-void tracker_index_flush (TrackerIndex *index);
+guint tracker_index_flush (TrackerIndex *index);
G_END_DECLS
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer.c Tue Jun 24 10:12:00 2008
@@ -64,6 +64,9 @@
#define TRACKER_INDEXER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_INDEXER, TrackerIndexerPrivate))
+/* Flush every 'x' seconds */
+#define FLUSH_FREQUENCY 10
+
typedef struct TrackerIndexerPrivate TrackerIndexerPrivate;
typedef struct PathInfo PathInfo;
typedef struct MetadataForeachData MetadataForeachData;
@@ -87,7 +90,11 @@
TrackerConfig *config;
TrackerLanguage *language;
+ GTimer *timer;
+ guint items_indexed;
+
guint idle_id;
+ guint flush_id;
};
struct PathInfo {
@@ -140,6 +147,40 @@
g_slice_free (PathInfo, info);
}
+static gboolean
+schedule_flush_cb (gpointer data)
+{
+ TrackerIndexer *indexer;
+ TrackerIndexerPrivate *priv;
+
+ indexer = TRACKER_INDEXER (data);
+ priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
+
+ priv->flush_id = 0;
+
+ priv->items_indexed += tracker_index_flush (priv->index);
+
+ return FALSE;
+}
+
+static void
+schedule_flush (TrackerIndexer *indexer,
+ gboolean immediately)
+{
+ TrackerIndexerPrivate *priv;
+
+ priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
+
+ if (immediately) {
+ priv->items_indexed += tracker_index_flush (priv->index);
+ return;
+ }
+
+ priv->flush_id = g_timeout_add_seconds (FLUSH_FREQUENCY,
+ schedule_flush_cb,
+ indexer);
+}
+
static void
tracker_indexer_finalize (GObject *object)
{
@@ -147,6 +188,18 @@
priv = TRACKER_INDEXER_GET_PRIVATE (object);
+ /* Important! Make sure we flush if we are scheduled to do so,
+ * and do that first.
+ */
+ if (priv->flush_id) {
+ g_source_remove (priv->flush_id);
+ schedule_flush (TRACKER_INDEXER (object), TRUE);
+ }
+
+ if (priv->timer) {
+ g_timer_destroy (priv->timer);
+ }
+
g_free (priv->db_dir);
g_queue_foreach (priv->dir_queue, (GFunc) path_info_free, NULL);
@@ -292,6 +345,8 @@
priv->metadata = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
priv->contents = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_CONTENTS);
+ priv->timer = g_timer_new ();
+
tracker_indexer_set_running (indexer, TRUE, NULL);
g_free (index_file);
@@ -405,8 +460,9 @@
g_hash_table_foreach (metadata, index_metadata_foreach, &data);
- /* FIXME: flushing after adding each metadata set, not ideal */
- tracker_index_flush (priv->index);
+ if (!priv->flush_id) {
+ schedule_flush (indexer, FALSE);
+ }
}
static void
@@ -552,7 +608,16 @@
}
if (!priv->current_module) {
+ /* Flush remaining items */
+ schedule_flush (indexer, TRUE);
+
/* No more modules to query, we're done */
+ g_timer_stop (priv->timer);
+
+ g_message ("Indexer finished in %4.4f seconds, %d items indexed in total",
+ g_timer_elapsed (priv->timer, NULL),
+ priv->items_indexed);
+
g_signal_emit (indexer, signals[FINISHED], 0);
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]