Re: AWS2-S3 timeout while uploading on Camel 3.20.3

2023-04-12 Thread Andrea Cosentino
You could create your own client instance and reference it in your route.

So you will be able to manage timeout and what not

Il mer 12 apr 2023, 16:51 Vyacheslav Boyko  ha scritto:

> Hi!
>
> Please help me to solve a problem.
> It worked properly on Apache Camel 3.20.1 (Java 11) and fails with
> timeout after I upgrade it onto 3.20.3 (Java 17).
> I run my app on SpringBoot.
>
> I have a service with the route which just uploads files onto AWS S3.
>
> from("direct:save-s3")
> .routeId("save-s3")
> .messageHistory()
> .onException(SdkException.class)
> .maximumRedeliveries(AWS_S3_MAXIMUM_REDELIVERIES)
> .redeliveryDelay(AWS_S3_REDELIVERY_DELAY_MS)
> .handled(false)
> .end()
> .process(exchange -> exchange.setProperty(DOCUMENT_PREVIEW_ID,
> PREVIEW_PREFIX +
> exchange.getIn().getBody(DocumentDto.class).getDocumentId()))
> .log(INFO, "Save preview ${exchangeProperty[" + DOCUMENT_PREVIEW_ID +
> "]}")
> .process((exchange) -> {
> DocumentDto documentDto = exchange.getIn().getBody(DocumentDto.class);
> exchange.getIn().setHeader(AWS2S3Constants.KEY,
> exchange.getProperty(DOCUMENT_PREVIEW_ID));
> String preview =
> Base64.getEncoder().encodeToString(imageService.getPreview(documentDto.
> getDocumentContent()));
> exchange.getIn().setBody(preview);
> })
> .to("aws2-
> s3://BUCKET?accessKey=RAW(SOME_KEY)=RAW(SOME_KEY)=REGI
> ON");
>
> Here is my stacktrace:
>
> software.amazon.awssdk.core.exception.SdkClientException: Unable to
> execute HTTP request: Connect to pfe-clientfiles-qa.s3.eu-north-
> 1.amazonaws.com:443 [pfe-clientfiles-qa.s3.eu-north-
> 1.amazonaws.com/52.95.170.64] failed: Connect timed out
> at
> software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.bu
> ild(SdkClientException.java:111)
> at
> software.amazon.awssdk.core.exception.SdkClientException.create(SdkClie
> ntException.java:47)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.utils.Retryab
> leStageHelper.setLastException(RetryableStageHelper.java:223)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStag
> e.execute(RetryableStage.java:83)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStag
> e.execute(RetryableStage.java:36)
> at
> software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuild
> er$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:20
> 6)
> at
> software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(S
> treamManagingStage.java:56)
> at
> software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(S
> treamManagingStage.java:36)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeou
> tTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeou
> tTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeou
> tTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetric
> CollectionStage.execute(ApiCallMetricCollectionStage.java:48)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetric
> CollectionStage.execute(ApiCallMetricCollectionStage.java:31)
> at
> software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuild
> er$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:20
> 6)
> at
> software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuild
> er$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:20
> 6)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFail
> ureExceptionReportingStage.execute(ExecutionFailureExceptionReportingSt
> age.java:37)
> at
> software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFail
> ureExceptionReportingStage.execute(ExecutionFailureExceptionReportingSt
> age.java:26)
> at
> software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestE
> xecutionBuilderImpl.execute(AmazonSyncHttpClient.java:193)
> at
> software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invo
> ke(BaseSyncClientHandler.java:103)
> at
> software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doEx
> ecute(BaseSyncClientHandler.java:171)
> at
> software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lamb
> da$execute$1(BaseSyncClientHandler.java:82)
> at
> software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.meas
> ureApiCallSuccess(BaseSyncClientHandler.java:179)
> at
> software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.exec
> ute(BaseSyncClientHandler.java:76)
> at
> software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute
> (SdkSyncClientHandler.java:45)
> at
> software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.exec
> ute(AwsSyncClientHandler.java:56)
> at
> 

