From d06b79e3fbd057c9317ade970a370dad77b0d3c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Ar=C3=A8s?= Date: Fri, 23 Sep 2016 11:56:51 +0200 Subject: [PATCH] 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 --- .../java/com/google/gerrit/pgm/Daemon.java | 2 +- .../server/git/SearchingChangeCacheImpl.java | 32 ++++++++++++++----- 2 files changed, 25 insertions(+), 9 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>() {}) - .maximumWeight(0) - .loader(Loader.class); + if (slave) { + bind(SearchingChangeCacheImpl.class) + .toProvider(Providers. of(null)); + } else { + cache(ID_CACHE, + Project.NameKey.class, + new TypeLiteral>() {}) + .maximumWeight(0) + .loader(Loader.class); - bind(SearchingChangeCacheImpl.class); - DynamicSet.bind(binder(), GitReferenceUpdatedListener.class) - .to(SearchingChangeCacheImpl.class); + bind(SearchingChangeCacheImpl.class); + DynamicSet.bind(binder(), GitReferenceUpdatedListener.class) + .to(SearchingChangeCacheImpl.class); + } } }