Merge branch 'stable-3.5' into stable-3.6
* stable-3.5:
Set version to 3.4.8.4
Configure the set of refs prefixes to be ignored by the global-refdb
Bump the global-refdb version to 3.4.8.3
Make SharedRefDatabaseWrapper a singleton
Add warning when the GlobalRefDatabase is not injected
Bump the global-refdb version to 3.4.8.2
Add default implementation for the global-refdb logger
Change-Id: I03935585c462511c59e2e5ab3db435365a97f640
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
index 3086c26..c86a346 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
@@ -158,7 +158,8 @@
}
private Boolean isRefToBeIgnored(String refName) {
- Boolean isRefToBeIgnored = ignoredRefs.contains(refName);
+ Boolean isRefToBeIgnored =
+ ignoredRefs.stream().anyMatch(ignoredRefPrefix -> refName.startsWith(ignoredRefPrefix));
logger.atFine().log("Is project version update? %s", isRefToBeIgnored);
return isRefToBeIgnored;
}
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDatabaseWrapper.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDatabaseWrapper.java
index 4349193..c3b41e8 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDatabaseWrapper.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDatabaseWrapper.java
@@ -19,10 +19,12 @@
import com.gerritforge.gerrit.globalrefdb.GlobalRefDbSystemError;
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.NoopSharedRefDatabase;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.flogger.FluentLogger;
import com.google.gerrit.entities.Project;
import com.google.gerrit.extensions.registration.DynamicItem;
import com.google.gerrit.metrics.Timer0.Context;
import com.google.inject.Inject;
+import com.google.inject.Singleton;
import java.util.Optional;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
@@ -32,7 +34,9 @@
* binding. Such instance is bound optionally and, in case no explicit binding is registered a
* {@link NoopSharedRefDatabase} instance is wrapped instead.
*/
+@Singleton
public class SharedRefDatabaseWrapper implements GlobalRefDatabase {
+ private static final FluentLogger log = FluentLogger.forEnclosingClass();
private static final GlobalRefDatabase NOOP_REFDB = new NoopSharedRefDatabase();
@Inject(optional = true)
@@ -131,6 +135,16 @@
}
private GlobalRefDatabase sharedRefDb() {
- return Optional.ofNullable(sharedRefDbDynamicItem).map(di -> di.get()).orElse(NOOP_REFDB);
+ if (sharedRefDbDynamicItem == null) {
+ log.atWarning().log("DynamicItem<GlobalRefDatabase> has not been injected");
+ }
+
+ return Optional.ofNullable(sharedRefDbDynamicItem)
+ .map(di -> di.get())
+ .orElseGet(
+ () -> {
+ log.atWarning().log("Using NOOP_REFDB");
+ return NOOP_REFDB;
+ });
}
}
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
index a607cdc..986175a 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
@@ -21,6 +21,7 @@
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedRefEnforcement.EnforcePolicy;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
import java.io.IOException;
@@ -102,9 +103,11 @@
public static final String SECTION = "ref-database";
public static final String ENABLE_KEY = "enabled";
public static final String SUBSECTION_ENFORCEMENT_RULES = "enforcementRules";
+ public static final String IGNORED_REFS_PREFIXES = "ignoredRefsPrefixes";
private final boolean enabled;
private final Multimap<EnforcePolicy, String> enforcementRules;
+ private final ImmutableSet<String> ignoredRefsPrefixes;
private SharedRefDatabase(Supplier<Config> cfg) {
enabled = getBoolean(cfg, SECTION, null, ENABLE_KEY, false);
@@ -113,6 +116,8 @@
enforcementRules.putAll(
policy, getList(cfg, SECTION, SUBSECTION_ENFORCEMENT_RULES, policy.name()));
}
+
+ ignoredRefsPrefixes = ImmutableSet.copyOf(getList(cfg, SECTION, null, IGNORED_REFS_PREFIXES));
}
/**
@@ -146,6 +151,16 @@
return enforcementRules;
}
+ /**
+ * Returns the set of refs prefixes that are ignored during the validation and enforcement of
+ * the global refdb.
+ *
+ * @return Set of ignored prefixes of ignored refs
+ */
+ public ImmutableSet<String> getIgnoredRefsPrefixes() {
+ return ignoredRefsPrefixes;
+ }
+
private List<String> getList(
Supplier<Config> cfg, String section, String subsection, String name) {
return ImmutableList.copyOf(cfg.get().getStringList(section, subsection, name));
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefLogger.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefLogger.java
index d2b1822..858ba18 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefLogger.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefLogger.java
@@ -14,9 +14,11 @@
package com.gerritforge.gerrit.globalrefdb.validation;
+import com.google.inject.ImplementedBy;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
+@ImplementedBy(Log4jSharedRefLogger.class)
public interface SharedRefLogger {
/**