[tracker/binary-log-2: 27/50] libtracker-data: Do not append to journal while replaying
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/binary-log-2: 27/50] libtracker-data: Do not append to journal while replaying
- Date: Mon, 11 Jan 2010 11:04:27 +0000 (UTC)
commit 54747ccea43c41093358a35f3cab1a45aff266bf
Author: Jürg Billeter <j bitron ch>
Date: Wed Jan 6 14:31:11 2010 +0100
libtracker-data: Do not append to journal while replaying
src/libtracker-data/tracker-data-manager.c | 17 ++++++--
src/libtracker-data/tracker-data-update.c | 56 +++++++++++++++++++---------
src/libtracker-data/tracker-data-update.h | 1 +
3 files changed, 51 insertions(+), 23 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 7aaad34..bdc0353 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -63,6 +63,7 @@
static gchar *ontologies_dir;
static gboolean initialized;
+static gboolean in_journal_replay;
static void
load_ontology_statement (const gchar *ontology_file,
@@ -385,11 +386,10 @@ query_resource_by_id (guint32 id)
static void
replay_journal (void)
{
- GError *error = NULL;
-
tracker_db_journal_reader_init (NULL);
while (tracker_db_journal_reader_next (NULL)) {
+ GError *error = NULL;
TrackerDBJournalEntryType type;
const gchar *subject, *predicate, *object;
guint32 subject_id, predicate_id, object_id;
@@ -416,7 +416,7 @@ replay_journal (void)
tracker_db_statement_bind_int64 (stmt, 2, (gint64) time (NULL));
tracker_db_statement_execute (stmt, &error);
} else if (type == TRACKER_DB_JOURNAL_START_TRANSACTION) {
- tracker_data_begin_transaction ();
+ tracker_data_begin_replay_transaction ();
} else if (type == TRACKER_DB_JOURNAL_END_TRANSACTION) {
tracker_data_commit_transaction ();
} else if (type == TRACKER_DB_JOURNAL_INSERT_STATEMENT) {
@@ -717,7 +717,10 @@ insert_uri_in_resource_table (TrackerDBInterface *iface,
g_clear_error (&error);
}
- tracker_db_journal_append_resource (id, uri);
+ if (!in_journal_replay) {
+ tracker_db_journal_append_resource (id, uri);
+ }
+
tracker_ontology_add_id_uri_pair (id, uri);
if (class)
@@ -985,12 +988,14 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
gint max_id = 0;
guint i, n_props, n_classes;
+ in_journal_replay = TRUE;
+
/* load ontology from journal into memory */
/*id_uri_map =*/ load_ontology_from_journal ();
classes = tracker_ontology_get_classes (&n_classes);
- tracker_data_begin_transaction ();
+ tracker_data_begin_replay_transaction ();
/* create tables */
for (i = 0; i < n_classes; i++) {
@@ -1013,6 +1018,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
replay_journal ();
+ in_journal_replay = FALSE;
+
/* open journal for writing */
tracker_db_journal_init (NULL);
} else if (is_first_time_index) {
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index 40120c7..919a5e8 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -116,6 +116,7 @@ struct _TrackerCommitDelegate {
};
static gboolean in_transaction = FALSE;
+static gboolean in_journal_replay = FALSE;
static TrackerDataUpdateBuffer update_buffer;
/* current resource */
static TrackerDataUpdateBufferResource *resource_buffer;
@@ -395,7 +396,9 @@ ensure_resource_id (const gchar *uri)
tracker_db_statement_execute (stmt, NULL);
g_object_unref (stmt);
- tracker_db_journal_append_resource (id, uri);
+ if (!in_journal_replay) {
+ tracker_db_journal_append_resource (id, uri);
+ }
g_hash_table_insert (update_buffer.resource_cache, g_strdup (uri), GUINT_TO_POINTER (id));
}
@@ -1280,9 +1283,11 @@ tracker_data_delete_statement (const gchar *graph,
if (object && g_strcmp0 (predicate, RDF_PREFIX "type") == 0) {
class = tracker_ontology_get_class_by_uri (object);
if (class != NULL) {
- tracker_db_journal_append_delete_statement_id (resource_buffer->id,
- tracker_data_query_resource_id (predicate),
- query_resource_id (object));
+ if (!in_journal_replay) {
+ tracker_db_journal_append_delete_statement_id (resource_buffer->id,
+ tracker_data_query_resource_id (predicate),
+ query_resource_id (object));
+ }
cache_delete_resource_type (class, graph);
} else {
@@ -1293,14 +1298,16 @@ tracker_data_delete_statement (const gchar *graph,
field = tracker_ontology_get_property_by_uri (predicate);
if (field != NULL) {
guint32 id = tracker_property_get_id (field);
- if (tracker_property_get_data_type (field) == TRACKER_PROPERTY_TYPE_RESOURCE) {
- tracker_db_journal_append_delete_statement_id (resource_buffer->id,
- (id != 0) ? id : tracker_data_query_resource_id (predicate),
- query_resource_id (object));
- } else {
- tracker_db_journal_append_delete_statement (resource_buffer->id,
- (id != 0) ? id : tracker_data_query_resource_id (predicate),
- object);
+ if (!in_journal_replay) {
+ if (tracker_property_get_data_type (field) == TRACKER_PROPERTY_TYPE_RESOURCE) {
+ tracker_db_journal_append_delete_statement_id (resource_buffer->id,
+ (id != 0) ? id : tracker_data_query_resource_id (predicate),
+ query_resource_id (object));
+ } else {
+ tracker_db_journal_append_delete_statement (resource_buffer->id,
+ (id != 0) ? id : tracker_data_query_resource_id (predicate),
+ object);
+ }
}
delete_metadata_decomposed (field, object, error);
@@ -1510,9 +1517,11 @@ tracker_data_insert_statement_with_uri (const gchar *graph,
return;
}
- tracker_db_journal_append_insert_statement_id (resource_buffer->id,
- (prop_id != 0) ? prop_id : tracker_data_query_resource_id (predicate),
- query_resource_id (object));
+ if (!in_journal_replay) {
+ tracker_db_journal_append_insert_statement_id (resource_buffer->id,
+ (prop_id != 0) ? prop_id : tracker_data_query_resource_id (predicate),
+ query_resource_id (object));
+ }
if (strcmp (predicate, RDF_PREFIX "type") == 0) {
/* handle rdf:type statements specially to
@@ -1589,9 +1598,11 @@ tracker_data_insert_statement_with_string (const gchar *graph,
return;
}
- tracker_db_journal_append_insert_statement (resource_buffer->id,
- (id != 0) ? id : tracker_data_query_resource_id (predicate),
- object);
+ if (!in_journal_replay) {
+ tracker_db_journal_append_insert_statement (resource_buffer->id,
+ (id != 0) ? id : tracker_data_query_resource_id (predicate),
+ object);
+ }
/* add value to metadata database */
cache_set_metadata_decomposed (property, object, &actual_error);
@@ -1849,6 +1860,13 @@ tracker_data_begin_transaction (void)
}
void
+tracker_data_begin_replay_transaction (void)
+{
+ in_journal_replay = TRUE;
+ tracker_data_begin_transaction ();
+}
+
+void
tracker_data_commit_transaction (void)
{
TrackerDBInterface *iface;
@@ -1879,6 +1897,8 @@ tracker_data_commit_transaction (void)
delegate->callback (delegate->user_data);
}
}
+
+ in_journal_replay = FALSE;
}
static void
diff --git a/src/libtracker-data/tracker-data-update.h b/src/libtracker-data/tracker-data-update.h
index 173d2fb..2d81341 100644
--- a/src/libtracker-data/tracker-data-update.h
+++ b/src/libtracker-data/tracker-data-update.h
@@ -77,6 +77,7 @@ void tracker_data_insert_statement_with_string (const gchar *
const gchar *object,
GError **error);
void tracker_data_begin_transaction (void);
+void tracker_data_begin_replay_transaction (void);
void tracker_data_commit_transaction (void);
void tracker_data_update_sparql (const gchar *update,
GError **error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]