This is an automated email from the ASF dual-hosted git repository. rouazana pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 8e73a1d2429fd4ffb2bda0dfa697bed49213189b Author: RĂ©mi Kowalski <rkowal...@linagora.com> AuthorDate: Tue May 7 13:40:47 2019 +0200 JAMES-2725 add retry on exception for s3 upload --- .../blob/objectstorage/aws/AwsS3ObjectStorage.java | 18 +++++++++++++++--- .../org/apache/james/MailsShouldBeWellReceived.java | 1 - 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java index 56d58a3..f00be8b 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java @@ -61,8 +61,9 @@ public class AwsS3ObjectStorage { public static final int MAX_THREADS = 5; private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(MAX_THREADS, NamedThreadFactory.withClassName(AwsS3ObjectStorage.class)); private static final boolean DO_NOT_SHUTDOWN_THREAD_POOL = false; - public static final int MAX_UPLOAD_THREADS = 5; private static final int MAX_ERROR_RETRY = 5; + private static final int FIRST_TRY = 0; + private static final int MAX_RETRY_ON_EXCEPTION = 3; public static Size MULTIPART_UPLOAD_THRESHOLD; static { @@ -83,8 +84,7 @@ public class AwsS3ObjectStorage { try { file = File.createTempFile(UUID.randomUUID().toString(), ".tmp"); FileUtils.copyToFile(blob.getPayload().openStream(), file); - - put(blobIdFactory, containerName, configuration, blob, file); + putWithRetry(blobIdFactory, containerName, configuration, blob, file, FIRST_TRY); } catch (IOException e) { throw new RuntimeException(e); } finally { @@ -95,6 +95,18 @@ public class AwsS3ObjectStorage { }); } + private static void putWithRetry(BlobId.Factory blobIdFactory, ContainerName containerName, AwsS3AuthConfiguration configuration, Blob blob, File file, int tried) { + try { + put(blobIdFactory, containerName, configuration, blob, file); + } catch (RuntimeException e) { + if (tried < MAX_RETRY_ON_EXCEPTION) { + putWithRetry(blobIdFactory, containerName, configuration, blob, file, tried + 1); + } else { + throw e; + } + } + } + private static void put(BlobId.Factory blobIdFactory, ContainerName containerName, AwsS3AuthConfiguration configuration, Blob blob, File file) { try { PutObjectRequest request = new PutObjectRequest(containerName.value(), diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/MailsShouldBeWellReceived.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/MailsShouldBeWellReceived.java index 16d3f54..9c8adbf 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/MailsShouldBeWellReceived.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/MailsShouldBeWellReceived.java @@ -43,7 +43,6 @@ interface MailsShouldBeWellReceived { .and().pollDelay(ONE_HUNDRED_MILLISECONDS) .await(); - @Test default void mailsShouldBeWellReceived(GuiceJamesServer server) throws Exception { server.getProbe(DataProbeImpl.class).fluent() --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org