function _update_create_fetch_task
Adds a task to the queue for fetching release history data for a project.
We only create a new fetch task if there's no task already in the queue for this particular project (based on 'fetch_task::' entries in the {cache_update} table).
Parameters
$project: Associative array of information about a project as created by update_get_projects(), including keys such as 'name' (short name), and the 'info' array with data from a .info file for the project.
See also
1 call to _update_create_fetch_task()
- update_create_fetch_task in modules/
update/ update.module - Creates a new fetch task after loading the necessary include file.
1 string reference to '_update_create_fetch_task'
- UpdateCoreTestCase::testFetchTasks in modules/
update/ update.test - Tests that exactly one fetch task per project is created and not more.
File
-
modules/
update/ update.fetch.inc, line 246
Code
function _update_create_fetch_task($project) {
$fetch_tasks =& drupal_static(__FUNCTION__, array());
if (empty($fetch_tasks)) {
$fetch_tasks = _update_get_cache_multiple('fetch_task');
}
$cid = 'fetch_task::' . $project['name'];
if (empty($fetch_tasks[$cid])) {
$queue = DrupalQueue::get('update_fetch_tasks');
$queue->createItem($project);
// Due to race conditions, it is possible that another process already
// inserted a row into the {cache_update} table and the following query will
// throw an exception.
// @todo: Remove the need for the manual check by relying on a queue that
// enforces unique items.
try {
db_insert('cache_update')->fields(array(
'cid' => $cid,
'created' => REQUEST_TIME,
))
->execute();
} catch (Exception $e) {
// The exception can be ignored safely.
}
$fetch_tasks[$cid] = REQUEST_TIME;
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.