mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-11 07:11:04 +01:00
Use "null", not "-1", as a local "no version" marker when performing intracluster repository sync
Summary: Ref T13242. See <https://discourse.phabricator-community.org/t/out-of-range-value-for-column-deviceversion/2218>. The synchronization log column is `uint32?` and `-1` doesn't go into that column. Since we're only using `-1` for convenience to cheat through `$max_version > $this_version` checks, use `null` instead and make the checks more explicit. Test Plan: Reproducing this is a bit tricky and I cheated fairly heavily to force the code down this pathway without actually building a multi-device cluster, but I did reproduce the original exception, apply the patch, and observe that it fixed things. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13242 Differential Revision: https://secure.phabricator.com/D20047
This commit is contained in:
parent
9fd8343704
commit
d254c1f8b1
1 changed files with 5 additions and 4 deletions
|
@ -188,7 +188,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||
if ($this_version) {
|
||||
$this_version = (int)$this_version->getRepositoryVersion();
|
||||
} else {
|
||||
$this_version = -1;
|
||||
$this_version = null;
|
||||
}
|
||||
|
||||
if ($versions) {
|
||||
|
@ -197,7 +197,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||
// leader, we want to fetch from a leader and then update our version.
|
||||
|
||||
$max_version = (int)max(mpull($versions, 'getRepositoryVersion'));
|
||||
if ($max_version > $this_version) {
|
||||
if (($this_version === null) || ($max_version > $this_version)) {
|
||||
if ($repository->isHosted()) {
|
||||
$fetchable = array();
|
||||
foreach ($versions as $version) {
|
||||
|
@ -206,6 +206,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
$this->synchronizeWorkingCopyFromDevices(
|
||||
$fetchable,
|
||||
$this_version,
|
||||
|
@ -445,10 +446,10 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||
if ($this_version) {
|
||||
$this_version = (int)$this_version->getRepositoryVersion();
|
||||
} else {
|
||||
$this_version = -1;
|
||||
$this_version = null;
|
||||
}
|
||||
|
||||
if ($new_version > $this_version) {
|
||||
if (($this_version === null) || ($new_version > $this_version)) {
|
||||
PhabricatorRepositoryWorkingCopyVersion::updateVersion(
|
||||
$repository_phid,
|
||||
$device_phid,
|
||||
|
|
Loading…
Reference in a new issue