Set RefByNameGerritCache to DynamicItem on Gerrit start
Change-Id: I908f7a1484feef2a871612c067bf7c182bfa0b09
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 5787abe..3c857cf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibDbModule.java
@@ -14,6 +14,8 @@
package com.googlesource.gerrit.plugins.gerritcachedrefdb;
+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;
@@ -25,6 +27,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);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibSysModule.java b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibSysModule.java
index e6dab8f..7e93baf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibSysModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gerritcachedrefdb/LibSysModule.java
@@ -14,19 +14,49 @@
package com.googlesource.gerrit.plugins.gerritcachedrefdb;
-import static com.google.inject.Scopes.SINGLETON;
-
import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.extensions.registration.DynamicItem;
-import com.google.inject.AbstractModule;
+import com.google.gerrit.extensions.registration.RegistrationHandle;
+import com.google.gerrit.lifecycle.LifecycleModule;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
-public class LibSysModule extends AbstractModule {
+public class LibSysModule extends LifecycleModule {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@Override
protected void configure() {
install(RefByNameGerritCache.module());
- DynamicItem.bind(binder(), RefByNameCache.class).to(RefByNameGerritCache.class).in(SINGLETON);
+ listener().to(RefByNameGerritCacheSetter.class);
logger.atInfo().log("Sys library loaded");
}
+
+ @Singleton
+ private static class RefByNameGerritCacheSetter implements LifecycleListener {
+ private final RefByNameGerritCache refByNameGerritCache;
+ private final DynamicItem<RefByNameCache> cacheRef;
+ private RegistrationHandle handle;
+
+ @Inject
+ RefByNameGerritCacheSetter(
+ RefByNameGerritCache refByNameGerritCache, DynamicItem<RefByNameCache> cacheRef) {
+ this.refByNameGerritCache = refByNameGerritCache;
+ this.cacheRef = cacheRef;
+ }
+
+ @Override
+ public void start() {
+ handle = cacheRef.set(refByNameGerritCache, "gerrit");
+ logger.atInfo().log("Gerrit-cache-backed RefDB loaded");
+ }
+
+ @Override
+ public void stop() {
+ if (handle != null) {
+ handle.remove();
+ logger.atInfo().log("Gerrit-cache-backed RefDB unloaded");
+ }
+ }
+ }
}