Skip to content

Commit aed1c3e

Browse files
dsmileyclaude
andauthored
SOLR-18126 Benchmark, refactor: MiniClusterState -> SolrBenchState (#4196)
Renames bench/MiniClusterState.java to bench/SolrBenchState.java, and flattens its structure, which had an inner class. Two lifecycle methods containing "miniCluster" in the name were replaced with "solr" to be generic, and I improved javadocs slightly. This is a preparatory refactoring step on a short journey to solr/benchmark supporting multiple backends (not just MiniSolrCloudCluster). Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f955c30 commit aed1c3e

11 files changed

Lines changed: 696 additions & 743 deletions

File tree

solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java

Lines changed: 0 additions & 587 deletions
This file was deleted.

solr/benchmark/src/java/org/apache/solr/bench/SolrBenchState.java

Lines changed: 580 additions & 0 deletions
Large diffs are not rendered by default.

solr/benchmark/src/java/org/apache/solr/bench/index/CloudIndexing.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import java.util.Iterator;
2525
import java.util.concurrent.TimeUnit;
2626
import org.apache.solr.bench.Docs;
27-
import org.apache.solr.bench.MiniClusterState;
27+
import org.apache.solr.bench.SolrBenchState;
2828
import org.apache.solr.client.solrj.request.UpdateRequest;
2929
import org.apache.solr.common.SolrInputDocument;
3030
import org.openjdk.jmh.annotations.Benchmark;
@@ -114,22 +114,20 @@ private void preGenerate() {
114114
}
115115

116116
@Setup(Level.Trial)
117-
public void doSetup(MiniClusterState.MiniClusterBenchState miniClusterState) throws Exception {
117+
public void doSetup(SolrBenchState solrBenchState) throws Exception {
118118
preGenerate();
119119

120120
System.setProperty("mergePolicyFactory", "org.apache.solr.index.NoMergePolicyFactory");
121-
miniClusterState.startMiniCluster(nodeCount);
122-
miniClusterState.createCollection(COLLECTION, numShards, numReplicas);
121+
solrBenchState.startSolr(nodeCount);
122+
solrBenchState.createCollection(COLLECTION, numShards, numReplicas);
123123
}
124124
}
125125

126126
@Benchmark
127-
public Object indexDoc(MiniClusterState.MiniClusterBenchState miniClusterState, BenchState state)
128-
throws Exception {
127+
public Object indexDoc(SolrBenchState solrBenchState, BenchState state) throws Exception {
129128
UpdateRequest updateRequest = new UpdateRequest();
130129
updateRequest.add(state.getNextDoc());
131-
final var url =
132-
miniClusterState.nodes.get(miniClusterState.getRandom().nextInt(state.nodeCount));
133-
return miniClusterState.client.requestWithBaseUrl(url, updateRequest, BenchState.COLLECTION);
130+
final var url = solrBenchState.nodes.get(solrBenchState.getRandom().nextInt(state.nodeCount));
131+
return solrBenchState.client.requestWithBaseUrl(url, updateRequest, BenchState.COLLECTION);
134132
}
135133
}

solr/benchmark/src/java/org/apache/solr/bench/search/ExitableDirectoryReaderSearch.java

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import java.util.Set;
2525
import java.util.concurrent.TimeUnit;
2626
import org.apache.solr.bench.Docs;
27-
import org.apache.solr.bench.MiniClusterState;
27+
import org.apache.solr.bench.SolrBenchState;
2828
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
2929
import org.apache.solr.client.solrj.request.QueryRequest;
3030
import org.apache.solr.client.solrj.response.QueryResponse;
@@ -67,9 +67,8 @@ public static class BenchState {
6767
int WORDS = NUM_DOCS / 100;
6868

6969
@Setup(Level.Trial)
70-
public void setupTrial(MiniClusterState.MiniClusterBenchState miniClusterState)
71-
throws Exception {
72-
miniClusterState.setUseHttp1(true);
70+
public void setupTrial(SolrBenchState solrBenchState) throws Exception {
71+
solrBenchState.setUseHttp1(true);
7372
System.setProperty("documentCache.enabled", "false");
7473
System.setProperty("queryResultCache.enabled", "false");
7574
System.setProperty("filterCache.enabled", "false");
@@ -78,9 +77,9 @@ public void setupTrial(MiniClusterState.MiniClusterBenchState miniClusterState)
7877
System.setProperty("segmentsPerTier", "200");
7978
System.setProperty("maxBufferedDocs", "100");
8079

81-
miniClusterState.startMiniCluster(1);
80+
solrBenchState.startSolr(1);
8281
log("######### Creating index ...");
83-
miniClusterState.createCollection(COLLECTION, 1, 1);
82+
solrBenchState.createCollection(COLLECTION, 1, 1);
8483
// create a lot of large-ish fields to scan positions
8584
Docs docs =
8685
Docs.docs(1234567890L)
@@ -103,9 +102,9 @@ public void setupTrial(MiniClusterState.MiniClusterBenchState miniClusterState)
103102
.field(
104103
"f9_ts",
105104
strings().alpha().maxCardinality(WORDS).multi(50).ofLengthBetween(3, 10));
106-
miniClusterState.index(COLLECTION, docs, NUM_DOCS, true);
107-
miniClusterState.forceMerge(COLLECTION, 200);
108-
miniClusterState.dumpCoreInfo();
105+
solrBenchState.index(COLLECTION, docs, NUM_DOCS, true);
106+
solrBenchState.forceMerge(COLLECTION, 200);
107+
solrBenchState.dumpCoreInfo();
109108
}
110109

111110
// this adds significant processing time to the checking of query limits
@@ -116,13 +115,13 @@ public void setupTrial(MiniClusterState.MiniClusterBenchState miniClusterState)
116115
private static final String matchExpression = "ExitableTermsEnum:-1";
117116

118117
@Setup(Level.Iteration)
119-
public void setupQueries(MiniClusterState.MiniClusterBenchState state) throws Exception {
118+
public void setupQueries(SolrBenchState solrBenchState) throws Exception {
120119
if (verifyEDRInUse) {
121120
TestInjection.queryTimeout = new CallerSpecificQueryLimit(Set.of(matchExpression));
122121
}
123122
// reload collection to force searcher / reader refresh
124123
CollectionAdminRequest.Reload reload = CollectionAdminRequest.reloadCollection(COLLECTION);
125-
state.client.request(reload);
124+
solrBenchState.client.request(reload);
126125

127126
queryFields =
128127
Docs.docs(1234567890L)
@@ -154,25 +153,23 @@ public void tearDownTrial() throws Exception {
154153

155154
private static ModifiableSolrParams createInitialParams() {
156155
ModifiableSolrParams params =
157-
MiniClusterState.params("rows", "100", "timeAllowed", "1000", "fl", "*");
156+
SolrBenchState.params("rows", "100", "timeAllowed", "1000", "fl", "*");
158157
return params;
159158
}
160159

161160
@Benchmark
162-
public void testShortQuery(
163-
MiniClusterState.MiniClusterBenchState miniClusterState, Blackhole bh, BenchState state)
161+
public void testShortQuery(SolrBenchState solrBenchState, Blackhole bh, BenchState state)
164162
throws Exception {
165163
SolrInputDocument queryDoc = state.queryFields.inputDocument();
166164
ModifiableSolrParams params = createInitialParams();
167165
params.set("q", "f1_ts:" + queryDoc.getFieldValue("f1_ts").toString());
168166
QueryRequest queryRequest = new QueryRequest(params);
169-
QueryResponse rsp = queryRequest.process(miniClusterState.client, COLLECTION);
167+
QueryResponse rsp = queryRequest.process(solrBenchState.client, COLLECTION);
170168
bh.consume(rsp);
171169
}
172170

173171
@Benchmark
174-
public void testLongQuery(
175-
MiniClusterState.MiniClusterBenchState miniClusterState, Blackhole bh, BenchState state)
172+
public void testLongQuery(SolrBenchState solrBenchState, Blackhole bh, BenchState state)
176173
throws Exception {
177174
SolrInputDocument queryDoc = state.queryFields.inputDocument();
178175
ModifiableSolrParams params = createInitialParams();
@@ -186,7 +183,7 @@ public void testLongQuery(
186183
}
187184
params.set("q", query.toString());
188185
QueryRequest queryRequest = new QueryRequest(params);
189-
QueryResponse rsp = queryRequest.process(miniClusterState.client, COLLECTION);
186+
QueryResponse rsp = queryRequest.process(solrBenchState.client, COLLECTION);
190187
bh.consume(rsp);
191188
}
192189
}

solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import java.nio.charset.StandardCharsets;
2525
import org.apache.solr.bench.BaseBenchState;
2626
import org.apache.solr.bench.Docs;
27-
import org.apache.solr.bench.MiniClusterState;
27+
import org.apache.solr.bench.SolrBenchState;
2828
import org.apache.solr.bench.SolrRandomnessSource;
2929
import org.apache.solr.bench.generators.SolrGen;
3030
import org.apache.solr.client.solrj.SolrServerException;
@@ -71,8 +71,7 @@ public static class BenchState {
7171
String baseUrl;
7272

7373
@Setup(Level.Trial)
74-
public void setupTrial(MiniClusterState.MiniClusterBenchState miniClusterState)
75-
throws Exception {
74+
public void setupTrial(SolrBenchState solrBenchState) throws Exception {
7675
String cacheEnabled = cacheEnabledAsyncSize.split(":")[0];
7776
String asyncCache = cacheEnabledAsyncSize.split(":")[1];
7877
String cacheSize = cacheEnabledAsyncSize.split(":")[2];
@@ -81,8 +80,8 @@ public void setupTrial(MiniClusterState.MiniClusterBenchState miniClusterState)
8180
System.setProperty("filterCache.initialSize", cacheSize);
8281
System.setProperty("filterCache.async", asyncCache);
8382

84-
miniClusterState.startMiniCluster(1);
85-
miniClusterState.createCollection(COLLECTION, 1, 1);
83+
solrBenchState.startSolr(1);
84+
solrBenchState.createCollection(COLLECTION, 1, 1);
8685

8786
Docs docs = Docs.docs().field("id", integers().incrementing());
8887

@@ -100,24 +99,24 @@ public Boolean generate(SolrRandomnessSource in) {
10099
docs.field("Ea_b", booleans);
101100
docs.field("FB_b", booleans);
102101

103-
miniClusterState.index(COLLECTION, docs, 30 * 1000);
104-
baseUrl = miniClusterState.nodes.get(0);
102+
solrBenchState.index(COLLECTION, docs, 30 * 1000);
103+
baseUrl = solrBenchState.nodes.get(0);
105104
}
106105

107106
@Setup(Level.Iteration)
108-
public void setupIteration(MiniClusterState.MiniClusterBenchState miniClusterState)
107+
public void setupIteration(SolrBenchState solrBenchState)
109108
throws SolrServerException, IOException {
110109
// Reload the collection/core to drop existing caches
111110
CollectionAdminRequest.Reload reload = CollectionAdminRequest.reloadCollection(COLLECTION);
112-
miniClusterState.client.requestWithBaseUrl(miniClusterState.nodes.get(0), reload, null);
111+
solrBenchState.client.requestWithBaseUrl(solrBenchState.nodes.get(0), reload, null);
113112
}
114113

115114
@TearDown(Level.Iteration)
116-
public void dumpMetrics(MiniClusterState.MiniClusterBenchState miniClusterState) {
115+
public void dumpMetrics(SolrBenchState solrBenchState) {
117116
// TODO add a verbose flag
118117

119118
String url =
120-
miniClusterState.nodes.get(0)
119+
solrBenchState.nodes.get(0)
121120
+ "/admin/metrics?prefix=CACHE.searcher.filterCache&omitHeader=true";
122121
HttpURLConnection conn = null;
123122
try {
@@ -134,20 +133,17 @@ public void dumpMetrics(MiniClusterState.MiniClusterBenchState miniClusterState)
134133
}
135134

136135
@Benchmark
137-
public Object filterCacheMultipleQueries(
138-
BenchState benchState, MiniClusterState.MiniClusterBenchState miniClusterState)
136+
public Object filterCacheMultipleQueries(BenchState benchState, SolrBenchState solrBenchState)
139137
throws SolrServerException, IOException {
140-
return miniClusterState.client.requestWithBaseUrl(
138+
return solrBenchState.client.requestWithBaseUrl(
141139
benchState.baseUrl,
142-
miniClusterState.getRandom().nextBoolean() ? benchState.q1 : benchState.q2,
140+
solrBenchState.getRandom().nextBoolean() ? benchState.q1 : benchState.q2,
143141
COLLECTION);
144142
}
145143

146144
@Benchmark
147-
public Object filterCacheSingleQuery(
148-
BenchState benchState, MiniClusterState.MiniClusterBenchState miniClusterState)
145+
public Object filterCacheSingleQuery(BenchState benchState, SolrBenchState solrBenchState)
149146
throws SolrServerException, IOException {
150-
return miniClusterState.client.requestWithBaseUrl(
151-
benchState.baseUrl, benchState.q1, COLLECTION);
147+
return solrBenchState.client.requestWithBaseUrl(benchState.baseUrl, benchState.q1, COLLECTION);
152148
}
153149
}

solr/benchmark/src/java/org/apache/solr/bench/search/JsonFaceting.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import java.util.concurrent.TimeUnit;
2525
import org.apache.solr.bench.BaseBenchState;
2626
import org.apache.solr.bench.Docs;
27-
import org.apache.solr.bench.MiniClusterState;
27+
import org.apache.solr.bench.SolrBenchState;
2828
import org.apache.solr.client.solrj.request.QueryRequest;
2929
import org.apache.solr.common.params.ModifiableSolrParams;
3030
import org.apache.solr.common.util.NamedList;
@@ -99,16 +99,15 @@ public static class BenchState {
9999
private ModifiableSolrParams params;
100100

101101
@Setup(Level.Trial)
102-
public void setup(
103-
BenchmarkParams benchmarkParams, MiniClusterState.MiniClusterBenchState miniClusterState)
102+
public void setup(BenchmarkParams benchmarkParams, SolrBenchState solrBenchState)
104103
throws Exception {
105104

106105
System.setProperty("maxMergeAtOnce", "50");
107106
System.setProperty("segmentsPerTier", "50");
108107

109-
miniClusterState.startMiniCluster(nodeCount);
108+
solrBenchState.startSolr(nodeCount);
110109

111-
miniClusterState.createCollection(collection, numShards, numReplicas);
110+
solrBenchState.createCollection(collection, numShards, numReplicas);
112111

113112
// Define random documents
114113
Docs docs =
@@ -132,12 +131,12 @@ public void setup(
132131
.field(integers().allWithMaxCardinality(facetCard2))
133132
.field(integers().allWithMaxCardinality(facetCard2));
134133

135-
miniClusterState.index(collection, docs, docCount);
136-
miniClusterState.forceMerge(collection, 25);
134+
solrBenchState.index(collection, docs, docCount);
135+
solrBenchState.forceMerge(collection, 25);
137136

138137
params = new ModifiableSolrParams();
139138

140-
MiniClusterState.params(
139+
SolrBenchState.params(
141140
params,
142141
"q",
143142
"*:*",
@@ -167,7 +166,7 @@ public void setup(
167166
params.set("timeAllowed", "5000");
168167
}
169168

170-
// MiniClusterState.log("params: " + params + "\n");
169+
// SolrBenchState.log("params: " + params + "\n");
171170
}
172171

173172
@State(Scope.Thread)
@@ -185,17 +184,17 @@ public void setup() {
185184
@Benchmark
186185
@Timeout(time = 500, timeUnit = TimeUnit.SECONDS)
187186
public void jsonFacet(
188-
MiniClusterState.MiniClusterBenchState miniClusterState,
187+
SolrBenchState solrBenchState,
189188
BenchState state,
190189
BenchState.ThreadState threadState,
191190
Blackhole bh)
192191
throws Exception {
193-
final var url = miniClusterState.nodes.get(threadState.random.nextInt(state.nodeCount));
192+
final var url = solrBenchState.nodes.get(threadState.random.nextInt(state.nodeCount));
194193
QueryRequest queryRequest = new QueryRequest(state.params);
195194
NamedList<Object> result =
196-
miniClusterState.client.requestWithBaseUrl(url, queryRequest, state.collection);
195+
solrBenchState.client.requestWithBaseUrl(url, queryRequest, state.collection);
197196

198-
// MiniClusterState.log("result: " + result);
197+
// SolrBenchState.log("result: " + result);
199198

200199
bh.consume(result);
201200
}

0 commit comments

Comments
 (0)