Skip to content

Commit 37f4acb

Browse files
authored
SOLR-18168: Simplify JettySolrRunner (#4262)
* Remove GzipHandler from JettySolrRunner. Migrate the test to BATS. * Refactor JettySolrRunner filter access to use generic getFilter(). Broaden getExtraRequestFilters() return type from SortedMap to SequencedMap. * Remove Servlet404. * Move/Rename DebugFilter to ServletFixtures as DelayFilter
1 parent 1da74ce commit 37f4acb

8 files changed

Lines changed: 191 additions & 165 deletions

File tree

solr/core/src/test/org/apache/solr/cloud/ShardRoutingTest.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,18 @@
1616
*/
1717
package org.apache.solr.cloud;
1818

19+
import jakarta.servlet.Filter;
1920
import java.lang.invoke.MethodHandles;
21+
import java.util.LinkedHashMap;
2022
import java.util.List;
2123
import java.util.Map;
24+
import java.util.SequencedMap;
2225
import org.apache.solr.client.solrj.SolrClient;
2326
import org.apache.solr.client.solrj.request.UpdateRequest;
2427
import org.apache.solr.client.solrj.response.QueryResponse;
2528
import org.apache.solr.common.params.ShardParams;
2629
import org.apache.solr.embedded.JettySolrRunner;
30+
import org.apache.solr.util.ServletFixtures;
2731
import org.junit.BeforeClass;
2832
import org.junit.Test;
2933
import org.slf4j.Logger;
@@ -327,10 +331,15 @@ public void doAtomicUpdate() throws Exception {
327331
}
328332
}
329333

334+
@Override
335+
public SequencedMap<Class<? extends Filter>, String> getExtraRequestFilters() {
336+
return new LinkedHashMap<>(Map.of(ServletFixtures.DelayServlet.class, "/*"));
337+
}
338+
330339
long getNumRequests() {
331-
long n = controlJetty.getDebugFilter().getTotalRequests();
340+
long n = controlJetty.getFilter(ServletFixtures.DelayServlet.class).getTotalRequests();
332341
for (JettySolrRunner jetty : jettys) {
333-
n += jetty.getDebugFilter().getTotalRequests();
342+
n += jetty.getFilter(ServletFixtures.DelayServlet.class).getTotalRequests();
334343
}
335344
return n;
336345
}

