You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2017/07/10 21:41:39 UTC
lucene-solr:master: SOLR-10898: Fix SOLR-10898 to not deterministicly
fail 1/512 runs
Repository: lucene-solr
Updated Branches:
refs/heads/master bf7bd2b3b -> 20153595a
SOLR-10898: Fix SOLR-10898 to not deterministicly fail 1/512 runs
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/20153595
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/20153595
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/20153595
Branch: refs/heads/master
Commit: 20153595a4248c34784b0892d83e58ae259c94f0
Parents: bf7bd2b
Author: Chris Hostetter <ho...@apache.org>
Authored: Mon Jul 10 14:41:33 2017 -0700
Committer: Chris Hostetter <ho...@apache.org>
Committed: Mon Jul 10 14:41:33 2017 -0700
----------------------------------------------------------------------
solr/CHANGES.txt | 2 +
.../cloud/TestRandomRequestDistribution.java | 64 +++++++++++++-------
2 files changed, 45 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/20153595/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 9ea9827..c6100b3 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -482,6 +482,8 @@ Other Changes
* SOLR-11021: The elevate.xml config-file is made optional in the ElevationComponent.
The default configset doesn't ship with a elevate.xml file anymore (Varun Thacker)
+* SOLR-10898: Fix SOLR-10898 to not deterministicly fail 1/512 runs (hossman)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/20153595/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java b/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
index 31b8b9c..d3fc679 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
@@ -19,9 +19,12 @@ package org.apache.solr.cloud;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+
import com.codahale.metrics.Counter;
import org.apache.lucene.util.TestUtil;
@@ -41,7 +44,6 @@ import org.apache.solr.common.util.Utils;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrCore;
import org.apache.solr.metrics.SolrMetricManager;
-import org.apache.solr.request.SolrRequestHandler;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -86,6 +88,25 @@ public class TestRandomRequestDistribution extends AbstractFullDistribZkTestBase
cloudClient.getZkStateReader().forceUpdateCollection("b1x1");
+ // get direct access to the metrics counters for each core/replica we're interested to monitor them
+ final Map<String,Counter> counters = new LinkedHashMap<>();
+ for (JettySolrRunner runner : jettys) {
+ CoreContainer container = runner.getCoreContainer();
+ SolrMetricManager metricManager = container.getMetricManager();
+ for (SolrCore core : container.getCores()) {
+ if ("a1x2".equals(core.getCoreDescriptor().getCollectionName())) {
+ String registry = core.getCoreMetricManager().getRegistryName();
+ Counter cnt = metricManager.counter(null, registry, "requests", "QUERY./select");
+ // sanity check
+ assertEquals(core.getName() + " has already recieved some requests?",
+ 0, cnt.getCount());
+ counters.put(core.getName(), cnt);
+ }
+ }
+ }
+ assertEquals("Sanity Check: we know there should be 2 replicas", 2, counters.size());
+
+ // send queries to the node that doesn't host any core/replica and see where it routes them
ClusterState clusterState = cloudClient.getZkStateReader().getClusterState();
DocCollection b1x1 = clusterState.getCollection("b1x1");
Collection<Replica> replicas = b1x1.getSlice("shard1").getReplicas();
@@ -94,29 +115,30 @@ public class TestRandomRequestDistribution extends AbstractFullDistribZkTestBase
if (!baseUrl.endsWith("/")) baseUrl += "/";
try (HttpSolrClient client = getHttpSolrClient(baseUrl + "a1x2", 2000, 5000)) {
+ long expectedTotalRequests = 0;
+ Set<String> uniqueCoreNames = new LinkedHashSet<>();
+
log.info("Making requests to " + baseUrl + "a1x2");
- for (int i = 0; i < 10; i++) {
+ while (uniqueCoreNames.size() < counters.keySet().size() && expectedTotalRequests < 1000L) {
+ expectedTotalRequests++;
client.query(new SolrQuery("*:*"));
- }
- }
- Map<String, Integer> shardVsCount = new HashMap<>();
- for (JettySolrRunner runner : jettys) {
- CoreContainer container = runner.getCoreContainer();
- SolrMetricManager metricManager = container.getMetricManager();
- for (SolrCore core : container.getCores()) {
- String registry = core.getCoreMetricManager().getRegistryName();
- Counter cnt = metricManager.counter(null, registry, "requests", "QUERY./select");
- SolrRequestHandler select = core.getRequestHandler("");
-// long c = (long) select.getStatistics().get("requests");
- shardVsCount.put(core.getName(), (int) cnt.getCount());
+ long actualTotalRequests = 0;
+ for (Map.Entry<String,Counter> e : counters.entrySet()) {
+ final long coreCount = e.getValue().getCount();
+ actualTotalRequests += coreCount;
+ if (0 < coreCount) {
+ uniqueCoreNames.add(e.getKey());
+ }
+ }
+ assertEquals("Sanity Check: Num Queries So Far Doesn't Match Total????",
+ expectedTotalRequests, actualTotalRequests);
}
- }
-
- log.info("Shard count map = " + shardVsCount);
-
- for (Map.Entry<String, Integer> entry : shardVsCount.entrySet()) {
- assertTrue("Shard " + entry.getKey() + " received all 10 requests", entry.getValue() != 10);
+ log.info("Total requests: " + expectedTotalRequests);
+ assertEquals("either request randomization code is broken of this test seed is really unlucky, " +
+ "Gave up waiting for requests to hit every core at least once after " +
+ expectedTotalRequests + " requests",
+ uniqueCoreNames.size(), counters.size());
}
}