NoteDbUpdateManager: Default checkExpectedState to true
This was always the intention, as it's the safest approach. Unfortunately, since this was dead code, flipping the flag found a bug in the logic. We don't want to check whether the expected state matches using the ChainedReceiveCommands, which includes the results of any updates we're about to apply--of course that won't match. Instead, reach in and grab the underlying RepoRefCache. This continues avoiding an extra read, since it uses the same cached ref value. Using a cached value here should still be safe as the ReceiveCommand itself will fail if the ref was updated in the meantime. Change-Id: I8bc6b1706f27c31e2ca335910040fe083bf146e8
This commit is contained in:
@@ -49,6 +49,10 @@ public class ChainedReceiveCommands implements RefCache {
|
||||
this.refCache = checkNotNull(refCache);
|
||||
}
|
||||
|
||||
public RepoRefCache getRepoRefCache() {
|
||||
return refCache;
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return commands.isEmpty();
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ public class NoteDbUpdateManager {
|
||||
private OpenRepo changeRepo;
|
||||
private OpenRepo allUsersRepo;
|
||||
private Map<Change.Id, StagedResult> staged;
|
||||
private boolean checkExpectedState;
|
||||
private boolean checkExpectedState = true;
|
||||
|
||||
@AssistedInject
|
||||
NoteDbUpdateManager(GitRepositoryManager repoManager,
|
||||
@@ -486,7 +486,7 @@ public class NoteDbUpdateManager {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!expectedState.isChangeUpToDate(changeRepo.cmds)) {
|
||||
if (!expectedState.isChangeUpToDate(changeRepo.cmds.getRepoRefCache())) {
|
||||
throw new OrmConcurrencyException(String.format(
|
||||
"cannot apply NoteDb updates for change %s;"
|
||||
+ " change meta ref does not match %s",
|
||||
@@ -504,7 +504,7 @@ public class NoteDbUpdateManager {
|
||||
|
||||
Account.Id accountId = u.getAccountId();
|
||||
if (!expectedState.areDraftsUpToDate(
|
||||
allUsersRepo.cmds, accountId)) {
|
||||
allUsersRepo.cmds.getRepoRefCache(), accountId)) {
|
||||
throw new OrmConcurrencyException(String.format(
|
||||
"cannot apply NoteDb updates for change %s;"
|
||||
+ " draft ref for account %s does not match %s",
|
||||
|
||||
Reference in New Issue
Block a user