mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-23 14:00:56 +01:00
Make HarbormasterBuild a better source of truth about restarting/resuming/stopping
Summary: Ref T1049. The logic in the BuildEngine is a little different from the logic on the Build itself. Make these more consistent, and make queued commands more private. Test Plan: Restarted, stopped, and resumed a build. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T1049 Differential Revision: https://secure.phabricator.com/D7897
This commit is contained in:
parent
1786093c6e
commit
6dc582f459
2 changed files with 64 additions and 42 deletions
|
@ -72,49 +72,24 @@ final class HarbormasterBuildEngine extends Phobject {
|
|||
}
|
||||
|
||||
private function updateBuild(HarbormasterBuild $build) {
|
||||
|
||||
$should_stop = false;
|
||||
$should_resume = false;
|
||||
$should_restart = false;
|
||||
foreach ($build->getUnprocessedCommands() as $command) {
|
||||
switch ($command->getCommand()) {
|
||||
case HarbormasterBuildCommand::COMMAND_STOP:
|
||||
$should_stop = true;
|
||||
$should_resume = false;
|
||||
break;
|
||||
case HarbormasterBuildCommand::COMMAND_RESUME:
|
||||
$should_resume = true;
|
||||
$should_stop = false;
|
||||
break;
|
||||
case HarbormasterBuildCommand::COMMAND_RESTART:
|
||||
$should_restart = true;
|
||||
$should_resume = true;
|
||||
$should_stop = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (($build->getBuildStatus() == HarbormasterBuild::STATUS_PENDING) ||
|
||||
($should_restart)) {
|
||||
($build->isRestarting())) {
|
||||
$this->destroyBuildTargets($build);
|
||||
$build->setBuildStatus(HarbormasterBuild::STATUS_BUILDING);
|
||||
$build->save();
|
||||
}
|
||||
|
||||
if ($should_resume) {
|
||||
if ($build->isResuming()) {
|
||||
$build->setBuildStatus(HarbormasterBuild::STATUS_BUILDING);
|
||||
$build->save();
|
||||
}
|
||||
|
||||
if ($should_stop && !$build->isComplete()) {
|
||||
if ($build->isStopping() && !$build->isComplete()) {
|
||||
$build->setBuildStatus(HarbormasterBuild::STATUS_STOPPED);
|
||||
$build->save();
|
||||
}
|
||||
|
||||
foreach ($build->getUnprocessedCommands() as $command) {
|
||||
$command->delete();
|
||||
}
|
||||
$build->attachUnprocessedCommands(array());
|
||||
$build->deleteUnprocessedCommands();
|
||||
|
||||
if ($build->getBuildStatus() == HarbormasterBuild::STATUS_BUILDING) {
|
||||
$this->updateBuildSteps($build);
|
||||
|
|
|
@ -56,6 +56,15 @@ final class HarbormasterBuild extends HarbormasterDAO
|
|||
->setBuildStatus(self::STATUS_INACTIVE);
|
||||
}
|
||||
|
||||
public function delete() {
|
||||
$this->openTransaction();
|
||||
$this->deleteUnprocessedCommands();
|
||||
$result = parent::delete();
|
||||
$this->saveTransaction();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getConfiguration() {
|
||||
return array(
|
||||
self::CONFIG_AUX_PHID => true,
|
||||
|
@ -212,7 +221,7 @@ final class HarbormasterBuild extends HarbormasterDAO
|
|||
/* -( Build Commands )----------------------------------------------------- */
|
||||
|
||||
|
||||
public function getUnprocessedCommands() {
|
||||
private function getUnprocessedCommands() {
|
||||
return $this->assertAttached($this->unprocessedCommands);
|
||||
}
|
||||
|
||||
|
@ -221,15 +230,6 @@ final class HarbormasterBuild extends HarbormasterDAO
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function hasWaitingCommand($command_name) {
|
||||
foreach ($this->getUnprocessedCommands() as $command_object) {
|
||||
if ($command_object->getCommand() == $command_name) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function canRestartBuild() {
|
||||
return !$this->isRestarting();
|
||||
}
|
||||
|
@ -246,15 +246,62 @@ final class HarbormasterBuild extends HarbormasterDAO
|
|||
}
|
||||
|
||||
public function isStopping() {
|
||||
return $this->hasWaitingCommand(HarbormasterBuildCommand::COMMAND_STOP);
|
||||
$is_stopping = false;
|
||||
foreach ($this->getUnprocessedCommands() as $command_object) {
|
||||
$command = $command_object->getCommand();
|
||||
switch ($command) {
|
||||
case HarbormasterBuildCommand::COMMAND_STOP:
|
||||
$is_stopping = true;
|
||||
break;
|
||||
case HarbormasterBuildCommand::COMMAND_RESUME:
|
||||
case HarbormasterBuildCommand::COMMAND_RESTART:
|
||||
$is_stopping = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $is_stopping;
|
||||
}
|
||||
|
||||
public function isResuming() {
|
||||
return $this->hasWaitingCommand(HarbormasterBuildCommand::COMMAND_RESUME);
|
||||
$is_resuming = false;
|
||||
foreach ($this->getUnprocessedCommands() as $command_object) {
|
||||
$command = $command_object->getCommand();
|
||||
switch ($command) {
|
||||
case HarbormasterBuildCommand::COMMAND_RESTART:
|
||||
case HarbormasterBuildCommand::COMMAND_RESUME:
|
||||
$is_resuming = true;
|
||||
break;
|
||||
case HarbormasterBuildCommand::COMMAND_STOP:
|
||||
$is_resuming = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $is_resuming;
|
||||
}
|
||||
|
||||
public function isRestarting() {
|
||||
return $this->hasWaitingCommand(HarbormasterBuildCommand::COMMAND_RESTART);
|
||||
$is_restarting = false;
|
||||
foreach ($this->getUnprocessedCommands() as $command_object) {
|
||||
$command = $command_object->getCommand();
|
||||
switch ($command) {
|
||||
case HarbormasterBuildCommand::COMMAND_RESTART:
|
||||
$is_restarting = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $is_restarting;
|
||||
}
|
||||
|
||||
public function deleteUnprocessedCommands() {
|
||||
foreach ($this->getUnprocessedCommands() as $key => $command_object) {
|
||||
$command_object->delete();
|
||||
unset($this->unprocessedCommands[$key]);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue