You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2020/07/30 06:15:19 UTC

[camel] 01/03: CAMEL-15347 - Camel-aws2-s3: moveAfterRead true bucket not created

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit fc6ccf43672b96de3d804cbc3a5ac26eb06cbbb4
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Jul 30 08:10:09 2020 +0200

    CAMEL-15347 - Camel-aws2-s3: moveAfterRead true bucket not created
---
 .../camel/component/aws2/s3/AWS2S3Consumer.java    | 35 ++++++++++++++++++++++
 .../src/test/resources/log4j2.properties           |  2 +-
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
index acc6eab..154a5d4 100644
--- a/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
+++ b/components/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
@@ -40,6 +40,7 @@ import software.amazon.awssdk.core.ResponseInputStream;
 import software.amazon.awssdk.core.sync.ResponseTransformer;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.s3.model.CopyObjectRequest;
+import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
 import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
 import software.amazon.awssdk.services.s3.model.GetObjectRequest;
 import software.amazon.awssdk.services.s3.model.GetObjectRequest.Builder;
@@ -62,6 +63,40 @@ public class AWS2S3Consumer extends ScheduledBatchPollingConsumer {
     public AWS2S3Consumer(AWS2S3Endpoint endpoint, Processor processor) throws NoFactoryAvailableException {
         super(endpoint, processor);
     }
+    
+    @Override
+    protected void doStart() throws Exception {
+       super.doStart();
+       
+       if (getConfiguration().isMoveAfterRead()) {
+       try {
+           ListObjectsRequest.Builder builder = ListObjectsRequest.builder();
+           builder.bucket(getConfiguration().getDestinationBucket());
+           builder.maxKeys(maxMessagesPerPoll);
+           getAmazonS3Client().listObjects(builder.build());
+           LOG.trace("Bucket [{}] already exists", getConfiguration().getDestinationBucket());
+           return;
+       } catch (AwsServiceException ase) {
+           /* 404 means the bucket doesn't exist */
+           if (ase.awsErrorDetails().errorCode().equalsIgnoreCase("404")) {
+               throw ase;
+           }
+       }
+
+       LOG.trace("Destination Bucket [{}] doesn't exist yet", getConfiguration().getDestinationBucket());
+
+       if (getConfiguration().isAutoCreateBucket()) {
+           // creates the new bucket because it doesn't exist yet
+           CreateBucketRequest createBucketRequest = CreateBucketRequest.builder().bucket(getConfiguration().getDestinationBucket()).build();
+
+           LOG.trace("Creating Destination bucket [{}] in region [{}] with request [{}]...", getConfiguration().getDestinationBucket(), getConfiguration().getRegion(), createBucketRequest);
+
+           getAmazonS3Client().createBucket(createBucketRequest);
+
+           LOG.trace("Destination Bucket created");
+       }
+       }
+    }
 
     @Override
     protected int poll() throws Exception {
diff --git a/components/camel-aws2-s3/src/test/resources/log4j2.properties b/components/camel-aws2-s3/src/test/resources/log4j2.properties
index a287c66..b4e4ec4 100644
--- a/components/camel-aws2-s3/src/test/resources/log4j2.properties
+++ b/components/camel-aws2-s3/src/test/resources/log4j2.properties
@@ -24,5 +24,5 @@ appender.out.type = Console
 appender.out.name = out
 appender.out.layout.type = PatternLayout
 appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
-rootLogger.level = INFO
+rootLogger.level = TRACE
 rootLogger.appenderRef.file.ref = file