Swap the whole GitRepositoryManagerModule Use functionality provided in [1] in order to provide support fot setups with multi-base repositories functionality. [1] https://gerrit-review.googlesource.com/c/gerrit/+/326778 Change-Id: I4464bdc97977b4f0d5d64e34b2b16dbdaff8f128
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java index 0697306..5a222c3 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java +++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedGitRepositoryManager.java
@@ -14,6 +14,7 @@ package com.googlesource.gerrit.plugins.gerritcachedrefdb; +import com.google.common.annotations.VisibleForTesting; import com.google.gerrit.entities.Project; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.git.LocalDiskRepositoryManager; @@ -49,4 +50,9 @@ public SortedSet<Project.NameKey> list() { return repoManager.list(); } + + @VisibleForTesting + LocalDiskRepositoryManager getRepoManager() { + return repoManager; + } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java index 3c857cf..21300d4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java +++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java
@@ -17,13 +17,27 @@ import static com.google.inject.Scopes.SINGLETON; import com.google.common.flogger.FluentLogger; -import com.google.gerrit.extensions.config.FactoryModule; import com.google.gerrit.extensions.registration.DynamicItem; +import com.google.gerrit.lifecycle.LifecycleModule; +import com.google.gerrit.server.ModuleImpl; +import com.google.gerrit.server.config.RepositoryConfig; import com.google.gerrit.server.git.GitRepositoryManager; +import com.google.gerrit.server.git.GitRepositoryManagerModule; +import com.google.gerrit.server.git.LocalDiskRepositoryManager; +import com.google.gerrit.server.git.MultiBaseLocalDiskRepositoryManager; +import com.google.inject.Inject; -public class LibDbModule extends FactoryModule { +@ModuleImpl(name = GitRepositoryManagerModule.MANAGER_MODULE) +public class LibDbModule extends LifecycleModule { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private final RepositoryConfig repoConfig; + + @Inject + LibDbModule(RepositoryConfig repoConfig) { + this.repoConfig = repoConfig; + } + @Override protected void configure() { DynamicItem.itemOf(binder(), RefByNameCache.class); @@ -36,6 +50,12 @@ factory(CachedRefRepository.Factory.class); bind(GitRepositoryManager.class).to(GerritCachedGitRepositoryManager.class); + + // part responsible for physical repositories handling + listener().to(LocalDiskRepositoryManager.Lifecycle.class); + if (!repoConfig.getAllBasePaths().isEmpty()) { + bind(LocalDiskRepositoryManager.class).to(MultiBaseLocalDiskRepositoryManager.class); + } logger.atInfo().log("DB library loaded"); } }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedRefDbIT.java b/src/test/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedRefDbIT.java index bf2ca31..a6168da 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedRefDbIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/GerritCachedRefDbIT.java
@@ -21,6 +21,8 @@ import com.google.gerrit.acceptance.UseLocalDisk; import com.google.gerrit.acceptance.config.GerritConfig; import com.google.gerrit.server.git.GitRepositoryManager; +import com.google.gerrit.server.git.LocalDiskRepositoryManager; +import com.google.gerrit.server.git.MultiBaseLocalDiskRepositoryManager; import com.google.inject.Inject; import org.junit.Test; @@ -40,6 +42,23 @@ value = "com.googlesource.gerrit.plugins.gerritcachedrefdb.LibSysModule") public void shouldBeAbleToInstallGerritCachedGitRepoManager() { assertThat(gitRepoManager).isInstanceOf(GerritCachedGitRepositoryManager.class); + assertThat(((GerritCachedGitRepositoryManager) gitRepoManager).getRepoManager().getClass()) + .isEqualTo(LocalDiskRepositoryManager.class); + assertThat(refByNameCacheWrapper.cache()).isInstanceOf(RefByNameGerritCache.class); + } + + @Test + @GerritConfig( + name = "gerrit.installDbModule", + value = "com.googlesource.gerrit.plugins.gerritcachedrefdb.LibDbModule") + @GerritConfig( + name = "gerrit.installModule", + value = "com.googlesource.gerrit.plugins.gerritcachedrefdb.LibSysModule") + @GerritConfig(name = "repository.r1.basePath", value = "/tmp/git1") + public void shouldMultiBaseRepoManagerBeUsedWhenConfigured() { + assertThat(gitRepoManager).isInstanceOf(GerritCachedGitRepositoryManager.class); + assertThat(((GerritCachedGitRepositoryManager) gitRepoManager).getRepoManager()) + .isInstanceOf(MultiBaseLocalDiskRepositoryManager.class); assertThat(refByNameCacheWrapper.cache()).isInstanceOf(RefByNameGerritCache.class); } }