You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ge...@apache.org on 2020/06/18 16:50:16 UTC
[lucene-solr] 02/02: SOLR-14566: Add rid to all distributed search
requests
This is an automated email from the ASF dual-hosted git repository.
gerlowskija pushed a commit to branch SOLR_14566_add_now_to_coordinator_logging2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 3eec81431a77d47b0c08e1841462f6ae90cccd48
Author: Jason Gerlowski <ja...@lucidworks.com>
AuthorDate: Thu Jun 18 12:45:20 2020 -0400
SOLR-14566: Add rid to all distributed search requests
---
solr/CHANGES.txt | 3 ++
.../solr/handler/component/DebugComponent.java | 27 +--------------
.../solr/handler/component/SearchHandler.java | 34 ++++++++++++++++++-
.../solr/handler/component/DebugComponentTest.java | 38 +++++++++++-----------
4 files changed, 56 insertions(+), 46 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 80c467a..8f6ce3c 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -141,6 +141,9 @@ Improvements
* SOLR-14442: bin/solr and bin\solr.cmd invoke jstack <SOLR_PID> before forceful termination, if jstack is available.
Also, bin\solr.cmd executes forceful termination even port is unbinded already (Christine Poerschke via Mikhail Khludnev).
+* SOLR-14566: Request ID's ('rid') are now added by default to distributed search requests, and can be used to correlate logs
+ from the receiving coordinator node with those from downstream shard requests. (Jason Gerlowski)
+
Optimizations
---------------------
* SOLR-8306: Do not collect expand documents when expand.rows=0 (Marshall Sanders, Amelia Henderson)
diff --git a/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java b/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
index 31fbf99..a88d356 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
@@ -56,11 +56,6 @@ public class DebugComponent extends SearchComponent
public static final String COMPONENT_NAME = "debug";
/**
- * A counter to ensure that no RID is equal, even if they fall in the same millisecond
- */
- private static final AtomicLong ridCounter = new AtomicLong();
-
- /**
* Map containing all the possible stages as key and
* the corresponding readable purpose as value
*/
@@ -148,29 +143,9 @@ public class DebugComponent extends SearchComponent
}
}
-
private void doDebugTrack(ResponseBuilder rb) {
- String rid = getRequestId(rb.req);
+ final String rid = rb.req.getParams().get(CommonParams.REQUEST_ID);
rb.addDebug(rid, "track", CommonParams.REQUEST_ID);//to see it in the response
- rb.rsp.addToLog(CommonParams.REQUEST_ID, rid); //to see it in the logs of the landing core
-
- }
-
- public static String getRequestId(SolrQueryRequest req) {
- String rid = req.getParams().get(CommonParams.REQUEST_ID);
- if(rid == null || "".equals(rid)) {
- rid = generateRid(req);
- ModifiableSolrParams params = new ModifiableSolrParams(req.getParams());
- params.add(CommonParams.REQUEST_ID, rid);//add rid to the request so that shards see it
- req.setParams(params);
- }
- return rid;
- }
-
- @SuppressForbidden(reason = "Need currentTimeMillis, only used for naming")
- private static String generateRid(SolrQueryRequest req) {
- String hostName = req.getCore().getCoreContainer().getHostName();
- return hostName + "-" + req.getCore().getName() + "-" + System.currentTimeMillis() + "-" + ridCounter.getAndIncrement();
}
@Override
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
index 2051b20..b3fb438 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
@@ -24,7 +24,9 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.index.ExitableDirectoryReader;
import org.apache.lucene.search.TotalHits;
import org.apache.solr.client.solrj.SolrServerException;
@@ -36,6 +38,7 @@ import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.core.CloseHook;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.PluginInfo;
@@ -70,6 +73,11 @@ public class SearchHandler extends RequestHandlerBase implements SolrCoreAware,
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+ /**
+ * A counter to ensure that no RID is equal, even if they fall in the same millisecond
+ */
+ private static final AtomicLong ridCounter = new AtomicLong();
+
protected volatile List<SearchComponent> components;
private ShardHandlerFactory shardHandlerFactory;
private PluginInfo shfInfo;
@@ -298,7 +306,8 @@ public class SearchHandler extends RequestHandlerBase implements SolrCoreAware,
final RTimerTree timer = rb.isDebug() ? req.getRequestTimer() : null;
final ShardHandler shardHandler1 = getAndPrepShardHandler(req, rb); // creates a ShardHandler object only if it's needed
-
+
+ tagRequestWithRequestId(rb);
if (timer == null) {
// non-debugging prepare phase
for( SearchComponent c : components ) {
@@ -500,6 +509,29 @@ public class SearchHandler extends RequestHandlerBase implements SolrCoreAware,
}
}
+ private void tagRequestWithRequestId(ResponseBuilder rb) {
+ String rid = getRequestId(rb.req);
+ if (StringUtils.isBlank(rb.req.getParams().get(CommonParams.REQUEST_ID))) {
+ ModifiableSolrParams params = new ModifiableSolrParams(rb.req.getParams());
+ params.add(CommonParams.REQUEST_ID, rid);//add rid to the request so that shards see it
+ rb.req.setParams(params);
+ }
+ if (rb.isDistrib) {
+ rb.rsp.addToLog(CommonParams.REQUEST_ID, rid); //to see it in the logs of the landing core
+ }
+ }
+
+ public static String getRequestId(SolrQueryRequest req) {
+ String rid = req.getParams().get(CommonParams.REQUEST_ID);
+ return StringUtils.isNotBlank(rid) ? rid : generateRid(req);
+ }
+
+ @SuppressForbidden(reason = "Need currentTimeMillis, only used for naming")
+ private static String generateRid(SolrQueryRequest req) {
+ String hostName = req.getCore().getCoreContainer().getHostName();
+ return hostName + "-" + req.getCore().getName() + "-" + System.currentTimeMillis() + "-" + ridCounter.getAndIncrement();
+ }
+
//////////////////////// SolrInfoMBeans methods //////////////////////
@Override
diff --git a/solr/core/src/test/org/apache/solr/handler/component/DebugComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/DebugComponentTest.java
index 0062fcf..0dca101 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/DebugComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/DebugComponentTest.java
@@ -36,6 +36,9 @@ import org.junit.Test;
*
**/
public class DebugComponentTest extends SolrTestCaseJ4 {
+
+ private static final String ANY_RID = "ANY_RID";
+
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig.xml", "schema.xml");
@@ -205,6 +208,8 @@ public class DebugComponentTest extends SolrTestCaseJ4 {
req = req("q", "test query", "distrib", "true");
rb = new ResponseBuilder(req, new SolrQueryResponse(), components);
rb.isDistrib = true;
+ addRequestId(rb, ANY_RID);
+
//expecting the same results with debugQuery=true or debug=track
if(random().nextBoolean()) {
rb.setDebug(true);
@@ -217,7 +222,7 @@ public class DebugComponentTest extends SolrTestCaseJ4 {
rb.setDebugResults(random().nextBoolean());
}
component.prepare(rb);
- ensureRidPresent(rb, null);
+ ensureTrackRecordsRid(rb, ANY_RID);
}
req = req("q", "test query", "distrib", "true", CommonParams.REQUEST_ID, "123");
@@ -225,24 +230,7 @@ public class DebugComponentTest extends SolrTestCaseJ4 {
rb.isDistrib = true;
rb.setDebug(true);
component.prepare(rb);
- ensureRidPresent(rb, "123");
- }
-
- @SuppressWarnings("unchecked")
- private void ensureRidPresent(ResponseBuilder rb, String expectedRid) {
- SolrQueryRequest req = rb.req;
- SolrQueryResponse resp = rb.rsp;
- //a generated request ID should be added to the request
- String rid = req.getParams().get(CommonParams.REQUEST_ID);
- if(expectedRid == null) {
- assertTrue(rid + " Doesn't match expected pattern.", Pattern.matches(".*-collection1-[0-9]*-[0-9]+", rid));
- } else {
- assertEquals("Expecting " + expectedRid + " but found " + rid, expectedRid, rid);
- }
- //The request ID is added to the debug/track section
- assertEquals(rid, ((NamedList<Object>) rb.getDebugInfo().get("track")).get(CommonParams.REQUEST_ID));
- //RID must be added to the toLog, so that it's included in the main request log
- assertEquals(rid, resp.getToLog().get(CommonParams.REQUEST_ID));
+ ensureTrackRecordsRid(rb, "123");
}
//
@@ -279,4 +267,16 @@ public class DebugComponentTest extends SolrTestCaseJ4 {
);
}
+
+ @SuppressWarnings("unchecked")
+ private void ensureTrackRecordsRid(ResponseBuilder rb, String expectedRid) {
+ final String rid = (String) ((NamedList<Object>) rb.getDebugInfo().get("track")).get(CommonParams.REQUEST_ID);
+ assertEquals("Expecting " + expectedRid + " but found " + rid, expectedRid, rid);
+ }
+
+ private void addRequestId(ResponseBuilder rb, String requestId) {
+ ModifiableSolrParams params = new ModifiableSolrParams(rb.req.getParams());
+ params.add(CommonParams.REQUEST_ID, requestId);
+ rb.req.setParams(params);
+ }
}