From 7943da398d1c2bdbf0ebc28142ad8e022fd39ee5 Mon Sep 17 00:00:00 2001 From: Tanguy Leroux Date: Fri, 25 Oct 2019 17:50:16 +0200 Subject: [PATCH 1/3] Give more time to GCS requests to complete --- .../gcs/GoogleCloudStorageBlobStoreRepositoryTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java b/plugins/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java index c1c536f02be5f..4838ff5d56e69 100644 --- a/plugins/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java +++ b/plugins/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java @@ -176,7 +176,7 @@ StorageOptions createStorageOptions(final GoogleCloudStorageClientSettings clien StorageOptions options = super.createStorageOptions(clientSettings, httpTransportOptions); return options.toBuilder() .setRetrySettings(RetrySettings.newBuilder() - .setTotalTimeout(options.getRetrySettings().getTotalTimeout()) + .setTotalTimeout(Duration.ofSeconds(120L)) .setInitialRetryDelay(Duration.ofMillis(10L)) .setRetryDelayMultiplier(options.getRetrySettings().getRetryDelayMultiplier()) .setMaxRetryDelay(Duration.ofSeconds(1L)) From e10a00f46d86be11e6e9be833fdd2c721f6f45fd Mon Sep 17 00:00:00 2001 From: Tanguy Leroux Date: Mon, 28 Oct 2019 11:59:24 +0100 Subject: [PATCH 2/3] Revert "Give more time to GCS requests to complete" This reverts commit 7943da39 --- .../gcs/GoogleCloudStorageBlobStoreRepositoryTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java b/plugins/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java index 4838ff5d56e69..c1c536f02be5f 100644 --- a/plugins/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java +++ b/plugins/repository-gcs/src/test/java/org/elasticsearch/repositories/gcs/GoogleCloudStorageBlobStoreRepositoryTests.java @@ -176,7 +176,7 @@ StorageOptions createStorageOptions(final GoogleCloudStorageClientSettings clien StorageOptions options = super.createStorageOptions(clientSettings, httpTransportOptions); return options.toBuilder() .setRetrySettings(RetrySettings.newBuilder() - .setTotalTimeout(Duration.ofSeconds(120L)) + .setTotalTimeout(options.getRetrySettings().getTotalTimeout()) .setInitialRetryDelay(Duration.ofMillis(10L)) .setRetryDelayMultiplier(options.getRetrySettings().getRetryDelayMultiplier()) .setMaxRetryDelay(Duration.ofSeconds(1L)) From 71fd095d042c93db771bae150062d37ebf6fc73d Mon Sep 17 00:00:00 2001 From: Tanguy Leroux Date: Mon, 28 Oct 2019 12:18:20 +0100 Subject: [PATCH 3/3] Drain input stream with smaller buffer --- .../azure/AzureBlobStoreRepositoryTests.java | 4 ++-- .../s3/S3BlobStoreRepositoryTests.java | 2 +- .../ESMockAPIBasedRepositoryIntegTestCase.java | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/plugins/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureBlobStoreRepositoryTests.java b/plugins/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureBlobStoreRepositoryTests.java index 28993bd475a06..4bd71d8216b13 100644 --- a/plugins/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureBlobStoreRepositoryTests.java +++ b/plugins/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureBlobStoreRepositoryTests.java @@ -199,7 +199,7 @@ public void handle(final HttpExchange exchange) throws IOException { exchange.getResponseBody().write(blob.toBytesRef().bytes, start, length); } else if (Regex.simpleMatch("DELETE /container/*", request)) { - Streams.readFully(exchange.getRequestBody()); + drainInputStream(exchange.getRequestBody()); blobs.entrySet().removeIf(blob -> blob.getKey().startsWith(exchange.getRequestURI().getPath())); exchange.sendResponseHeaders(RestStatus.ACCEPTED.getStatus(), -1); @@ -251,7 +251,7 @@ private static class AzureErroneousHttpHandler extends ErroneousHttpHandler { @Override protected void handleAsError(final HttpExchange exchange) throws IOException { - Streams.readFully(exchange.getRequestBody()); + drainInputStream(exchange.getRequestBody()); TestUtils.sendError(exchange, randomFrom(RestStatus.INTERNAL_SERVER_ERROR, RestStatus.SERVICE_UNAVAILABLE)); exchange.close(); } diff --git a/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobStoreRepositoryTests.java b/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobStoreRepositoryTests.java index 5762e34a19c61..69b9c453480b0 100644 --- a/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobStoreRepositoryTests.java +++ b/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobStoreRepositoryTests.java @@ -194,7 +194,7 @@ public void handle(final HttpExchange exchange) throws IOException { } } else if (Regex.simpleMatch("POST /bucket/*?uploadId=*", request)) { - Streams.readFully(exchange.getRequestBody()); + drainInputStream(exchange.getRequestBody()); final Map params = new HashMap<>(); RestUtils.decodeQueryString(exchange.getRequestURI().getQuery(), 0, params); final String uploadId = params.get("uploadId"); diff --git a/test/framework/src/main/java/org/elasticsearch/repositories/blobstore/ESMockAPIBasedRepositoryIntegTestCase.java b/test/framework/src/main/java/org/elasticsearch/repositories/blobstore/ESMockAPIBasedRepositoryIntegTestCase.java index 4876f64301204..6ce1e45ef2bd2 100644 --- a/test/framework/src/main/java/org/elasticsearch/repositories/blobstore/ESMockAPIBasedRepositoryIntegTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/repositories/blobstore/ESMockAPIBasedRepositoryIntegTestCase.java @@ -26,7 +26,6 @@ import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.common.Strings; import org.elasticsearch.common.SuppressForbidden; -import org.elasticsearch.common.io.Streams; import org.elasticsearch.common.network.InetAddresses; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.mocksocket.MockHttpServer; @@ -37,6 +36,7 @@ import org.junit.BeforeClass; import java.io.IOException; +import java.io.InputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.Map; @@ -53,6 +53,8 @@ @SuppressForbidden(reason = "this test uses a HttpServer to emulate a cloud-based storage service") public abstract class ESMockAPIBasedRepositoryIntegTestCase extends ESBlobStoreRepositoryIntegTestCase { + private static final byte[] BUFFER = new byte[1024]; + private static HttpServer httpServer; private Map handlers; @@ -127,6 +129,15 @@ protected static String httpServerUrl() { return "http://" + InetAddresses.toUriString(address.getAddress()) + ":" + address.getPort(); } + /** + * Consumes and closes the given {@link InputStream} + */ + protected static void drainInputStream(final InputStream inputStream) throws IOException { + try (InputStream is = inputStream) { + while (is.read(BUFFER) >= 0); + } + } + /** * HTTP handler that injects random service errors * @@ -166,7 +177,7 @@ public void handle(final HttpExchange exchange) throws IOException { } protected void handleAsError(final HttpExchange exchange) throws IOException { - Streams.readFully(exchange.getRequestBody()); + drainInputStream(exchange.getRequestBody()); exchange.sendResponseHeaders(HttpStatus.SC_INTERNAL_SERVER_ERROR, -1); exchange.close(); }