[tracker/urn-cache: 3/5] TrackerMinerFS: Add GFile->urn cache.
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/urn-cache: 3/5] TrackerMinerFS: Add GFile->urn cache.
- Date: Tue, 16 Feb 2010 16:18:50 +0000 (UTC)
commit 8916e65f7584acb2b32aa21f686387913d78b384
Author: Carlos Garnacho <carlos lanedo com>
Date: Tue Feb 16 15:08:37 2010 +0100
TrackerMinerFS: Add GFile->urn cache.
Although anonymous, URNs are supposed to be static during
a file lifetime. tracker_miner_fs_get_urn() has been added
to let implementations query and cache the URN for a GFile.
This cache is cleared on TrackerMinerFS::finished, so memory
usage doesn't grow indefinitely.
src/libtracker-miner/tracker-miner-fs.c | 41 ++++++++++++++++++++++++++++++-
src/libtracker-miner/tracker-miner-fs.h | 3 ++
2 files changed, 43 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 2b8dc6d..633e796 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -100,6 +100,9 @@ struct TrackerMinerFSPrivate {
GList *processing_pool;
guint pool_limit;
+ /* GFile -> URN cache */
+ GHashTable *file_urn_cache;
+
/* Status */
guint been_started : 1;
guint been_crawled : 1;
@@ -487,6 +490,12 @@ tracker_miner_fs_init (TrackerMinerFS *object)
G_CALLBACK (monitor_item_moved_cb),
object);
+ /* Set up GFile->urn cache */
+ priv->file_urn_cache = g_hash_table_new_full (g_file_hash,
+ (GEqualFunc) g_file_equal,
+ (GDestroyNotify) g_object_unref,
+ (GDestroyNotify) g_free);
+
priv->quark_ignore_file = g_quark_from_static_string ("tracker-ignore-file");
}
@@ -593,6 +602,8 @@ fs_finalize (GObject *object)
g_hash_table_unref (priv->items_ignore_next_update);
+ g_hash_table_unref (priv->file_urn_cache);
+
G_OBJECT_CLASS (tracker_miner_fs_parent_class)->finalize (object);
}
@@ -842,6 +853,8 @@ process_stop (TrackerMinerFS *fs)
fs->private->total_files_ignored = 0;
fs->private->been_crawled = TRUE;
+
+ g_hash_table_remove_all (fs->private->file_urn_cache);
}
static ItemMovedData *
@@ -955,7 +968,7 @@ item_add_or_update_cb (TrackerMinerFS *fs,
g_debug ("Adding item '%s'", uri);
- full_sparql = g_strdup_printf ("DROP GRAPH <%s> %s",
+ full_sparql = g_strdup_printf ("DROP GRAPH <%s>\n%s",
uri, tracker_sparql_builder_get_result (data->builder));
tracker_miner_execute_batch_update (TRACKER_MINER (fs),
@@ -2512,3 +2525,29 @@ tracker_miner_fs_get_throttle (TrackerMinerFS *fs)
return fs->private->throttle;
}
+
+G_CONST_RETURN gchar *
+tracker_miner_fs_get_urn (TrackerMinerFS *fs,
+ GFile *file)
+{
+ gchar *urn;
+
+ g_return_val_if_fail (TRACKER_IS_MINER_FS (fs), NULL);
+ g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+ urn = g_hash_table_lookup (fs->private->file_urn_cache, file);
+
+ if (urn)
+ return urn;
+
+ if (!item_query_exists (fs, file, &urn, NULL))
+ return NULL;
+
+ if (urn) {
+ g_hash_table_insert (fs->private->file_urn_cache,
+ g_object_ref (file),
+ urn);
+ }
+
+ return urn;
+}
diff --git a/src/libtracker-miner/tracker-miner-fs.h b/src/libtracker-miner/tracker-miner-fs.h
index fd2682d..19392b1 100644
--- a/src/libtracker-miner/tracker-miner-fs.h
+++ b/src/libtracker-miner/tracker-miner-fs.h
@@ -104,6 +104,9 @@ void tracker_miner_fs_set_throttle (TrackerMinerFS *fs,
gdouble throttle);
gdouble tracker_miner_fs_get_throttle (TrackerMinerFS *fs);
+G_CONST_RETURN gchar * tracker_miner_fs_get_urn (TrackerMinerFS *fs,
+ GFile *file);
+
G_END_DECLS
#endif /* __LIBTRACKERMINER_MINER_FS_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]