Move all cluster locking logic to a separate class

Summary: Ref T10860. This doesn't change anything, it just separates all this stuff out of `PhabricatorRepository` since I'm planning to add a bit more state to it and it's already pretty big and fairly separable.

Test Plan: Pulled, pushed, browsed Diffusion.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10860

Differential Revision: https://secure.phabricator.com/D15790
This commit is contained in:
epriestley
2016-04-24 09:04:27 -07:00
parent 1c0980a26a
commit dc75b4bd06
10 changed files with 479 additions and 393 deletions

View File

@@ -540,12 +540,16 @@ final class DiffusionServeController extends DiffusionController {
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
$cluster_engine = id(new DiffusionRepositoryClusterEngine())
->setViewer($viewer)
->setRepository($repository);
$did_write_lock = false;
if ($this->isReadOnlyRequest($repository)) {
$repository->synchronizeWorkingCopyBeforeRead();
$cluster_engine->synchronizeWorkingCopyBeforeRead();
} else {
$did_write_lock = true;
$repository->synchronizeWorkingCopyBeforeWrite($viewer);
$cluster_engine->synchronizeWorkingCopyBeforeWrite();
}
$caught = null;
@@ -559,7 +563,7 @@ final class DiffusionServeController extends DiffusionController {
}
if ($did_write_lock) {
$repository->synchronizeWorkingCopyAfterWrite();
$cluster_engine->synchronizeWorkingCopyAfterWrite();
}
unset($unguarded);