This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new 9b0309d3932 Benchmark fixes (#4194)s
9b0309d3932 is described below
commit 9b0309d3932a27c315b8f7c51eb2038c7d652776
Author: David Smiley <[email protected]>
AuthorDate: Thu Mar 19 22:29:27 2026 -0400
Benchmark fixes (#4194)s
---
.../java/org/apache/solr/bench/SolrBenchState.java | 6 ++++
.../apache/solr/bench/generators/IntegersDSL.java | 17 +++++++----
.../org/apache/solr/bench/search/FilterCache.java | 34 ++++++++++++----------
.../solr/bench/search/QueryResponseWriters.java | 13 +++++++--
.../apache/solr/bench/search/StreamingSearch.java | 16 +++++-----
.../configs/cloud-minimal/conf/schema.xml | 2 +-
6 files changed, 55 insertions(+), 33 deletions(-)
diff --git a/solr/benchmark/src/java/org/apache/solr/bench/SolrBenchState.java
b/solr/benchmark/src/java/org/apache/solr/bench/SolrBenchState.java
index 1aade6389dd..0a7e9b1f2be 100755
--- a/solr/benchmark/src/java/org/apache/solr/bench/SolrBenchState.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/SolrBenchState.java
@@ -47,6 +47,7 @@ import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.ObjectReleaseTracker;
import org.apache.solr.common.util.SolrNamedThreadFactory;
import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.embedded.JettySolrRunner;
@@ -154,6 +155,11 @@ public class SolrBenchState {
IOUtils.closeQuietly(client);
cluster.shutdown();
logClusterDirectorySize();
+
+ String orr = ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty();
+ if (orr != null) {
+ throw new AssertionError("ObjectReleaseTracker found unreleased
objects:\n" + orr);
+ }
}
private void logClusterDirectorySize() throws IOException {
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/generators/IntegersDSL.java
b/solr/benchmark/src/java/org/apache/solr/bench/generators/IntegersDSL.java
index 6a41c10c317..89e6d3ad24f 100644
--- a/solr/benchmark/src/java/org/apache/solr/bench/generators/IntegersDSL.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/generators/IntegersDSL.java
@@ -116,7 +116,7 @@ public class IntegersDSL {
private final Gen<Integer> integers;
/** The Cardinality start. */
- Integer cardinalityStart;
+ volatile Integer cardinalityStart;
/**
* Instantiates a new Integer max cardinality solr gen.
@@ -132,13 +132,18 @@ public class IntegersDSL {
@Override
public Integer generate(SolrRandomnessSource in) {
- if (cardinalityStart == null) {
- cardinalityStart =
- SolrGenerate.range(0, Integer.MAX_VALUE - maxCardinality -
1).generate(in);
+ Integer localStart = cardinalityStart;
+ if (localStart == null) {
+ synchronized (this) {
+ localStart = cardinalityStart;
+ if (localStart == null) {
+ localStart = SolrGenerate.range(0, Integer.MAX_VALUE -
maxCardinality - 1).generate(in);
+ cardinalityStart = localStart;
+ }
+ }
}
- long seed =
- SolrGenerate.range(cardinalityStart, cardinalityStart +
maxCardinality - 1).generate(in);
+ long seed = SolrGenerate.range(localStart, localStart + maxCardinality -
1).generate(in);
return integers.generate(new SplittableRandomSource(new
SplittableRandom(seed)));
}
}
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java
index f736aa4bf80..cf90548f296 100644
--- a/solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java
@@ -19,9 +19,11 @@ package org.apache.solr.bench.search;
import static org.apache.solr.bench.generators.SourceDSL.integers;
import java.io.IOException;
-import java.net.HttpURLConnection;
import java.net.URI;
-import java.nio.charset.StandardCharsets;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.util.stream.Collectors;
import org.apache.solr.bench.BaseBenchState;
import org.apache.solr.bench.Docs;
import org.apache.solr.bench.SolrBenchState;
@@ -115,19 +117,21 @@ public class FilterCache {
public void dumpMetrics(SolrBenchState solrBenchState) {
// TODO add a verbose flag
- String url =
- solrBenchState.nodes.get(0)
- +
"/admin/metrics?prefix=CACHE.searcher.filterCache&omitHeader=true";
- HttpURLConnection conn = null;
- try {
- conn = (HttpURLConnection) URI.create(url).toURL().openConnection();
- conn.connect();
- BaseBenchState.log(
- new String(conn.getInputStream().readAllBytes(),
StandardCharsets.UTF_8));
- } catch (IOException e) {
- // ignored
- } finally {
- if (conn != null) conn.disconnect();
+ String url = solrBenchState.nodes.getFirst() +
"/admin/metrics?category=CACHE?wt=prometheus";
+ try (HttpClient client = HttpClient.newHttpClient()) {
+ HttpRequest request =
HttpRequest.newBuilder().uri(URI.create(url)).GET().build();
+ HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
+
+ // Filter to only lines containing filterCache metrics
+ String filteredMetrics =
+ response
+ .body()
+ .lines()
+ .filter(line -> line.contains("filterCache"))
+ .collect(Collectors.joining("\n"));
+ BaseBenchState.log(filteredMetrics);
+ } catch (IOException | InterruptedException e) {
+ throw new RuntimeException(e);
}
}
}
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
index 6929d2810a5..6c804c60afc 100644
---
a/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
+++
b/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
@@ -22,6 +22,8 @@ import static
org.apache.solr.bench.generators.SourceDSL.integers;
import static org.apache.solr.bench.generators.SourceDSL.strings;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import org.apache.solr.bench.Docs;
import org.apache.solr.bench.SolrBenchState;
import org.apache.solr.client.solrj.SolrServerException;
@@ -29,6 +31,7 @@ import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.response.InputStreamResponseParser;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.NamedList;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
@@ -56,7 +59,7 @@ public class QueryResponseWriters {
@State(Scope.Benchmark)
public static class BenchState {
- @Param({CommonParams.JAVABIN, CommonParams.JSON, "cbor", "smile", "xml",
"raw"})
+ @Param({CommonParams.JAVABIN, CommonParams.JSON, "cbor", "smile", "xml"})
String wt;
private int docs = 100;
@@ -91,6 +94,12 @@ public class QueryResponseWriters {
@Benchmark
public Object query(BenchState benchState, SolrBenchState solrBenchState)
throws SolrServerException, IOException {
- return solrBenchState.client.request(benchState.q, collection);
+ NamedList<Object> response = solrBenchState.client.request(benchState.q,
collection);
+ // consume the stream completely
+ try (InputStream responseStream =
+ (InputStream) response.get(InputStreamResponseParser.STREAM_KEY)) {
+ responseStream.transferTo(OutputStream.nullOutputStream());
+ }
+ return response;
}
}
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/StreamingSearch.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/StreamingSearch.java
index c354377eaf2..5797682c63e 100644
--- a/solr/benchmark/src/java/org/apache/solr/bench/search/StreamingSearch.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/search/StreamingSearch.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.solr.bench.Docs;
import org.apache.solr.bench.SolrBenchState;
+import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.io.SolrClientCache;
import org.apache.solr.client.solrj.io.Tuple;
@@ -34,6 +35,7 @@ import org.apache.solr.client.solrj.io.stream.TupleStream;
import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.IOUtils;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
@@ -67,7 +69,7 @@ public class StreamingSearch {
private String zkHost;
private ModifiableSolrParams params;
private StreamContext streamContext;
- private HttpJettySolrClient httpJettySolrClient;
+ private SolrClient httpSolrClient;
@Setup(Level.Trial)
public void setup(SolrBenchState solrBenchState) throws Exception {
@@ -95,11 +97,9 @@ public class StreamingSearch {
@Setup(Level.Iteration)
public void setupIteration(SolrBenchState solrBenchState)
throws SolrServerException, IOException {
- SolrClientCache solrClientCache;
- // TODO tune params?
- var client = new
HttpJettySolrClient.Builder().useHttp1_1(useHttp1).build();
- solrClientCache = new SolrClientCache(client);
-
+ var httpSolrClient = new
HttpJettySolrClient.Builder().useHttp1_1(useHttp1).build();
+ this.httpSolrClient = httpSolrClient;
+ SolrClientCache solrClientCache = new SolrClientCache(httpSolrClient);
streamContext = new StreamContext();
streamContext.setSolrClientCache(solrClientCache);
}
@@ -107,9 +107,7 @@ public class StreamingSearch {
@TearDown(Level.Iteration)
public void teardownIt() {
streamContext.getSolrClientCache().close();
- if (httpJettySolrClient != null) {
- httpJettySolrClient.close();
- }
+ IOUtils.closeQuietly(httpSolrClient);
}
}
diff --git a/solr/benchmark/src/resources/configs/cloud-minimal/conf/schema.xml
b/solr/benchmark/src/resources/configs/cloud-minimal/conf/schema.xml
index e517aea5930..b1851c3c290 100644
--- a/solr/benchmark/src/resources/configs/cloud-minimal/conf/schema.xml
+++ b/solr/benchmark/src/resources/configs/cloud-minimal/conf/schema.xml
@@ -36,7 +36,7 @@
</fieldType>
<!-- for versioning -->
- <field name="_version_" type="long" indexed="true" stored="true"/>
+ <field name="_version_" type="long" indexed="true" stored="true"
docValues="true"/>
<field name="_root_" type="string" indexed="true" stored="true"
multiValued="false" required="false"/>
<field name="id" type="string" indexed="true" stored="true"/>
<field name="text" type="text" indexed="true" stored="false"/>