summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Arès <hugo.ares@ericsson.com>2016-09-23 11:56:51 +0200
committerHugo Arès <hugo.ares@ericsson.com>2016-09-23 13:14:28 +0200
commitd06b79e3fbd057c9317ade970a370dad77b0d3c3 (patch)
treefca5382444ac5f133e2d72b419360f9832033835
parent4f122114a88a1c41d11414c51fda5c426fac6447 (diff)
Fix NullPointerException when cloning from slave
VisibleRefFilter is using secondary index to evaluate the visibility of refs which cannot work in slave mode since there is no secondary index. SearchingChangeCacheImpl is the class used by VisibleRefFilter and it's nullable so bind it to null in slave mode to force VisibleRefFilter to not rely on that cache. Change-Id: I5af65f0992b317b4bbd3ce050f3a7907aad713a4
-rw-r--r--gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java2
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java34
2 files changed, 26 insertions, 10 deletions
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
index 7ee3cde5bd..3ff6451057 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
@@ -350,7 +350,7 @@ public class Daemon extends SiteProgram {
modules.add(new DiffExecutorModule());
modules.add(new MimeUtil2Module());
modules.add(cfgInjector.getInstance(GerritGlobalModule.class));
- modules.add(new SearchingChangeCacheImpl.Module());
+ modules.add(new SearchingChangeCacheImpl.Module(slave));
modules.add(new InternalAccountDirectory.Module());
modules.add(new DefaultCacheFactory.Module());
if (emailModule != null) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java
index 63a49a194e..54ec2494e3 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java
@@ -36,6 +36,7 @@ import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
import com.google.inject.name.Named;
+import com.google.inject.util.Providers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,17 +53,32 @@ public class SearchingChangeCacheImpl implements GitReferenceUpdatedListener {
static final String ID_CACHE = "changes";
public static class Module extends CacheModule {
+ private final boolean slave;
+
+ public Module() {
+ this(false);
+ }
+
+ public Module(boolean slave) {
+ this.slave = slave;
+ }
+
@Override
protected void configure() {
- cache(ID_CACHE,
- Project.NameKey.class,
- new TypeLiteral<List<CachedChange>>() {})
- .maximumWeight(0)
- .loader(Loader.class);
-
- bind(SearchingChangeCacheImpl.class);
- DynamicSet.bind(binder(), GitReferenceUpdatedListener.class)
- .to(SearchingChangeCacheImpl.class);
+ if (slave) {
+ bind(SearchingChangeCacheImpl.class)
+ .toProvider(Providers.<SearchingChangeCacheImpl> of(null));
+ } else {
+ cache(ID_CACHE,
+ Project.NameKey.class,
+ new TypeLiteral<List<CachedChange>>() {})
+ .maximumWeight(0)
+ .loader(Loader.class);
+
+ bind(SearchingChangeCacheImpl.class);
+ DynamicSet.bind(binder(), GitReferenceUpdatedListener.class)
+ .to(SearchingChangeCacheImpl.class);
+ }
}
}