Skip to content

Commit f48bff2

Browse files
committed
Misc cleanups in S3BlobContainerRetriesTests
- Simplify multi-object-delete request detection - Replace `AtomicBoolean` with volatile field - Make `ThrottlingDeleteHandler` static
1 parent 95cf145 commit f48bff2

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobContainerRetriesTests.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,19 @@ public class S3BlobContainerRetriesTests extends AbstractBlobContainerRetriesTes
117117

118118
private static final int MAX_NUMBER_SNAPSHOT_DELETE_RETRIES = 10;
119119
private S3Service service;
120-
private AtomicBoolean shouldErrorOnDns;
120+
private volatile boolean shouldErrorOnDns;
121121
private RecordingMeterRegistry recordingMeterRegistry;
122122

123123
@Before
124124
public void setUp() throws Exception {
125-
shouldErrorOnDns = new AtomicBoolean(false);
125+
shouldErrorOnDns = false;
126126
service = new S3Service(Mockito.mock(Environment.class), Settings.EMPTY, Mockito.mock(ResourceWatcherService.class)) {
127127
@Override
128128
protected AmazonS3ClientBuilder buildClientBuilder(S3ClientSettings clientSettings) {
129129
final AmazonS3ClientBuilder builder = super.buildClientBuilder(clientSettings);
130130
final DnsResolver defaultDnsResolver = builder.getClientConfiguration().getDnsResolver();
131131
builder.getClientConfiguration().setDnsResolver(host -> {
132-
if (shouldErrorOnDns.get() && randomBoolean() && randomBoolean()) {
132+
if (shouldErrorOnDns && randomBoolean() && randomBoolean()) {
133133
throw new UnknownHostException(host);
134134
}
135135
return defaultDnsResolver.resolve(host);
@@ -721,7 +721,7 @@ public void testReadWithIndicesPurposeRetriesForever() throws IOException {
721721

722722
final byte[] bytes = randomBlobContent(512);
723723

724-
shouldErrorOnDns.set(true);
724+
shouldErrorOnDns = true;
725725
final AtomicInteger failures = new AtomicInteger();
726726
@SuppressForbidden(reason = "use a http server")
727727
class FlakyReadHandler implements HttpHandler {
@@ -949,7 +949,7 @@ private int expectedNumberOfBatches(int blobsToDelete) {
949949
}
950950

951951
@SuppressForbidden(reason = "use a http server")
952-
private class ThrottlingDeleteHandler extends S3HttpHandler {
952+
private static class ThrottlingDeleteHandler extends S3HttpHandler {
953953

954954
private static final String THROTTLING_ERROR_CODE = "SlowDown";
955955

@@ -974,7 +974,7 @@ private class ThrottlingDeleteHandler extends S3HttpHandler {
974974

975975
@Override
976976
public void handle(HttpExchange exchange) throws IOException {
977-
if (exchange.getRequestMethod().equals("POST") && exchange.getRequestURI().toString().startsWith("/bucket/?delete")) {
977+
if (isMultiDeleteRequest(exchange)) {
978978
onAttemptCallback.accept(numberOfDeleteAttempts.get());
979979
numberOfDeleteAttempts.incrementAndGet();
980980
if (throttleTimesBeforeSuccess.getAndDecrement() > 0) {
@@ -1078,7 +1078,7 @@ public void testSuppressedDeletionErrorsAreCapped() {
10781078
int maxBulkDeleteSize = randomIntBetween(1, 10);
10791079
final BlobContainer blobContainer = createBlobContainer(1, readTimeout, true, null, maxBulkDeleteSize);
10801080
httpServer.createContext("/", exchange -> {
1081-
if (exchange.getRequestMethod().equals("POST") && exchange.getRequestURI().toString().startsWith("/bucket/?delete")) {
1081+
if (isMultiDeleteRequest(exchange)) {
10821082
exchange.sendResponseHeaders(
10831083
randomFrom(
10841084
HttpStatus.SC_INTERNAL_SERVER_ERROR,
@@ -1112,7 +1112,7 @@ public void testTrimmedLogAndCappedSuppressedErrorOnMultiObjectDeletionException
11121112

11131113
final Pattern pattern = Pattern.compile("<Key>(.+?)</Key>");
11141114
httpServer.createContext("/", exchange -> {
1115-
if (exchange.getRequestMethod().equals("POST") && exchange.getRequestURI().toString().startsWith("/bucket/?delete")) {
1115+
if (isMultiDeleteRequest(exchange)) {
11161116
final String requestBody = Streams.copyToString(new InputStreamReader(exchange.getRequestBody(), StandardCharsets.UTF_8));
11171117
final var matcher = pattern.matcher(requestBody);
11181118
final StringBuilder deletes = new StringBuilder();
@@ -1249,6 +1249,10 @@ private Map<String, Object> metricAttributes(String action) {
12491249
return Map.of("repo_type", "s3", "repo_name", "repository", "operation", "GetObject", "purpose", "Indices", "action", action);
12501250
}
12511251

1252+
private static boolean isMultiDeleteRequest(HttpExchange exchange) {
1253+
return new S3HttpHandler("bucket").parseRequest(exchange).isMultiObjectDeleteRequest();
1254+
}
1255+
12521256
/**
12531257
* Asserts that an InputStream is fully consumed, or aborted, when it is closed
12541258
*/

0 commit comments

Comments
 (0)