[tracker] libtracker-miner: Make _push() implementation easier to follow
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] libtracker-miner: Make _push() implementation easier to follow
- Date: Tue, 26 Aug 2014 16:57:01 +0000 (UTC)
commit 566fc496f02d97d97d92a7a3f02eec60fdaf7aab
Author: Martyn Russell <martyn lanedo com>
Date: Tue Aug 26 17:15:11 2014 +0100
libtracker-miner: Make _push() implementation easier to follow
Split internally into two functions for pushing to a bulk commit and pushing
as a priority. Easier to follow.
src/libtracker-miner/tracker-sparql-buffer.c | 113 ++++++++++++++++----------
1 files changed, 69 insertions(+), 44 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-sparql-buffer.c b/src/libtracker-miner/tracker-sparql-buffer.c
index e4e5cf7..418d3d7 100644
--- a/src/libtracker-miner/tracker-sparql-buffer.c
+++ b/src/libtracker-miner/tracker-sparql-buffer.c
@@ -650,6 +650,66 @@ tracker_sparql_buffer_update_cb (GObject *object,
g_slice_free (UpdateData, update_data);
}
+static void
+sparql_buffer_push_high_priority (TrackerSparqlBuffer *buffer,
+ TrackerTask *task,
+ SparqlTaskData *data)
+{
+ TrackerSparqlBufferPrivate *priv;
+ UpdateData *update_data;
+ const gchar *sparql = NULL;
+
+ priv = buffer->priv;
+
+ /* Task pool addition adds a reference (below) */
+ update_data = g_slice_new0 (UpdateData);
+ update_data->buffer = buffer;
+ update_data->task = task;
+
+ if (data->type == TASK_TYPE_SPARQL_STR) {
+ sparql = data->data.str;
+ } else if (data->type == TASK_TYPE_SPARQL) {
+ sparql = tracker_sparql_builder_get_result (data->data.builder);
+ }
+
+ tracker_task_pool_add (TRACKER_TASK_POOL (buffer), task);
+ tracker_sparql_connection_update_async (priv->connection,
+ sparql,
+ G_PRIORITY_HIGH,
+ NULL,
+ tracker_sparql_buffer_update_cb,
+ update_data);
+}
+
+static void
+sparql_buffer_push_to_pool (TrackerSparqlBuffer *buffer,
+ TrackerTask *task)
+{
+ TrackerSparqlBufferPrivate *priv;
+
+ priv = buffer->priv;
+
+ if (tracker_task_pool_get_size (TRACKER_TASK_POOL (buffer)) == 0) {
+ reset_flush_timeout (buffer);
+ }
+
+ /* Task pool addition adds a reference (below) */
+ tracker_task_pool_add (TRACKER_TASK_POOL (buffer), task);
+
+ if (!priv->tasks) {
+ priv->tasks = g_ptr_array_new_with_free_func ((GDestroyNotify) tracker_task_unref);
+ }
+
+ g_ptr_array_add (priv->tasks, task);
+
+ if (tracker_task_pool_limit_reached (TRACKER_TASK_POOL (buffer))) {
+ tracker_sparql_buffer_flush (buffer, "SPARQL buffer limit reached");
+ } else if (priv->tasks->len > tracker_task_pool_get_limit (TRACKER_TASK_POOL (buffer)) / 2) {
+ /* We've filled half of the buffer, flush it as we receive more tasks */
+ tracker_sparql_buffer_flush (buffer, "SPARQL buffer half-full");
+ }
+}
+
void
tracker_sparql_buffer_push (TrackerSparqlBuffer *buffer,
TrackerTask *task,
@@ -657,60 +717,25 @@ tracker_sparql_buffer_push (TrackerSparqlBuffer *buffer,
GAsyncReadyCallback cb,
gpointer user_data)
{
- TrackerSparqlBufferPrivate *priv;
SparqlTaskData *data;
g_return_if_fail (TRACKER_IS_SPARQL_BUFFER (buffer));
g_return_if_fail (task != NULL);
- priv = buffer->priv;
-
data = tracker_task_get_data (task);
- data->result = g_simple_async_result_new (G_OBJECT (buffer),
- cb, user_data, NULL);
+
+ if (!data->result) {
+ data->result = g_simple_async_result_new (G_OBJECT (buffer),
+ cb,
+ user_data,
+ NULL);
+ }
if (priority <= G_PRIORITY_HIGH &&
data->type != TASK_TYPE_BULK) {
- UpdateData *update_data;
- const gchar *sparql = NULL;
-
- /* High priority task */
- update_data = g_slice_new0 (UpdateData);
- update_data->buffer = buffer;
- update_data->task = task;
-
- if (data->type == TASK_TYPE_SPARQL_STR) {
- sparql = data->data.str;
- } else if (data->type == TASK_TYPE_SPARQL) {
- sparql = tracker_sparql_builder_get_result (data->data.builder);
- }
-
- tracker_task_pool_add (TRACKER_TASK_POOL (buffer), task);
- tracker_sparql_connection_update_async (priv->connection,
- sparql,
- G_PRIORITY_HIGH,
- NULL,
- tracker_sparql_buffer_update_cb,
- update_data);
+ sparql_buffer_push_high_priority (buffer, task, data);
} else {
- if (tracker_task_pool_get_size (TRACKER_TASK_POOL (buffer)) == 0) {
- reset_flush_timeout (buffer);
- }
-
- tracker_task_pool_add (TRACKER_TASK_POOL (buffer), task);
-
- if (!priv->tasks) {
- priv->tasks = g_ptr_array_new_with_free_func ((GDestroyNotify) tracker_task_unref);
- }
-
- g_ptr_array_add (priv->tasks, task);
-
- if (tracker_task_pool_limit_reached (TRACKER_TASK_POOL (buffer))) {
- tracker_sparql_buffer_flush (buffer, "SPARQL buffer limit reached");
- } else if (priv->tasks->len > tracker_task_pool_get_limit (TRACKER_TASK_POOL (buffer)) / 2) {
- /* We've filled half of the buffer, flush it as we receive more tasks */
- tracker_sparql_buffer_flush (buffer, "SPARQL buffer half-full");
- }
+ sparql_buffer_push_to_pool (buffer, task);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]