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
			
			
This commit is contained in:
		| @@ -28,14 +28,23 @@ final class HarbormasterWaitForPreviousBuildStepImplementation | |||||||
|     // finished. |     // finished. | ||||||
|     $plan = $build->getBuildPlan(); |     $plan = $build->getBuildPlan(); | ||||||
|  |  | ||||||
|     $log = $build->createLog($build_target, 'waiting', 'blockers'); |     $existing_logs = id(new HarbormasterBuildLogQuery()) | ||||||
|     $log_start = $log->start(); |       ->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); |     $blockers = $this->getBlockers($object, $plan, $build); | ||||||
|     if ($blockers) { |     if ($blockers) { | ||||||
|  |       $log->start(); | ||||||
|       $log->append("Blocked by: ".implode(',', $blockers)."\n"); |       $log->append("Blocked by: ".implode(',', $blockers)."\n"); | ||||||
|  |       $log->finalize(); | ||||||
|     } |     } | ||||||
|     $log->finalize($log_start); |  | ||||||
|  |  | ||||||
|     if ($blockers) { |     if ($blockers) { | ||||||
|       throw new PhabricatorWorkerYieldException(15); |       throw new PhabricatorWorkerYieldException(15); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 James Rhodes
					James Rhodes