Add missing Singleton to ActiveWokersCheck and DeadlockCheck The ActiveWorkersCheck was triggering the creation of a new check for every incoming REST-API call, causing potential deadlocks because of the creation of the DropWizard's MetricMaker. As a consequence, the Gerrit instance could have ran out of incoming HTTP threads. See as example stack trace: HTTP GET /config/server/healthcheck~status java.lang.Thread.State: BLOCKED (on object monitor) at com.google.gerrit.metrics.dropwizard.DropWizardMetricMaker.newCounter(DropWizardMetricMaker.java:142) - waiting to lock <0x00007f828e8b80b0> (a com.google.gerrit.metrics.dropwizard.DropWizardMetricMaker) at com.google.gerrit.server.plugins.PluginMetricMaker.newCounter(PluginMetricMaker.java:55) at com.googlesource.gerrit.plugins.healthcheck.HealthCheckMetrics.getFailureCounterMetric(HealthCheckMetrics.java:33) at com.googlesource.gerrit.plugins.healthcheck.check.AbstractHealthCheck.<init>(AbstractHealthCheck.java:54) at com.googlesource.gerrit.plugins.healthcheck.check.ActiveWorkersCheck.<init>(ActiveWorkersCheck.java:46) Change-Id: I947b46b58e1d44840b3a44f740627e55dc3194aa
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ActiveWorkersCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ActiveWorkersCheck.java index 8684ef8..5fe83e4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ActiveWorkersCheck.java +++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ActiveWorkersCheck.java
@@ -22,10 +22,12 @@ import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.ThreadSettingsConfig; import com.google.inject.Inject; +import com.google.inject.Singleton; import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig; import java.util.Optional; import org.eclipse.jgit.lib.Config; +@Singleton public class ActiveWorkersCheck extends AbstractHealthCheck { public static final String ACTIVE_WORKERS_METRIC_NAME =
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/DeadlockCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/DeadlockCheck.java index 3d4b672..9caca0e 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/DeadlockCheck.java +++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/DeadlockCheck.java
@@ -20,9 +20,11 @@ import com.google.common.util.concurrent.ListeningExecutorService; import com.google.gerrit.metrics.MetricMaker; import com.google.inject.Inject; +import com.google.inject.Singleton; import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig; import java.util.Optional; +@Singleton public class DeadlockCheck extends AbstractHealthCheck { public static final String DEADLOCKED_THREADS_METRIC_NAME =