From 6770481c639e9f0953619b52ca127fe5bbaeec71 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Wed, 23 Mar 2022 10:52:14 +1100 Subject: [PATCH] MDL-70568 cron: Temporarily increase debug level on task failure --- lib/cronlib.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/cronlib.php b/lib/cronlib.php index 0cf405b210f..0ec7f06e772 100644 --- a/lib/cronlib.php +++ b/lib/cronlib.php @@ -236,6 +236,7 @@ function cron_run_adhoc_tasks(int $timenow, $keepalive = 0, $checklimits = true) */ function cron_run_inner_scheduled_task(\core\task\task_base $task) { global $CFG, $DB; + $debuglevel = $CFG->debug; \core\task\manager::scheduled_task_starting($task); \core\task\logmanager::start_logging($task); @@ -250,6 +251,11 @@ function cron_run_inner_scheduled_task(\core\task\task_base $task) { try { get_mailer('buffer'); cron_prepare_core_renderer(); + // Temporarily increase debug level if task has failed and debugging isn't already at maximum. + if ($debuglevel !== DEBUG_DEVELOPER && $faildelay = $task->get_fail_delay()) { + mtrace('Debugging increased temporarily due to faildelay of ' . $faildelay); + set_debugging(DEBUG_DEVELOPER); + } $task->execute(); if ($DB->is_transaction_started()) { throw new coding_exception("Task left transaction open"); @@ -280,6 +286,10 @@ function cron_run_inner_scheduled_task(\core\task\task_base $task) { } \core\task\manager::scheduled_task_failed($task); } finally { + // Reset debugging if it changed. + if ($CFG->debug !== $debuglevel) { + set_debugging($debuglevel); + } // Reset back to the standard admin user. cron_setup_user(); cron_set_process_title('Waiting for next scheduled task'); @@ -294,7 +304,8 @@ function cron_run_inner_scheduled_task(\core\task\task_base $task) { * @param \core\task\adhoc_task $task */ function cron_run_inner_adhoc_task(\core\task\adhoc_task $task) { - global $DB, $CFG; + global $CFG, $DB; + $debuglevel = $CFG->debug; \core\task\manager::adhoc_task_starting($task); \core\task\logmanager::start_logging($task); @@ -338,6 +349,11 @@ function cron_run_inner_adhoc_task(\core\task\adhoc_task $task) { try { get_mailer('buffer'); cron_prepare_core_renderer(); + // Temporarily increase debug level if task has failed and debugging isn't already at maximum. + if ($debuglevel !== DEBUG_DEVELOPER && $faildelay = $task->get_fail_delay()) { + mtrace('Debugging increased temporarily due to faildelay of ' . $faildelay); + set_debugging(DEBUG_DEVELOPER); + } $task->execute(); if ($DB->is_transaction_started()) { throw new coding_exception("Task left transaction open"); @@ -368,6 +384,10 @@ function cron_run_inner_adhoc_task(\core\task\adhoc_task $task) { } \core\task\manager::adhoc_task_failed($task); } finally { + // Reset debug level if it changed. + if ($CFG->debug !== $debuglevel) { + set_debugging($debuglevel); + } // Reset back to the standard admin user. cron_setup_user(); cron_prepare_core_renderer(true);