solr/core/src/test/org/apache/solr/servlet/TestRequestRateLimiter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ public void testConcurrentQueries() throws Exception {
7272
CollectionAdminRequest.createCollection(FIRST_COLLECTION, 1, 1).process(client);
7373
cluster.waitForActiveCollection(FIRST_COLLECTION, 1, 1);
7474

75-
RateLimitFilter rateLimitFilter = cluster.getJettySolrRunner(0).getSolrRateLimitFilter();
75+
RateLimitFilter rateLimitFilter =
76+
cluster.getJettySolrRunner(0).getFilter(RateLimitFilter.class);
7677

7778
RateLimiterConfig rateLimiterConfig =
7879
new RateLimiterConfig(
@@ -291,7 +292,7 @@ public void testSlotBorrowing() throws Exception {
291292
CollectionAdminRequest.createCollection(SECOND_COLLECTION, 1, 1).process(client);
292293
cluster.waitForActiveCollection(SECOND_COLLECTION, 1, 1);
293294

294-
RateLimitFilter rateLimitFilter = cluster.getJettySolrRunner(0).getSolrRateLimitFilter();
295+
var rateLimitFilter = cluster.getJettySolrRunner(0).getFilter(RateLimitFilter.class);
295296

296297
RateLimiterConfig queryRateLimiterConfig =
297298
new RateLimiterConfig(

solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesDistrib.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,17 @@
1919

2020
import static org.hamcrest.core.StringContains.containsString;
2121

22+
import jakarta.servlet.Filter;
2223
import java.io.IOException;
2324
import java.lang.invoke.MethodHandles;
2425
import java.util.ArrayList;
2526
import java.util.Arrays;
2627
import java.util.Collections;
28+
import java.util.LinkedHashMap;
2729
import java.util.List;
2830
import java.util.Map;
2931
import java.util.Random;
32+
import java.util.SequencedMap;
3033
import java.util.concurrent.Callable;
3134
import java.util.concurrent.ExecutorService;
3235
import java.util.concurrent.Future;
@@ -62,6 +65,7 @@
6265
import org.apache.solr.index.NoMergePolicyFactory;
6366
import org.apache.solr.update.processor.DistributedUpdateProcessor;
6467
import org.apache.solr.util.RefCounted;
68+
import org.apache.solr.util.ServletFixtures;
6569
import org.apache.solr.util.TimeOut;
6670
import org.apache.zookeeper.KeeperException;
6771
import org.junit.BeforeClass;
@@ -202,9 +206,14 @@ public void test() throws Exception {
202206
// reorderedDBQsUsingUpdatedValueFromADroppedUpdate();
203207
}
204208

209+
@Override
210+
public SequencedMap<Class<? extends Filter>, String> getExtraRequestFilters() {
211+
return new LinkedHashMap<>(Map.of(ServletFixtures.DelayServlet.class, "/*"));
212+
}
213+
205214
private void resetDelays() {
206215
for (JettySolrRunner j : jettys) {
207-
j.getDebugFilter().unsetDelay();
216+
j.getFilter(ServletFixtures.DelayServlet.class).unsetDelay();
208217
}
209218
}
210219

@@ -1236,7 +1245,7 @@ private void delayedReorderingFetchesMissingUpdateFromLeaderTest() throws Except
12361245
.get(SHARD1)
12371246
.get(1)
12381247
.jetty
1239-
.getDebugFilter()
1248+
.getFilter(ServletFixtures.DelayServlet.class)
12401249
.addDelay("Waiting for dependant update to timeout", 1, 6000);
12411250

12421251
ExecutorService threadpool =
@@ -1324,21 +1333,26 @@ private void delayedReorderingFetchesMissingUpdateFromLeaderTest() throws Except
13241333
{
13251334
clearIndex();
13261335
commit();
1327-
shardToJetty.get(SHARD1).get(1).jetty.getDebugFilter().unsetDelay();
1336+
shardToJetty
1337+
.get(SHARD1)
1338+
.getFirst()
1339+
.jetty
1340+
.getFilter(ServletFixtures.DelayServlet.class)
1341+
.unsetDelay();
13281342

13291343
updates.add(regularDeleteRequest(1));
13301344

13311345
shardToJetty
13321346
.get(SHARD1)
13331347
.get(1)
13341348
.jetty
1335-
.getDebugFilter()
1349+
.getFilter(ServletFixtures.DelayServlet.class)
13361350
.addDelay("Waiting for dependant update to timeout", 1, 5999); // the first update
13371351
shardToJetty
13381352
.get(SHARD1)
13391353
.get(1)
13401354
.jetty
1341-
.getDebugFilter()
1355+
.getFilter(ServletFixtures.DelayServlet.class)
13421356
.addDelay("Waiting for dependant update to timeout", 4, 5998); // the delete update
13431357

13441358
threadpool =
@@ -1635,7 +1649,7 @@ private void reorderedDBQsUsingUpdatedValueFromADroppedUpdate() throws Exception
16351649
.get(SHARD1)
16361650
.get(1)
16371651
.jetty
1638-
.getDebugFilter()
1652+
.getFilter(ServletFixtures.DelayServlet.class)
16391653
.addDelay("Waiting for dependant update to timeout", 2, 8000);
16401654

16411655
ExecutorService threadpool =
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/usr/bin/env bats
2+
3+
# Licensed to the Apache Software Foundation (ASF) under one or more
4+
# contributor license agreements. See the NOTICE file distributed with
5+
# this work for additional information regarding copyright ownership.
6+
# The ASF licenses this file to You under the Apache License, Version 2.0
7+
# (the "License"); you may not use this file except in compliance with
8+
# the License. You may obtain a copy of the License at
9+
#
10+
# http://www.apache.org/licenses/LICENSE-2.0
11+
#
12+
# Unless required by applicable law or agreed to in writing, software
13+
# distributed under the License is distributed on an "AS IS" BASIS,
14+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
# See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
18+
load bats_helper
19+
20+
setup_file() {
21+
common_clean_setup
22+
solr start -e films
23+
}
24+
25+
setup() {
26+
common_setup
27+
}
28+
29+
teardown_file() {
30+
save_home_on_failure
31+
solr stop --all >/dev/null 2>&1
32+
}
33+
34+
@test "server does not compress response without Accept-Encoding header" {
35+
run curl -s -D - -o /dev/null "http://localhost:${SOLR_PORT}/solr/films/select?q=*:*&rows=100"
36+
refute_output --partial "Content-Encoding:"
37+
}
38+
39+
@test "server compresses response when Accept-Encoding: gzip is requested" {
40+
run curl -s -D - -o /dev/null -H "Accept-Encoding: gzip" "http://localhost:${SOLR_PORT}/solr/films/select?q=*:*&rows=100"
41+
assert_output --partial "gzip"
42+
}
43+
44+
@test "compressed response can be decompressed and parsed" {
45+
run curl -s --compressed "http://localhost:${SOLR_PORT}/solr/films/select?q=*:*&rows=100"
46+
assert_output --partial '"status":0'
47+
}

solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.Objects;
3838
import java.util.Properties;
3939
import java.util.Random;
40+
import java.util.SequencedMap;
4041
import java.util.Set;
4142
import java.util.SortedMap;
4243
import java.util.concurrent.ConcurrentHashMap;
@@ -439,7 +440,7 @@ public SortedMap<ServletHolder, String> getExtraServlets() {
439440
* Override this method to insert extra filters into the JettySolrRunners that are created using
440441
* createJetty()
441442
*/
442-
public SortedMap<Class<? extends Filter>, String> getExtraRequestFilters() {
443+
public SequencedMap<Class<? extends Filter>, String> getExtraRequestFilters() {
443444
return null;
444445
}
445446

0 commit comments

Comments
 (0)