[tracker-miners/wip/carlosg/cli-improvements: 19/47] libtracker-miner: Retry files asynchronously on TrackerDecorator batch errors
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/wip/carlosg/cli-improvements: 19/47] libtracker-miner: Retry files asynchronously on TrackerDecorator batch errors
- Date: Wed, 19 Aug 2020 11:31:31 +0000 (UTC)
commit 321da9c6e4175412b8c6edd5192ee50ffc590b84
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun Aug 16 13:46:34 2020 +0200
libtracker-miner: Retry files asynchronously on TrackerDecorator batch errors
We process a number of files together, so any SPARQL error from one file will
result in the whole batch failing. Retry these files synchronously one by one,
so we let the good files in, and selectively error out on just the failed files.
src/libtracker-miner/tracker-decorator.c | 39 +++++++++++++++++++++++---------
1 file changed, 28 insertions(+), 11 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-decorator.c b/src/libtracker-miner/tracker-decorator.c
index 383c28a01..b5ec646b8 100644
--- a/src/libtracker-miner/tracker-decorator.c
+++ b/src/libtracker-miner/tracker-decorator.c
@@ -287,6 +287,31 @@ item_warn (TrackerSparqlConnection *conn,
g_clear_object (&cursor);
}
+static void
+retry_synchronously (TrackerDecorator *decorator,
+ GArray *commit_buffer)
+{
+ TrackerSparqlConnection *sparql_conn;
+ guint i;
+
+ sparql_conn = tracker_miner_get_connection (TRACKER_MINER (decorator));
+
+ for (i = 0; i < commit_buffer->len; i++) {
+ SparqlUpdate *update;
+ GError *error = NULL;
+
+ update = &g_array_index (commit_buffer, SparqlUpdate, i);
+ tracker_sparql_connection_update (sparql_conn,
+ update->sparql,
+ NULL,
+ &error);
+
+ if (error) {
+ item_warn (sparql_conn, update->id, update->sparql, error);
+ }
+ }
+}
+
static void
decorator_commit_cb (GObject *object,
GAsyncResult *result,
@@ -295,8 +320,6 @@ decorator_commit_cb (GObject *object,
TrackerSparqlConnection *conn;
TrackerDecoratorPrivate *priv;
TrackerDecorator *decorator;
- GError *error = NULL;
- guint i;
decorator = user_data;
priv = decorator->priv;
@@ -304,15 +327,9 @@ decorator_commit_cb (GObject *object,
priv->n_updates--;
- if (!tracker_sparql_connection_update_array_finish (conn, result, &error)) {
- g_warning ("There was an error pushing metadata: %s\n", error->message);
-
- for (i = 0; i < priv->commit_buffer->len; i++) {
- SparqlUpdate *update;
-
- update = &g_array_index (priv->commit_buffer, SparqlUpdate, i);
- item_warn (conn, update->id, update->sparql, error);
- }
+ if (!tracker_sparql_connection_update_array_finish (conn, result, NULL)) {
+ g_debug ("SPARQL error detected in batch, retrying one by one");
+ retry_synchronously (decorator, priv->commit_buffer);
}
g_clear_pointer (&priv->commit_buffer, g_array_unref);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]