AWS2-S3 timeout while uploading on Camel 3.20.3

2023-04-12 Thread Vyacheslav Boyko
Hi!

Please help me to solve a problem.
It worked properly on Apache Camel 3.20.1 (Java 11) and fails with
timeout after I upgrade it onto 3.20.3 (Java 17).
I run my app on SpringBoot.

I have a service with the route which just uploads files onto AWS S3.

from("direct:save-s3")
.routeId("save-s3")
.messageHistory()
.onException(SdkException.class)
.maximumRedeliveries(AWS_S3_MAXIMUM_REDELIVERIES)
.redeliveryDelay(AWS_S3_REDELIVERY_DELAY_MS)
.handled(false)
.end()
.process(exchange -> exchange.setProperty(DOCUMENT_PREVIEW_ID,
PREVIEW_PREFIX +
exchange.getIn().getBody(DocumentDto.class).getDocumentId()))
.log(INFO, "Save preview ${exchangeProperty[" + DOCUMENT_PREVIEW_ID +
"]}")
.process((exchange) -> {
DocumentDto documentDto = exchange.getIn().getBody(DocumentDto.class);
exchange.getIn().setHeader(AWS2S3Constants.KEY,
exchange.getProperty(DOCUMENT_PREVIEW_ID));
String preview =
Base64.getEncoder().encodeToString(imageService.getPreview(documentDto.
getDocumentContent()));
exchange.getIn().setBody(preview);
})
.to("aws2-
s3://BUCKET?accessKey=RAW(SOME_KEY)=RAW(SOME_KEY)=REGI
ON");

Here is my stacktrace:

software.amazon.awssdk.core.exception.SdkClientException: Unable to
execute HTTP request: Connect to pfe-clientfiles-qa.s3.eu-north-
1.amazonaws.com:443 [pfe-clientfiles-qa.s3.eu-north-
1.amazonaws.com/52.95.170.64] failed: Connect timed out
at
software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.bu
ild(SdkClientException.java:111)
at
software.amazon.awssdk.core.exception.SdkClientException.create(SdkClie
ntException.java:47)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.utils.Retryab
leStageHelper.setLastException(RetryableStageHelper.java:223)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStag
e.execute(RetryableStage.java:83)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStag
e.execute(RetryableStage.java:36)
at
software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuild
er$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:20
6)
at
software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(S
treamManagingStage.java:56)
at
software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(S
treamManagingStage.java:36)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeou
tTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeou
tTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeou
tTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetric
CollectionStage.execute(ApiCallMetricCollectionStage.java:48)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetric
CollectionStage.execute(ApiCallMetricCollectionStage.java:31)
at
software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuild
er$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:20
6)
at
software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuild
er$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:20
6)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFail
ureExceptionReportingStage.execute(ExecutionFailureExceptionReportingSt
age.java:37)
at
software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFail
ureExceptionReportingStage.execute(ExecutionFailureExceptionReportingSt
age.java:26)
at
software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestE
xecutionBuilderImpl.execute(AmazonSyncHttpClient.java:193)
at
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invo
ke(BaseSyncClientHandler.java:103)
at
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doEx
ecute(BaseSyncClientHandler.java:171)
at
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lamb
da$execute$1(BaseSyncClientHandler.java:82)
at
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.meas
ureApiCallSuccess(BaseSyncClientHandler.java:179)
at
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.exec
ute(BaseSyncClientHandler.java:76)
at
software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute
(SdkSyncClientHandler.java:45)
at
software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.exec
ute(AwsSyncClientHandler.java:56)
at
software.amazon.awssdk.services.s3.DefaultS3Client.putObject(DefaultS3C
lient.java:9326)
at
org.apache.camel.component.aws2.s3.AWS2S3Producer.doPutObject(AWS2S3Pro
ducer.java:393)
at
org.apache.camel.component.aws2.s3.AWS2S3Producer.processSingleOp(AWS2S
3Producer.java:296)
at
org.apache.camel.component.aws2.s3.AWS2S3Producer.process(AWS2S3Produce
r.java:97)
at
org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsync