diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-03-21 10:03:20 +0100 |
---|---|---|
committer | Martyn Russell <martyn@lanedo.com> | 2011-04-20 15:46:01 +0100 |
commit | 4abd6b583bb866b4169a0db759bbfe6e4747da16 (patch) | |
tree | 98205cbdce371f09e354e99e17ad8199d2ac1a45 | |
parent | 24bf2a2b851f79761fe61b4b0e07c355bf47e2bc (diff) | |
download | tracker-4abd6b583bb866b4169a0db759bbfe6e4747da16.tar.gz |
libtracker-miner: avoid new extractions if requests limit reached
-rw-r--r-- | src/libtracker-miner/tracker-miner-fs-processing-pool.c | 2 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-miner-fs-processing-pool.h | 71 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-miner-fs.c | 12 |
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; } |