Merge branch 'stable-3.11'
* stable-3.11:
Disable replication lag tracking by configuration
Change-Id: I1c32657335b5aea1def4de7c866008d7b80d80f2
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
index 0ae4738..a7a05d3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
@@ -56,6 +56,7 @@
private static final String REF_DATABASE = "ref-database";
private static final String REPLICATION_LAG_REFRESH_INTERVAL = "replicationLagRefreshInterval";
+ private static final String REPLICATION_LAG_ENABLED = "replicationLagEnabled";
private static final Duration REPLICATION_LAG_REFRESH_INTERVAL_DEFAULT = Duration.ofSeconds(60);
private static final String REPLICATION_CONFIG = "replication.config";
@@ -77,6 +78,7 @@
private final Supplier<ReplicationFilter> replicationFilter;
private final Config multiSiteConfig;
private final Supplier<Duration> replicationLagRefreshInterval;
+ private final Supplier<Boolean> replicationLagEnabled;
@Inject
Configuration(SitePaths sitePaths) {
@@ -110,6 +112,12 @@
REPLICATION_LAG_REFRESH_INTERVAL,
REPLICATION_LAG_REFRESH_INTERVAL_DEFAULT.toMillis(),
TimeUnit.MILLISECONDS)));
+ replicationLagEnabled =
+ memoize(
+ () ->
+ lazyMultiSiteCfg
+ .get()
+ .getBoolean(REF_DATABASE, null, REPLICATION_LAG_ENABLED, true));
}
public Config getMultiSiteConfig() {
@@ -148,6 +156,10 @@
return replicationLagRefreshInterval.get();
}
+ public boolean replicationLagEnabled() {
+ return replicationLagEnabled.get();
+ }
+
public Collection<Message> validate() {
return replicationConfigValidation.get();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/ReplicationStatus.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/ReplicationStatus.java
index 0253588..eb07cce 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/ReplicationStatus.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/ReplicationStatus.java
@@ -232,4 +232,8 @@
public void onProjectDeleted(Event event) {
removeProjectFromReplicationLagMetrics(Project.nameKey(event.getProjectName()));
}
+
+ public boolean replicationLagEnabled() {
+ return config.replicationLagEnabled();
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetrics.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetrics.java
index bb971ff..ef71862 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetrics.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetrics.java
@@ -70,28 +70,31 @@
.setRate()
.setUnit("errors"),
stringField(SUBSCRIBER_FAILURE_COUNTER, "Subscriber failed to consume messages count"));
- metricMaker.newCallbackMetric(
- REPLICATION_LAG_SEC,
- Long.class,
- new Description("Replication lag (sec)").setGauge().setUnit(Description.Units.SECONDS),
- replicationStatus::getMaxLag);
- metricMaker.newCallbackMetric(
- REPLICATION_LAG_MSEC,
- Long.class,
- new Description("Replication lag (msec)")
- .setGauge()
- .setUnit(Description.Units.MILLISECONDS),
- replicationStatus::getMaxLagMillis);
- CallbackMetric1<String, Long> metrics =
- metricMaker.newCallbackMetric(
- SubscriberMetrics.REPLICATION_LAG_MSEC_PROJECT,
- Long.class,
- new Description("Per-project replication lag (msec)")
- .setGauge()
- .setUnit(Description.Units.MILLISECONDS),
- PROJECT_NAME);
- metricMaker.newTrigger(metrics, replicationStatus.replicationLagMetricPerProject(metrics));
+ if (replicationStatus.replicationLagEnabled()) {
+ metricMaker.newCallbackMetric(
+ REPLICATION_LAG_SEC,
+ Long.class,
+ new Description("Replication lag (sec)").setGauge().setUnit(Description.Units.SECONDS),
+ replicationStatus::getMaxLag);
+ metricMaker.newCallbackMetric(
+ REPLICATION_LAG_MSEC,
+ Long.class,
+ new Description("Replication lag (msec)")
+ .setGauge()
+ .setUnit(Description.Units.MILLISECONDS),
+ replicationStatus::getMaxLagMillis);
+
+ CallbackMetric1<String, Long> metrics =
+ metricMaker.newCallbackMetric(
+ SubscriberMetrics.REPLICATION_LAG_MSEC_PROJECT,
+ Long.class,
+ new Description("Per-project replication lag (msec)")
+ .setGauge()
+ .setUnit(Description.Units.MILLISECONDS),
+ PROJECT_NAME);
+ metricMaker.newTrigger(metrics, replicationStatus.replicationLagMetricPerProject(metrics));
+ }
}
/**
@@ -131,6 +134,9 @@
}
public void updateReplicationStatusMetrics(Event event) {
+ if (!replicationStatus.replicationLagEnabled()) {
+ return;
+ }
if (event instanceof RefReplicationDoneEvent
|| event instanceof RefReplicatedEvent
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/event/EventModule.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/event/EventModule.java
index 8c67823..3d43a24 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/event/EventModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/event/EventModule.java
@@ -47,8 +47,10 @@
OptionalBinder<ProjectVersionRefUpdate> projectVersionRefUpdateBinder =
OptionalBinder.newOptionalBinder(binder(), ProjectVersionRefUpdate.class);
if (configuration.getSharedRefDbConfiguration().getSharedRefDb().isEnabled()) {
- DynamicSet.bind(binder(), GitBatchRefUpdateListener.class)
- .to(ProjectVersionRefUpdateImpl.class);
+ if (configuration.replicationLagEnabled()) {
+ DynamicSet.bind(binder(), GitBatchRefUpdateListener.class)
+ .to(ProjectVersionRefUpdateImpl.class);
+ }
projectVersionRefUpdateBinder.setBinding().to(ProjectVersionRefUpdateImpl.class);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/http/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/http/HttpModule.java
index 26bfb53..336bc86 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/http/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/http/HttpModule.java
@@ -31,7 +31,7 @@
@Override
protected void configureServlets() {
- if (config.event().synchronize()) {
+ if (config.event().synchronize() && config.replicationLagEnabled()) {
serve(String.format("/%s", LAG_ENDPOINT_SEGMENT)).with(ReplicationStatusServlet.class);
}
}
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index 7cd3f5c..63469f3 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -91,6 +91,8 @@
`metric=plugins/multi-site/multi_site/subscriber/subscriber_message_consumer_failure_counter/subscriber_msg_consumer_poll_failure_counter, type=com.codahale.metrics.Meter`
+### Replication lag
+
* Subscriber replication lag (sec behind the producer)
`metric=site/multi_site/subscriber/subscriber_replication_status/sec_behind, type=com.google.gerrit.metrics.dropwizard.CallbackMetricImpl`
@@ -98,3 +100,6 @@
* Subscriber replication lag (millisec behind the producer)
`metric=site/multi_site/subscriber/subscriber_replication_status/msec_behind, type=com.google.gerrit.metrics.dropwizard.CallbackMetricImpl`
+
+> **NOTE**: The replication lag metrics are omitted when `ref-database.replicationLagEnabled` configuration
+> setting in `multi-site.config` is set to `false`.
\ No newline at end of file
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 0485d5b..7547fd9 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -95,10 +95,18 @@
: Enable the use of a shared ref-database
Defaults: true
+```ref-database.replicationLagEnabled```
+: Enable the metrics to trace the auto-replication lag between sites
+ updating the `refs/multi-site/version/*` to the _epoch_ timestamp in
+ milliseconds. Please note that the `replication-lag` REST-API is also
+ disabled if this setting is false.
+ Defaults: true
+
```ref-database.replicationLagRefreshInterval```
: Enable the auto-refresh of the metrics to trace the auto-replication
lag by polling on a regular basis. Set to zero for disabling the polling
- mechanism.
+ mechanism. Disabled automatically when `ref-database.replicationLagEnable`
+ is set to false.
Defaults: 60 min
```ref-database.enforcementRules.<policy>```
diff --git a/src/main/resources/Documentation/http-endpoints.md b/src/main/resources/Documentation/http-endpoints.md
index ff56fdf..3774a38 100644
--- a/src/main/resources/Documentation/http-endpoints.md
+++ b/src/main/resources/Documentation/http-endpoints.md
@@ -39,4 +39,6 @@
* limit=LIMIT
maximum number of projects to return
-*default:10*
\ No newline at end of file
+*default:10*
+
+> **NOTE** This endpoint is disabled when `ref-database.replicationLagEnabled` is set to `false`.
\ No newline at end of file