You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jb...@apache.org on 2020/05/14 14:04:31 UTC
[lucene-solr] 01/02: SOLR-14407: Handle shards.purpose in the
postlogs tool
This is an automated email from the ASF dual-hosted git repository.
jbernste pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit fe2135963c250643cabb85864a74116fb38e57ed
Author: Joel Bernstein <jb...@apache.org>
AuthorDate: Wed May 13 09:56:53 2020 -0400
SOLR-14407: Handle shards.purpose in the postlogs tool
---
.../java/org/apache/solr/util/SolrLogPostTool.java | 71 +++++++++++++++++++++-
.../org/apache/solr/util/SolrLogPostToolTest.java | 6 +-
2 files changed, 74 insertions(+), 3 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/util/SolrLogPostTool.java b/solr/core/src/java/org/apache/solr/util/SolrLogPostTool.java
index 249146d..a1b67dd 100644
--- a/solr/core/src/java/org/apache/solr/util/SolrLogPostTool.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrLogPostTool.java
@@ -18,9 +18,12 @@ package org.apache.solr.util;
import java.io.*;
import java.nio.charset.Charset;
+import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.net.URLDecoder;
+import java.util.Map;
+import java.util.TreeMap;
import java.util.UUID;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
@@ -29,6 +32,8 @@ import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
+import org.apache.solr.handler.component.ShardRequest;
+
/**
@@ -309,6 +314,7 @@ public class SolrLogPostTool {
return doc;
}
+
private SolrInputDocument parseNewSearch(String line) {
SolrInputDocument doc = new SolrInputDocument();
@@ -492,7 +498,7 @@ public class SolrLogPostTool {
doc.addField("shards_s", "true");
}
- if(parts[0].equals("ids") && ! isRTGRequest(doc)) {
+ if(parts[0].equals("ids") && !isRTGRequest(doc)) {
doc.addField("ids_s", "true");
}
@@ -510,13 +516,25 @@ public class SolrLogPostTool {
String dr = URLDecoder.decode(parts[1], Charset.defaultCharset());
doc.addField("facet_s", dr);
}
- }
+ if(parts[0].equals("shards.purpose")) {
+ try {
+ int purpose = Integer.parseInt(parts[1]);
+ String[] purposes = getRequestPurposeNames(purpose);
+ for (String p : purposes) {
+ doc.addField("purpose_ss", p);
+ }
+ } catch(Throwable e) {
+ //We'll just sit on this for now and not interrupt the load for this one field.
+ }
+ }
+ }
//Special params used to determine what stage a query is.
//So we populate with defaults.
//The absence of the distrib params means its a distributed query.
+
if(doc.getField("distrib_s") == null) {
doc.addField("distrib_s", "true");
}
@@ -538,4 +556,53 @@ public class SolrLogPostTool {
return "/get".equals(path.getValue());
}
}
+
+ private static final Map<Integer, String> purposes;
+ protected static final String UNKNOWN_VALUE = "Unknown";
+ private static final String[] purposeUnknown = new String[] { UNKNOWN_VALUE };
+
+ public static String[] getRequestPurposeNames(Integer reqPurpose) {
+ if (reqPurpose != null) {
+ int valid = 0;
+ for (Map.Entry<Integer, String>entry : purposes.entrySet()) {
+ if ((reqPurpose & entry.getKey()) != 0) {
+ valid++;
+ }
+ }
+ if (valid == 0) {
+ return purposeUnknown;
+ } else {
+ String[] result = new String[valid];
+ int i = 0;
+ for (Map.Entry<Integer, String>entry : purposes.entrySet()) {
+ if ((reqPurpose & entry.getKey()) != 0) {
+ result[i] = entry.getValue();
+ i++;
+ }
+ }
+ return result;
+ }
+ }
+ return purposeUnknown;
+ }
+
+ static {
+ Map<Integer, String> map = new TreeMap<>();
+ map.put(ShardRequest.PURPOSE_PRIVATE, "PRIVATE");
+ map.put(ShardRequest.PURPOSE_GET_TOP_IDS, "GET_TOP_IDS");
+ map.put(ShardRequest.PURPOSE_REFINE_TOP_IDS, "REFINE_TOP_IDS");
+ map.put(ShardRequest.PURPOSE_GET_FACETS, "GET_FACETS");
+ map.put(ShardRequest.PURPOSE_REFINE_FACETS, "REFINE_FACETS");
+ map.put(ShardRequest.PURPOSE_GET_FIELDS, "GET_FIELDS");
+ map.put(ShardRequest.PURPOSE_GET_HIGHLIGHTS, "GET_HIGHLIGHTS");
+ map.put(ShardRequest.PURPOSE_GET_DEBUG, "GET_DEBUG");
+ map.put(ShardRequest.PURPOSE_GET_STATS, "GET_STATS");
+ map.put(ShardRequest.PURPOSE_GET_TERMS, "GET_TERMS");
+ map.put(ShardRequest.PURPOSE_GET_TOP_GROUPS, "GET_TOP_GROUPS");
+ map.put(ShardRequest.PURPOSE_GET_MLT_RESULTS, "GET_MLT_RESULTS");
+ map.put(ShardRequest.PURPOSE_REFINE_PIVOT_FACETS, "REFINE_PIVOT_FACETS");
+ map.put(ShardRequest.PURPOSE_SET_TERM_STATS, "SET_TERM_STATS");
+ map.put(ShardRequest.PURPOSE_GET_TERM_STATS, "GET_TERM_STATS");
+ purposes = Collections.unmodifiableMap(map);
+ }
}
\ No newline at end of file
diff --git a/solr/core/src/test/org/apache/solr/util/SolrLogPostToolTest.java b/solr/core/src/test/org/apache/solr/util/SolrLogPostToolTest.java
index 9f9322a..10f7b8c 100644
--- a/solr/core/src/test/org/apache/solr/util/SolrLogPostToolTest.java
+++ b/solr/core/src/test/org/apache/solr/util/SolrLogPostToolTest.java
@@ -33,7 +33,7 @@ public class SolrLogPostToolTest extends SolrTestCaseJ4 {
@Test
public void testQueryRecord() throws Exception{
- String record = "2019-12-09 15:05:01.931 INFO (qtp2103763750-21) [c:logs4 s:shard1 r:core_node2 x:logs4_shard1_replica_n1] o.a.s.c.S.Request [logs4_shard1_replica_n1] webapp=/solr path=/select params={q=*:*&_=1575835181759&isShard=true&wt=javabin&distrib=false} hits=234868 status=0 QTime=8\n";
+ String record = "2019-12-09 15:05:01.931 INFO (qtp2103763750-21) [c:logs4 s:shard1 r:core_node2 x:logs4_shard1_replica_n1] o.a.s.c.S.Request [logs4_shard1_replica_n1] webapp=/solr path=/select params={q=*:*&_=1575835181759&shards.purpose=36&isShard=true&wt=javabin&distrib=false} hits=234868 status=0 QTime=8\n";
List<SolrInputDocument> docs = readDocs(record);
assertEquals(docs.size(), 1);
SolrInputDocument doc = docs.get(0);
@@ -53,6 +53,8 @@ public class SolrLogPostToolTest extends SolrTestCaseJ4 {
SolrInputField isShard = doc.getField("isShard_s");
SolrInputField ids = doc.getField("ids_s");
SolrInputField shards = doc.getField("shards_s");
+ SolrInputField purpose = doc.getField("purpose_ss");
+ Object[] purposes = purpose.getValues().toArray();
assertEquals(query.getValue(), "*:*");
assertEquals(date.getValue(), "2019-12-09T15:05:01.931");
@@ -69,6 +71,8 @@ public class SolrLogPostToolTest extends SolrTestCaseJ4 {
assertEquals(isShard.getValue(), "true");
assertEquals(ids.getValue(), "false");
assertEquals(shards.getValue(), "false");
+ assertEquals("GET_TOP_IDS", purposes[0].toString());
+ assertEquals("REFINE_FACETS", purposes[1].toString());
}
@Test