diff options
author | Hugo Arès <hugo.ares@ericsson.com> | 2016-09-23 11:56:51 +0200 |
---|---|---|
committer | Hugo Arès <hugo.ares@ericsson.com> | 2016-09-23 13:14:28 +0200 |
commit | d06b79e3fbd057c9317ade970a370dad77b0d3c3 (patch) | |
tree | fca5382444ac5f133e2d72b419360f9832033835 | |
parent | 4f122114a88a1c41d11414c51fda5c426fac6447 (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.java | 2 | ||||
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java | 34 |
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); + } } } |