StalenessChecker: Expose some more public methods

Used by our custom index backend implementation, and may be useful for
others as well (e.g. to write an offline staleness checker).

Change-Id: Icb48993da89fae60c62663347dbdbb48667e0a94
This commit is contained in:
Dave Borowitz
2016-12-01 11:21:02 -05:00
parent d1091dfc81
commit 1d7a71f11f
2 changed files with 31 additions and 25 deletions

View File

@@ -84,7 +84,7 @@ public class StalenessChecker {
this.db = db; this.db = db;
} }
boolean isStale(Change.Id id) throws IOException, OrmException { public boolean isStale(Change.Id id) throws IOException, OrmException {
ChangeIndex i = indexes.getSearchIndex(); ChangeIndex i = indexes.getSearchIndex();
if (i == null) { if (i == null) {
return false; // No index; caller couldn't do anything if it is stale. return false; // No index; caller couldn't do anything if it is stale.
@@ -100,17 +100,24 @@ public class StalenessChecker {
return true; // Not in index, but caller wants it to be. return true; // Not in index, but caller wants it to be.
} }
ChangeData cd = result.get(); ChangeData cd = result.get();
if (reviewDbChangeIsStale( return isStale(repoManager, id, cd.change(),
cd.change(), ChangeNotes.readOneReviewDbChange(db.get(), id),
ChangeNotes.readOneReviewDbChange(db.get(), cd.getId()))) { parseStates(cd), parsePatterns(cd));
return true; }
}
return isStale(repoManager, id, parseStates(cd), parsePatterns(cd)); public static boolean isStale(
GitRepositoryManager repoManager,
Change.Id id,
Change indexChange,
@Nullable Change reviewDbChange,
SetMultimap<Project.NameKey, RefState> states,
Multimap<Project.NameKey, RefStatePattern> patterns) {
return reviewDbChangeIsStale(indexChange, reviewDbChange)
|| refsAreStale(repoManager, id, states, patterns);
} }
@VisibleForTesting @VisibleForTesting
static boolean isStale(GitRepositoryManager repoManager, static boolean refsAreStale(GitRepositoryManager repoManager,
Change.Id id, Change.Id id,
SetMultimap<Project.NameKey, RefState> states, SetMultimap<Project.NameKey, RefState> states,
Multimap<Project.NameKey, RefStatePattern> patterns) { Multimap<Project.NameKey, RefStatePattern> patterns) {
@@ -118,7 +125,7 @@ public class StalenessChecker {
Sets.union(states.keySet(), patterns.keySet()); Sets.union(states.keySet(), patterns.keySet());
for (Project.NameKey p : projects) { for (Project.NameKey p : projects) {
if (isStale(repoManager, id, p, states, patterns)) { if (refsAreStale(repoManager, id, p, states, patterns)) {
return true; return true;
} }
} }
@@ -145,8 +152,7 @@ public class StalenessChecker {
return parseStates(cd.getRefStates()); return parseStates(cd.getRefStates());
} }
@VisibleForTesting public static SetMultimap<Project.NameKey, RefState> parseStates(
static SetMultimap<Project.NameKey, RefState> parseStates(
Iterable<byte[]> states) { Iterable<byte[]> states) {
RefState.check(states != null, null); RefState.check(states != null, null);
SetMultimap<Project.NameKey, RefState> result = HashMultimap.create(); SetMultimap<Project.NameKey, RefState> result = HashMultimap.create();
@@ -188,7 +194,7 @@ public class StalenessChecker {
return result; return result;
} }
private static boolean isStale(GitRepositoryManager repoManager, private static boolean refsAreStale(GitRepositoryManager repoManager,
Change.Id id, Project.NameKey project, Change.Id id, Project.NameKey project,
SetMultimap<Project.NameKey, RefState> allStates, SetMultimap<Project.NameKey, RefState> allStates,
Multimap<Project.NameKey, RefStatePattern> allPatterns) { Multimap<Project.NameKey, RefStatePattern> allPatterns) {

View File

@@ -16,7 +16,7 @@ package com.google.gerrit.server.index.change;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assert_; import static com.google.common.truth.Truth.assert_;
import static com.google.gerrit.server.index.change.StalenessChecker.isStale; import static com.google.gerrit.server.index.change.StalenessChecker.refsAreStale;
import static com.google.gerrit.testutil.TestChanges.newChange; import static com.google.gerrit.testutil.TestChanges.newChange;
import static java.nio.charset.StandardCharsets.UTF_8; import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toList;
@@ -189,7 +189,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
// Not stale. // Not stale.
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref1, id1.name()),
@@ -199,7 +199,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
// Wrong ref value. // Wrong ref value.
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, SHA1), P1, RefState.create(ref1, SHA1),
@@ -209,7 +209,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
// Swapped repos. // Swapped repos.
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id2.name()), P1, RefState.create(ref1, id2.name()),
@@ -222,7 +222,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
ObjectId id3 = tr1.update(ref3, tr1.commit().message("commit 3")); ObjectId id3 = tr1.update(ref3, tr1.commit().message("commit 3"));
tr1.update(ref3, id3); tr1.update(ref3, id3);
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref1, id1.name()),
@@ -232,7 +232,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
// Ignore ref not mentioned. // Ignore ref not mentioned.
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name())), P1, RefState.create(ref1, id1.name())),
@@ -241,7 +241,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
// One ref wrong. // One ref wrong.
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref1, id1.name()),
@@ -257,7 +257,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
// ref1 is only ref matching pattern. // ref1 is only ref matching pattern.
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name())), P1, RefState.create(ref1, id1.name())),
@@ -269,7 +269,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
String ref2 = "refs/heads/bar"; String ref2 = "refs/heads/bar";
ObjectId id2 = tr1.update(ref2, tr1.commit().message("commit 2")); ObjectId id2 = tr1.update(ref2, tr1.commit().message("commit 2"));
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name())), P1, RefState.create(ref1, id1.name())),
@@ -277,7 +277,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
P1, RefStatePattern.create("refs/heads/*")))) P1, RefStatePattern.create("refs/heads/*"))))
.isTrue(); .isTrue();
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref1, id1.name()),
@@ -295,7 +295,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
// ref1 is only ref matching pattern. // ref1 is only ref matching pattern.
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name())), P1, RefState.create(ref1, id1.name())),
@@ -307,7 +307,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
String ref3 = "refs/other/foo"; String ref3 = "refs/other/foo";
ObjectId id3 = tr1.update(ref3, tr1.commit().message("commit 3")); ObjectId id3 = tr1.update(ref3, tr1.commit().message("commit 3"));
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name())), P1, RefState.create(ref1, id1.name())),
@@ -315,7 +315,7 @@ public class StalenessCheckerTest extends GerritBaseTests {
P1, RefStatePattern.create("refs/*/foo")))) P1, RefStatePattern.create("refs/*/foo"))))
.isTrue(); .isTrue();
assertThat( assertThat(
isStale( refsAreStale(
repoManager, C, repoManager, C,
ImmutableSetMultimap.of( ImmutableSetMultimap.of(
P1, RefState.create(ref1, id1.name()), P1, RefState.create(ref1, id1.name()),