Merge branch 'stable-2.16'
* stable-2.16:
Do not use QueryProcessor multiple times
Change-Id: I41b06d20e484f6b61e1bd226571cac9abb078340
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/QueryChangesHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/QueryChangesHealthCheck.java
index 2f5d115..331ef21 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/QueryChangesHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/QueryChangesHealthCheck.java
@@ -21,6 +21,7 @@
import com.google.gerrit.server.util.ManualRequestContext;
import com.google.gerrit.server.util.OneOffRequestContext;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig;
import java.util.List;
@@ -30,7 +31,8 @@
@Singleton
public class QueryChangesHealthCheck extends AbstractHealthCheck {
private static final Logger log = LoggerFactory.getLogger(QueryChangesHealthCheck.class);
- private final QueryChanges queryChanges;
+ private final Provider<QueryChanges> queryChangesProvider;
+ private final HealthCheckConfig config;
private final int limit;
private final OneOffRequestContext oneOffCtx;
@@ -38,20 +40,25 @@
public QueryChangesHealthCheck(
ListeningExecutorService executor,
HealthCheckConfig config,
- QueryChanges queryChanges,
+ Provider<QueryChanges> queryChangesProvider,
OneOffRequestContext oneOffCtx) {
super(executor, config, QUERYCHANGES);
- this.queryChanges = queryChanges;
+ this.queryChangesProvider = queryChangesProvider;
+ this.config = config;
this.limit = config.getLimit(QUERYCHANGES);
- queryChanges.setLimit(limit);
- queryChanges.addQuery(config.getQuery(QUERYCHANGES));
- queryChanges.setStart(0);
+
this.oneOffCtx = oneOffCtx;
}
@Override
protected Result doCheck() throws Exception {
try (ManualRequestContext ctx = oneOffCtx.open()) {
+
+ QueryChanges queryChanges = this.queryChangesProvider.get();
+ queryChanges.setLimit(limit);
+ queryChanges.addQuery(config.getQuery(QUERYCHANGES));
+ queryChanges.setStart(0);
+
List<?> changes = queryChanges.apply(null);
if (changes == null) {
log.warn("Cannot query changes: received a null list of results");
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
index 3f70903..331c784 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
@@ -91,6 +91,18 @@
assertCheckResult(respPayload, QUERYCHANGES, "passed");
}
+ @Test
+ public void shouldReturnQueryChangesMultipleTimesCheck() throws Exception {
+ createChange("refs/for/master");
+ getHealthCheckStatus();
+ RestResponse resp = getHealthCheckStatus();
+ resp.assertOK();
+
+ JsonObject respPayload = gson.fromJson(resp.getReader(), JsonObject.class);
+
+ assertCheckResult(respPayload, QUERYCHANGES, "passed");
+ }
+
private RestResponse getHealthCheckStatus() throws IOException {
return adminRestSession.get("/config/server/healthcheck~status");
}