Allow binding the module without GitRepositoryManager When using the cached-refdb with other libModules that are willing to bind the GitRepositoryManager (e.g., multi-site) it is fundamental to keep on registering the factories needed for the libModule to keep on working as usual. Introduce a new vanilla libModule so that it can be bound without registering the GitRepositoryManager. Change-Id: I3df17c92ee162a89ba32d7364fcbc8777d259ac3
diff --git a/README.md b/README.md index bdcc00d..1643f01 100644 --- a/README.md +++ b/README.md
@@ -76,6 +76,19 @@ com.googlesource.gerrit.plugins.cachedrefdb.LibSysModule ``` +> NOTE: There are situations where the binding of the module to the Gerrit's +> GitRepositoryManager is not desired; e.g., when using this module together +> with others that are trying to override it at the same time. +> +> It is possible to just load the module using the following two options: +> +> ``` +> git config --file ${GERRIT_SITE}/etc/gerrit.config --add gerrit.installDbModule\ +> com.googlesource.gerrit.plugins.cachedrefdb.LibModule +> git config --file ${GERRIT_SITE}/etc/gerrit.config --add gerrit.installModule\ +> com.googlesource.gerrit.plugins.cachedrefdb.LibSysModule +> ``` + By default cache can hold up to `1024` refs which will not be sufficient for any production site therefore one can configure it through the standard Gerrit cache configuration means e.g.
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/LibDbModule.java b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/LibDbModule.java index 109126d..2bbf063 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/LibDbModule.java +++ b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/LibDbModule.java
@@ -14,10 +14,7 @@ package com.googlesource.gerrit.plugins.cachedrefdb; -import static com.google.inject.Scopes.SINGLETON; - import com.google.common.flogger.FluentLogger; -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; @@ -40,14 +37,7 @@ @Override protected void configure() { - DynamicItem.itemOf(binder(), RefByNameCache.class); - DynamicItem.bind(binder(), RefByNameCache.class).to(NoOpRefByNameCache.class).in(SINGLETON); - - factory(RefUpdateWithCacheUpdate.Factory.class); - factory(RefRenameWithCacheUpdate.Factory.class); - factory(BatchRefUpdateWithCacheUpdate.Factory.class); - factory(CachedRefDatabase.Factory.class); - factory(CachedRefRepository.Factory.class); + install(new LibModule()); bind(GitRepositoryManager.class).to(CachedGitRepositoryManager.class); @@ -56,6 +46,6 @@ if (!repoConfig.getAllBasePaths().isEmpty()) { bind(LocalDiskRepositoryManager.class).to(MultiBaseLocalDiskRepositoryManager.class); } - logger.atInfo().log("DB library loaded"); + logger.atInfo().log("GitRepositoryManager bind completed"); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/LibModule.java b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/LibModule.java new file mode 100644 index 0000000..8e9eb71 --- /dev/null +++ b/src/main/java/com/googlesource/gerrit/plugins/cachedrefdb/LibModule.java
@@ -0,0 +1,39 @@ +// Copyright (C) 2022 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.googlesource.gerrit.plugins.cachedrefdb; + +import static com.google.inject.Scopes.SINGLETON; + +import com.google.common.flogger.FluentLogger; +import com.google.gerrit.extensions.registration.DynamicItem; +import com.google.gerrit.lifecycle.LifecycleModule; + +public class LibModule extends LifecycleModule { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + + @Override + protected void configure() { + DynamicItem.itemOf(binder(), RefByNameCache.class); + DynamicItem.bind(binder(), RefByNameCache.class).to(NoOpRefByNameCache.class).in(SINGLETON); + + factory(RefUpdateWithCacheUpdate.Factory.class); + factory(RefRenameWithCacheUpdate.Factory.class); + factory(BatchRefUpdateWithCacheUpdate.Factory.class); + factory(CachedRefDatabase.Factory.class); + factory(CachedRefRepository.Factory.class); + + logger.atInfo().log("Ref repository and db library loaded"); + } +}