From a3bb35e9d20a8eb5bc2c7128b03c4fbe1c954513 Mon Sep 17 00:00:00 2001 From: Aviv Eyal Date: Mon, 18 Apr 2016 13:43:32 -0700 Subject: [PATCH] make Trigger Daemon sleep correctly when one-time triggers exist Summary: Trigger daemon is trying to find the next event to invoke before sleeping, but the query includes already-elapsed triggers. It then tries to sleep for 0 seconds. Test Plan: On a new instance, schedule a single trigger of type `PhabricatorOneTimeTriggerClock` to a very near time. Use top to see trigger daemon not going to 100% CPU once the event has elapsed. Reviewers: #blessed_reviewers, epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D15750 --- src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php b/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php index 1620c8f99a..a51280d6ab 100644 --- a/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php +++ b/src/infrastructure/daemon/workers/PhabricatorTriggerDaemon.php @@ -261,7 +261,7 @@ final class PhabricatorTriggerDaemon * Get the number of seconds to sleep for before starting the next scheduling * phase. * - * If no events are scheduled soon, we'll sleep for 60 seconds. Otherwise, + * If no events are scheduled soon, we'll sleep briefly. Otherwise, * we'll sleep until the next scheduled event. * * @return int Number of seconds to sleep for. @@ -272,6 +272,7 @@ final class PhabricatorTriggerDaemon $next_triggers = id(new PhabricatorWorkerTriggerQuery()) ->setViewer($this->getViewer()) ->setOrder(PhabricatorWorkerTriggerQuery::ORDER_EXECUTION) + ->withNextEventBetween(0, null) ->setLimit(1) ->needEvents(true) ->execute();