summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-03-21 10:03:20 +0100
committerMartyn Russell <martyn@lanedo.com>2011-04-20 15:46:01 +0100
commit4abd6b583bb866b4169a0db759bbfe6e4747da16 (patch)
tree98205cbdce371f09e354e99e17ad8199d2ac1a45
parent24bf2a2b851f79761fe61b4b0e07c355bf47e2bc (diff)
downloadtracker-4abd6b583bb866b4169a0db759bbfe6e4747da16.tar.gz
libtracker-miner: avoid new extractions if requests limit reached
-rw-r--r--src/libtracker-miner/tracker-miner-fs-processing-pool.c2
-rw-r--r--src/libtracker-miner/tracker-miner-fs-processing-pool.h71
-rw-r--r--src/libtracker-miner/tracker-miner-fs.c12
3 files changed, 48 insertions, 37 deletions
diff --git a/src/libtracker-miner/tracker-miner-fs-processing-pool.c b/src/libtracker-miner/tracker-miner-fs-processing-pool.c
index 5e176a39f..228b654a0 100644
--- a/src/libtracker-miner/tracker-miner-fs-processing-pool.c
+++ b/src/libtracker-miner/tracker-miner-fs-processing-pool.c
@@ -558,7 +558,7 @@ tracker_processing_pool_ready_limit_reached (TrackerProcessingPool *pool)
TRUE : FALSE);
}
-static gboolean
+gboolean
tracker_processing_pool_n_requests_limit_reached (TrackerProcessingPool *pool)
{
return (pool->n_requests >= pool->limit_n_requests ? TRUE : FALSE);
diff --git a/src/libtracker-miner/tracker-miner-fs-processing-pool.h b/src/libtracker-miner/tracker-miner-fs-processing-pool.h
index 956bf2c69..076c485fc 100644
--- a/src/libtracker-miner/tracker-miner-fs-processing-pool.h
+++ b/src/libtracker-miner/tracker-miner-fs-processing-pool.h
@@ -59,41 +59,42 @@ void tracker_processing_task_set_bulk_operation (TrackerProces
/* Processing Pool API */
-TrackerProcessingPool *tracker_processing_pool_new (TrackerMinerFS *miner,
- guint limit_wait,
- guint limit_process,
- guint limit_n_requests);
-void tracker_processing_pool_free (TrackerProcessingPool *pool);
-void tracker_processing_pool_set_wait_limit (TrackerProcessingPool *pool,
- guint limit);
-void tracker_processing_pool_set_ready_limit (TrackerProcessingPool *pool,
- guint limit);
-void tracker_processing_pool_set_n_requests_limit (TrackerProcessingPool *pool,
- guint limit);
-guint tracker_processing_pool_get_wait_limit (TrackerProcessingPool *pool);
-guint tracker_processing_pool_get_ready_limit (TrackerProcessingPool *pool);
-guint tracker_processing_pool_get_n_requests_limit (TrackerProcessingPool *pool);
-TrackerProcessingTask *tracker_processing_pool_find_task (TrackerProcessingPool *pool,
- GFile *file,
- gboolean path_search);
-gboolean tracker_processing_pool_wait_limit_reached (TrackerProcessingPool *pool);
-void tracker_processing_pool_remove_task (TrackerProcessingPool *pool,
- TrackerProcessingTask *task);
-void tracker_processing_pool_push_wait_task (TrackerProcessingPool *pool,
- TrackerProcessingTask *task);
-gboolean tracker_processing_pool_push_ready_task (TrackerProcessingPool *pool,
- TrackerProcessingTask *task,
- TrackerProcessingPoolTaskFinishedCallback finished_handler,
- gpointer user_data);
-guint tracker_processing_pool_get_n_requests (TrackerProcessingPool *pool);
-guint tracker_processing_pool_get_wait_task_count (TrackerProcessingPool *pool);
-guint tracker_processing_pool_get_total_task_count (TrackerProcessingPool *pool);
-TrackerProcessingTask *tracker_processing_pool_get_last_wait (TrackerProcessingPool *pool);
-void tracker_processing_pool_foreach (TrackerProcessingPool *pool,
- GFunc func,
- gpointer user_data);
-void tracker_processing_pool_buffer_flush (TrackerProcessingPool *pool,
- const gchar *reason);
+TrackerProcessingPool *tracker_processing_pool_new (TrackerMinerFS *miner,
+ guint limit_wait,
+ guint limit_process,
+ guint limit_n_requests);
+void tracker_processing_pool_free (TrackerProcessingPool *pool);
+void tracker_processing_pool_set_wait_limit (TrackerProcessingPool *pool,
+ guint limit);
+void tracker_processing_pool_set_ready_limit (TrackerProcessingPool *pool,
+ guint limit);
+void tracker_processing_pool_set_n_requests_limit (TrackerProcessingPool *pool,
+ guint limit);
+guint tracker_processing_pool_get_wait_limit (TrackerProcessingPool *pool);
+guint tracker_processing_pool_get_ready_limit (TrackerProcessingPool *pool);
+guint tracker_processing_pool_get_n_requests_limit (TrackerProcessingPool *pool);
+TrackerProcessingTask *tracker_processing_pool_find_task (TrackerProcessingPool *pool,
+ GFile *file,
+ gboolean path_search);
+gboolean tracker_processing_pool_wait_limit_reached (TrackerProcessingPool *pool);
+gboolean tracker_processing_pool_n_requests_limit_reached (TrackerProcessingPool *pool);
+void tracker_processing_pool_remove_task (TrackerProcessingPool *pool,
+ TrackerProcessingTask *task);
+void tracker_processing_pool_push_wait_task (TrackerProcessingPool *pool,
+ TrackerProcessingTask *task);
+gboolean tracker_processing_pool_push_ready_task (TrackerProcessingPool *pool,
+ TrackerProcessingTask *task,
+ TrackerProcessingPoolTaskFinishedCallback finished_handler,
+ gpointer user_data);
+guint tracker_processing_pool_get_n_requests (TrackerProcessingPool *pool);
+guint tracker_processing_pool_get_wait_task_count (TrackerProcessingPool *pool);
+guint tracker_processing_pool_get_total_task_count (TrackerProcessingPool *pool);
+TrackerProcessingTask *tracker_processing_pool_get_last_wait (TrackerProcessingPool *pool);
+void tracker_processing_pool_foreach (TrackerProcessingPool *pool,
+ GFunc func,
+ gpointer user_data);
+void tracker_processing_pool_buffer_flush (TrackerProcessingPool *pool,
+ const gchar *reason);
G_END_DECLS
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 33b1d353b..3df055c1e 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -2828,8 +2828,18 @@ item_queue_handlers_set_up (TrackerMinerFS *fs)
return;
}
+ /* Already sent max number of tasks to tracker-extract? */
if (tracker_processing_pool_wait_limit_reached (fs->private->processing_pool)) {
- /* There is no room in the pool for more files */
+ return;
+ }
+
+ /* Already sent max number of requests to tracker-store?
+ * In this case, we also slow down the processing of items, as we don't
+ * want to keep on extracting if the communication with tracker-store is
+ * very busy. Note that this is not very likely to happen, as the bottleneck
+ * during extraction is not the communication with tracker-store.
+ */
+ if (tracker_processing_pool_n_requests_limit_reached (fs->private->processing_pool)) {
return;
}