[tracker/error-handling] libtracker-data: Refactor transaction-commit/rollback for error reporting
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/error-handling] libtracker-data: Refactor transaction-commit/rollback for error reporting
- Date: Wed, 9 Feb 2011 14:27:25 +0000 (UTC)
commit 359f8aa3c70705fbbc8f56c679ca8aee7b5f649d
Author: Philip Van Hoof <philip codeminded be>
Date: Wed Feb 9 15:26:45 2011 +0100
libtracker-data: Refactor transaction-commit/rollback for error reporting
src/libtracker-data/tracker-data-manager.c | 5 ---
src/libtracker-data/tracker-data-update.c | 40 ++++++++++++++-------------
2 files changed, 21 insertions(+), 24 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index fb1a9c0..c4f2df6 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -3660,7 +3660,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_data_commit_transaction (&internal_error);
if (internal_error) {
- tracker_data_rollback_transaction ();
g_propagate_error (error, internal_error);
return FALSE;
}
@@ -3835,7 +3834,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_data_commit_transaction (&internal_error);
if (internal_error) {
- tracker_data_rollback_transaction ();
g_propagate_error (error, internal_error);
return FALSE;
}
@@ -3902,7 +3900,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_data_commit_transaction (&internal_error);
if (internal_error) {
- tracker_data_rollback_transaction ();
g_propagate_error (error, internal_error);
return FALSE;
}
@@ -3996,7 +3993,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_data_commit_transaction (&internal_error);
if (internal_error) {
- tracker_data_rollback_transaction ();
g_propagate_error (error, internal_error);
return FALSE;
}
@@ -4053,7 +4049,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_data_commit_transaction (&internal_error);
if (internal_error) {
- tracker_data_rollback_transaction ();
g_propagate_error (error, internal_error);
return FALSE;
}
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index 64359a1..3d0e16e 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -162,7 +162,6 @@ static GPtrArray *commit_callbacks = NULL;
static GPtrArray *rollback_callbacks = NULL;
static gint max_service_id = 0;
static gint max_ontology_id = 0;
-static gboolean commit_failed = FALSE;
static gint ensure_resource_id (const gchar *uri,
gboolean *create);
@@ -176,6 +175,7 @@ static void cache_insert_value (const gchar *table_name,
gboolean date_time);
static GValueArray *get_old_property_values (TrackerProperty *property,
GError **error);
+static void rollback_transaction (gboolean exec_rollback);
void
tracker_data_add_commit_statement_callback (TrackerCommitCallback callback,
@@ -2509,6 +2509,7 @@ tracker_data_commit_transaction (GError **error)
tracker_data_update_buffer_flush (&actual_error);
if (actual_error) {
+ rollback_transaction (TRUE);
g_propagate_error (error, actual_error);
return;
}
@@ -2517,7 +2518,7 @@ tracker_data_commit_transaction (GError **error)
&actual_error);
if (actual_error) {
- commit_failed = TRUE;
+ rollback_transaction (FALSE);
g_propagate_error (error, actual_error);
return;
}
@@ -2578,7 +2579,7 @@ tracker_data_notify_transaction (gboolean start_timer)
}
static void
-tracker_data_rollback_journal_transaction (void)
+rollback_transaction (gboolean exec_rollback)
{
TrackerDBInterface *iface;
@@ -2590,28 +2591,31 @@ tracker_data_rollback_journal_transaction (void)
iface = tracker_db_manager_get_db_interface ();
tracker_data_update_buffer_clear ();
- if (!commit_failed) {
+
+ if (exec_rollback) {
tracker_db_interface_execute_query (iface, NULL, "ROLLBACK");
- commit_failed = FALSE;
}
tracker_db_interface_execute_query (iface, NULL, "PRAGMA cache_size = %d", TRACKER_DB_CACHE_SIZE_DEFAULT);
+
+ if (!in_journal_replay) {
+ tracker_db_journal_rollback_transaction ();
+
+ if (rollback_callbacks) {
+ guint n;
+ for (n = 0; n < rollback_callbacks->len; n++) {
+ TrackerCommitDelegate *delegate;
+ delegate = g_ptr_array_index (rollback_callbacks, n);
+ delegate->callback (TRUE, delegate->user_data);
+ }
+ }
+ }
}
void
tracker_data_rollback_transaction (void)
{
- tracker_data_rollback_journal_transaction ();
- tracker_db_journal_rollback_transaction ();
-
- if (rollback_callbacks) {
- guint n;
- for (n = 0; n < rollback_callbacks->len; n++) {
- TrackerCommitDelegate *delegate;
- delegate = g_ptr_array_index (rollback_callbacks, n);
- delegate->callback (TRUE, delegate->user_data);
- }
- }
+ rollback_transaction (TRUE);
}
static GPtrArray *
@@ -2636,14 +2640,13 @@ update_sparql (const gchar *update,
g_object_unref (sparql_query);
if (actual_error) {
- tracker_data_rollback_transaction ();
+ rollback_transaction (TRUE);
g_propagate_error (error, actual_error);
return NULL;
}
tracker_data_commit_transaction (&actual_error);
if (actual_error) {
- tracker_data_rollback_transaction ();
g_propagate_error (error, actual_error);
return NULL;
}
@@ -2738,7 +2741,6 @@ tracker_data_replay_journal (TrackerBusyCallback busy_callback,
tracker_data_commit_transaction (&new_error);
if (new_error) {
- tracker_data_rollback_journal_transaction ();
g_warning ("Journal replay error: '%s'", new_error->message);
/* Oud of disk is an unrecoverable fatal error */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]