From f015cb50fe6a1e600165fc12f347e16956514bf7 Mon Sep 17 00:00:00 2001 From: James Rhodes Date: Sat, 30 Aug 2014 02:11:45 +1000 Subject: [PATCH] Prevent "Wait for Build Commits" from creating billions of logs Summary: Resolves T5987. This build step was at some point converted to use yielding, which meant that whenever the build step executes it will create a new log. This checks to see if there is an existing log before creating a new one and uses that instead. Long term we're going to need some way of attaching data to `PhabricatorWorkerYieldException` that can be read when the build step starts again; this will allow us to move more build steps off `while (...) { ... sleep(X); }` loops and onto yielding. Test Plan: Tested locally. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: epriestley Maniphest Tasks: T5987 Differential Revision: https://secure.phabricator.com/D10383 --- ...sterWaitForPreviousBuildStepImplementation.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/applications/harbormaster/step/HarbormasterWaitForPreviousBuildStepImplementation.php b/src/applications/harbormaster/step/HarbormasterWaitForPreviousBuildStepImplementation.php index 39fa0754d9..16df73d120 100644 --- a/src/applications/harbormaster/step/HarbormasterWaitForPreviousBuildStepImplementation.php +++ b/src/applications/harbormaster/step/HarbormasterWaitForPreviousBuildStepImplementation.php @@ -28,14 +28,23 @@ final class HarbormasterWaitForPreviousBuildStepImplementation // finished. $plan = $build->getBuildPlan(); - $log = $build->createLog($build_target, 'waiting', 'blockers'); - $log_start = $log->start(); + $existing_logs = id(new HarbormasterBuildLogQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withBuildTargetPHIDs(array($build_target->getPHID())) + ->execute(); + + if ($existing_logs) { + $log = head($existing_logs); + } else { + $log = $build->createLog($build_target, 'waiting', 'blockers'); + } $blockers = $this->getBlockers($object, $plan, $build); if ($blockers) { + $log->start(); $log->append("Blocked by: ".implode(',', $blockers)."\n"); + $log->finalize(); } - $log->finalize($log_start); if ($blockers) { throw new PhabricatorWorkerYieldException(15);