diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java index c6d94aaeacb..23ce0c99b37 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java @@ -56,6 +56,8 @@ public abstract class BaseHttpClusterStateProvider implements ClusterStateProvider { private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + protected static final String SYS_PROP_CACHE_TIMEOUT_SECONDS = "solr.solrj.cache.timeout.sec"; + private String urlScheme; private List configuredNodes; volatile Set liveNodes; // initially null then never null @@ -65,7 +67,7 @@ public abstract class BaseHttpClusterStateProvider implements ClusterStateProvid long aliasesTimestamp = 0; // the liveNodes and aliases cache will be invalidated after 5 secs - private int cacheTimeout = EnvUtils.getPropertyAsInteger("solr.solrj.cache.timeout.sec", 5); + private int cacheTimeout = EnvUtils.getPropertyAsInteger(SYS_PROP_CACHE_TIMEOUT_SECONDS, 5); volatile boolean liveNodeReloadingScheduled = false; private final ScheduledExecutorService liveNodeReloadingService = diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java index a6d9c13e129..fb721a06ea2 100644 --- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java +++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java @@ -16,6 +16,7 @@ */ package org.apache.solr.client.solrj.impl; +import static org.apache.solr.client.solrj.impl.BaseHttpClusterStateProvider.SYS_PROP_CACHE_TIMEOUT_SECONDS; import static org.apache.solr.client.solrj.impl.CloudSolrClient.RouteResponse; import java.io.IOException; @@ -256,6 +257,14 @@ public void testAliasHandling() throws Exception { @Test @LogLevel("org.apache.solr.servlet.HttpSolrCall=DEBUG") public void testHttpCspPerf() throws Exception { + // This ensures CH2SC is caching cluster status by counting the number of logged calls to the + // admin endpoint. Too many calls to CLUSTERSTATUS might mean insufficient caching and + // performance regressions! + + // BaseHttpClusterStateProvider has a background job that pre-fetches data from CLUSTERSTATUS + // on timed intervals. This can pollute this test, so we set the interval very high to + // prevent it from running. + System.setProperty(SYS_PROP_CACHE_TIMEOUT_SECONDS, "" + Integer.MAX_VALUE); String collectionName = "HTTPCSPTEST"; CollectionAdminRequest.createCollection(collectionName, "conf", 2, 1) diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/ClusterStateProviderTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/ClusterStateProviderTest.java index 18f990b41c7..7af3580e687 100644 --- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/ClusterStateProviderTest.java +++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/ClusterStateProviderTest.java @@ -17,6 +17,7 @@ package org.apache.solr.client.solrj.impl; +import static org.apache.solr.client.solrj.impl.BaseHttpClusterStateProvider.SYS_PROP_CACHE_TIMEOUT_SECONDS; import static org.apache.solr.common.util.URLUtil.getNodeNameForBaseUrl; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.equalTo; @@ -84,7 +85,7 @@ public static void setupCluster() throws Exception { .resolve("conf")) .configure(); cluster.waitForAllNodes(30); - System.setProperty("solr.solrj.cache.timeout.sec", "1"); + System.setProperty(SYS_PROP_CACHE_TIMEOUT_SECONDS, "1"); } @After