From e6b2d50114f497281f3db83374755fa15fe0d016 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 20 Apr 2021 17:09:48 +0200 Subject: [inc/Trigger] Remember ::ipxe() result and return it on subsequent calls This fixes triggering two or more compile runs in one request, which is most likely pointless as it would generate the same result. Just remember the return value (task id) from the first onvication and return it right away. --- inc/trigger.inc.php | 5 ++++- modules-available/serversetup-bwlp-ipxe/hooks/ipxe-update.inc.php | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/inc/trigger.inc.php b/inc/trigger.inc.php index cd38ce98..6acd6f87 100644 --- a/inc/trigger.inc.php +++ b/inc/trigger.inc.php @@ -19,6 +19,9 @@ class Trigger */ public static function ipxe($taskId = null) { + static $lastResult = false; + if ($lastResult !== false) + return $lastResult; $hooks = Hook::load('ipxe-update'); foreach ($hooks as $hook) { $ret = function($taskId) use ($hook) { @@ -34,7 +37,7 @@ class Trigger $taskId = $ret['id']; } } - return $taskId ?? false; + return $lastResult = ($taskId ?? false); } /** diff --git a/modules-available/serversetup-bwlp-ipxe/hooks/ipxe-update.inc.php b/modules-available/serversetup-bwlp-ipxe/hooks/ipxe-update.inc.php index f645e9e7..76f8cfa2 100644 --- a/modules-available/serversetup-bwlp-ipxe/hooks/ipxe-update.inc.php +++ b/modules-available/serversetup-bwlp-ipxe/hooks/ipxe-update.inc.php @@ -13,8 +13,10 @@ $data = [ if ($data['ipaddress'] === 'invalid') return null; $task = Taskmanager::submit('CompileIPxeNew', $data); -if (Taskmanager::isFailed($task)) +if (Taskmanager::isFailed($task)) { + error_log(print_r($task, true)); return null; +} TaskmanagerCallback::addCallback($task, 'ipxeCompileDone'); Property::set(IPxeBuilder::PROP_IPXE_COMPILE_TASKID, $task['id'], 15); return $task['id']; \ No newline at end of file -- cgit v1.2.3-55-g7522