[tracker/error-handling] libtracker-data: Refactor transaction-commit/rollback for error reporting



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]