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