MDL-67486 cron: Improve throughput by holding cron lock for less time
This commit is contained in:
@@ -484,10 +484,6 @@ class manager {
|
||||
global $DB;
|
||||
$cronlockfactory = \core\lock\lock_config::get_lock_factory('cron');
|
||||
|
||||
if (!$cronlock = $cronlockfactory->get_lock('core_cron', 10)) {
|
||||
throw new \moodle_exception('locktimeout');
|
||||
}
|
||||
|
||||
$where = '(nextruntime IS NULL OR nextruntime < :timestart1)';
|
||||
$params = array('timestart1' => $timestart);
|
||||
$records = $DB->get_records_select('task_adhoc', $where, $params);
|
||||
@@ -511,6 +507,13 @@ class manager {
|
||||
continue;
|
||||
}
|
||||
|
||||
// The global cron lock is under the most contention so request it
|
||||
// as late as possible and release it as soon as possible.
|
||||
if (!$cronlock = $cronlockfactory->get_lock('core_cron', 10)) {
|
||||
$lock->release();
|
||||
throw new \moodle_exception('locktimeout');
|
||||
}
|
||||
|
||||
$task->set_lock($lock);
|
||||
if (!$task->is_blocking()) {
|
||||
$cronlock->release();
|
||||
@@ -521,8 +524,6 @@ class manager {
|
||||
}
|
||||
}
|
||||
|
||||
// No tasks.
|
||||
$cronlock->release();
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -539,10 +540,6 @@ class manager {
|
||||
global $DB;
|
||||
$cronlockfactory = \core\lock\lock_config::get_lock_factory('cron');
|
||||
|
||||
if (!$cronlock = $cronlockfactory->get_lock('core_cron', 10)) {
|
||||
throw new \moodle_exception('locktimeout');
|
||||
}
|
||||
|
||||
$where = "(lastruntime IS NULL OR lastruntime < :timestart1)
|
||||
AND (nextruntime IS NULL OR nextruntime < :timestart2)
|
||||
AND disabled = 0
|
||||
@@ -581,6 +578,13 @@ class manager {
|
||||
continue;
|
||||
}
|
||||
|
||||
// The global cron lock is under the most contention so request it
|
||||
// as late as possible and release it as soon as possible.
|
||||
if (!$cronlock = $cronlockfactory->get_lock('core_cron', 10)) {
|
||||
$lock->release();
|
||||
throw new \moodle_exception('locktimeout');
|
||||
}
|
||||
|
||||
if (!$task->is_blocking()) {
|
||||
$cronlock->release();
|
||||
} else {
|
||||
@@ -590,8 +594,6 @@ class manager {
|
||||
}
|
||||
}
|
||||
|
||||
// No tasks.
|
||||
$cronlock->release();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user