diff --git a/datasafe-business/src/test/java/de/adorsys/datasafe/business/impl/e2e/MultiDFSFunctionalityIT.java b/datasafe-business/src/test/java/de/adorsys/datasafe/business/impl/e2e/MultiDFSFunctionalityIT.java index c58607ac9..5d547c676 100644 --- a/datasafe-business/src/test/java/de/adorsys/datasafe/business/impl/e2e/MultiDFSFunctionalityIT.java +++ b/datasafe-business/src/test/java/de/adorsys/datasafe/business/impl/e2e/MultiDFSFunctionalityIT.java @@ -137,7 +137,8 @@ void initDatasafe() { accessKey(CREDENTIALS), secretKey(CREDENTIALS) ), - CREDENTIALS, + REGION, + CREDENTIALS, EXECUTOR ); @@ -158,6 +159,7 @@ void initDatasafe() { acc.getAccessKey(), acc.getSecretKey() ), + acc.getRegion(), acc.getBucketName(), EXECUTOR ) diff --git a/datasafe-cli/src/main/java/de/adorsys/datasafe/cli/config/DatasafeFactory.java b/datasafe-cli/src/main/java/de/adorsys/datasafe/cli/config/DatasafeFactory.java index c59e94ac9..33c2c905e 100644 --- a/datasafe-cli/src/main/java/de/adorsys/datasafe/cli/config/DatasafeFactory.java +++ b/datasafe-cli/src/main/java/de/adorsys/datasafe/cli/config/DatasafeFactory.java @@ -86,6 +86,7 @@ private static StorageService amazonS3() { acc.getAccessKey(), acc.getSecretKey() ), + acc.getRegion(), // Bucket name is encoded in first path segment acc.getBucketName(), ExecutorServiceUtil.submitterExecutesOnStarvationExecutingService() @@ -134,6 +135,7 @@ private static S3StorageService getStorageService(String accessKey, String secre return new S3StorageService( amazons3, + region, bucket, ExecutorServiceUtil .submitterExecutesOnStarvationExecutingService( diff --git a/datasafe-examples/datasafe-examples-multidfs/src/test/java/de/adorsys/datasafe/examples/business/s3/MultiDfsWithCredentialsExampleIT.java b/datasafe-examples/datasafe-examples-multidfs/src/test/java/de/adorsys/datasafe/examples/business/s3/MultiDfsWithCredentialsExampleIT.java index 29b7e5f36..69e14b63b 100644 --- a/datasafe-examples/datasafe-examples-multidfs/src/test/java/de/adorsys/datasafe/examples/business/s3/MultiDfsWithCredentialsExampleIT.java +++ b/datasafe-examples/datasafe-examples-multidfs/src/test/java/de/adorsys/datasafe/examples/business/s3/MultiDfsWithCredentialsExampleIT.java @@ -107,6 +107,7 @@ void testMultiUserStorageUserSetup() { // static client that will be used to access `directory` bucket: StorageService directoryStorage = new S3StorageService( directoryClient, + REGION, DIRECTORY_BUCKET.getBucketName(), EXECUTOR ); @@ -135,6 +136,7 @@ void testMultiUserStorageUserSetup() { acc.getAccessKey(), acc.getSecretKey() ), + acc.getRegion(), // Bucket name is encoded in first path segment acc.getBucketName(), EXECUTOR diff --git a/datasafe-examples/datasafe-examples-versioned-s3/src/test/java/de/adorsys/datasafe/examples/business/s3/BaseUserOperationsWithDefaultDatasafeOnVersionedStorageIT.java b/datasafe-examples/datasafe-examples-versioned-s3/src/test/java/de/adorsys/datasafe/examples/business/s3/BaseUserOperationsWithDefaultDatasafeOnVersionedStorageIT.java index c8429a2cb..030d76dc3 100644 --- a/datasafe-examples/datasafe-examples-versioned-s3/src/test/java/de/adorsys/datasafe/examples/business/s3/BaseUserOperationsWithDefaultDatasafeOnVersionedStorageIT.java +++ b/datasafe-examples/datasafe-examples-versioned-s3/src/test/java/de/adorsys/datasafe/examples/business/s3/BaseUserOperationsWithDefaultDatasafeOnVersionedStorageIT.java @@ -121,6 +121,7 @@ void init() { .config(new DefaultDFSConfig(cephMappedUrl, "secret"::toCharArray)) .storage(new S3StorageService( cephS3, + "", VERSIONED_BUCKET_NAME, ExecutorServiceUtil.submitterExecutesOnStarvationExecutingService())) .build(); diff --git a/datasafe-rest-impl/src/main/java/de/adorsys/datasafe/rest/impl/config/DatasafeConfig.java b/datasafe-rest-impl/src/main/java/de/adorsys/datasafe/rest/impl/config/DatasafeConfig.java index 71c31b9fe..62c029573 100644 --- a/datasafe-rest-impl/src/main/java/de/adorsys/datasafe/rest/impl/config/DatasafeConfig.java +++ b/datasafe-rest-impl/src/main/java/de/adorsys/datasafe/rest/impl/config/DatasafeConfig.java @@ -132,6 +132,7 @@ StorageService clientCredentials(AmazonS3 s3, S3Factory factory, DatasafePropert ExecutorService executorService = ExecutorServiceUtil.submitterExecutesOnStarvationExecutingService(); S3StorageService basicStorage = new S3StorageService( s3, + properties.getAmazonRegion(), properties.getBucketName(), executorService ); @@ -185,6 +186,7 @@ StorageService singleStorageServiceFilesystem(DatasafeProperties properties) { StorageService singleStorageServiceS3(AmazonS3 s3, DatasafeProperties properties) { return new S3StorageService( s3, + properties.getAmazonRegion(), properties.getBucketName(), ExecutorServiceUtil.submitterExecutesOnStarvationExecutingService() ); @@ -203,7 +205,7 @@ StorageService multiStorageService(DatasafeProperties properties) { ) ); - S3StorageService s3StorageService = new S3StorageService(s3(properties), properties.getBucketName(), + S3StorageService s3StorageService = new S3StorageService(s3(properties), properties.getAmazonRegion(), properties.getBucketName(), ExecutorServiceUtil.submitterExecutesOnStarvationExecutingService() ); diff --git a/datasafe-simple-adapter/datasafe-simple-adapter-impl/src/main/java/de/adorsys/datasafe/simple/adapter/impl/SimpleDatasafeServiceImpl.java b/datasafe-simple-adapter/datasafe-simple-adapter-impl/src/main/java/de/adorsys/datasafe/simple/adapter/impl/SimpleDatasafeServiceImpl.java index 02f9cb024..ae72cfd76 100644 --- a/datasafe-simple-adapter/datasafe-simple-adapter-impl/src/main/java/de/adorsys/datasafe/simple/adapter/impl/SimpleDatasafeServiceImpl.java +++ b/datasafe-simple-adapter/datasafe-simple-adapter-impl/src/main/java/de/adorsys/datasafe/simple/adapter/impl/SimpleDatasafeServiceImpl.java @@ -299,6 +299,7 @@ private static SystemRootAndStorageService useAmazonS3(AmazonS3DFSCredentials df } StorageService storageService = new S3StorageService( amazons3, + amazonS3DFSCredentials.getRegion(), amazonS3DFSCredentials.getContainer(), ExecutorServiceUtil .submitterExecutesOnStarvationExecutingService( diff --git a/datasafe-storage/datasafe-storage-impl-s3/src/main/java/de/adorsys/datasafe/storage/impl/s3/S3StorageService.java b/datasafe-storage/datasafe-storage-impl-s3/src/main/java/de/adorsys/datasafe/storage/impl/s3/S3StorageService.java index 59d204569..439e207c9 100644 --- a/datasafe-storage/datasafe-storage-impl-s3/src/main/java/de/adorsys/datasafe/storage/impl/s3/S3StorageService.java +++ b/datasafe-storage/datasafe-storage-impl-s3/src/main/java/de/adorsys/datasafe/storage/impl/s3/S3StorageService.java @@ -45,12 +45,13 @@ public class S3StorageService implements StorageService { /** * @param s3 Connection to S3 - * @param bucketName Bucket to use + * @param region Region to use + * @param bucket Bucket to use * @param executorService Multipart sending threadpool (file chunks are sent in parallel) */ - public S3StorageService(AmazonS3 s3, String bucketName, ExecutorService executorService) { + public S3StorageService(AmazonS3 s3, String region, String bucket, ExecutorService executorService) { this.s3 = s3; - this.router = new StaticBucketRouter(bucketName); + this.router = new StaticBucketRouter(region, bucket); this.executorService = executorService; } diff --git a/datasafe-storage/datasafe-storage-impl-s3/src/main/java/de/adorsys/datasafe/storage/impl/s3/StaticBucketRouter.java b/datasafe-storage/datasafe-storage-impl-s3/src/main/java/de/adorsys/datasafe/storage/impl/s3/StaticBucketRouter.java index 2c43345b5..444ba1279 100644 --- a/datasafe-storage/datasafe-storage-impl-s3/src/main/java/de/adorsys/datasafe/storage/impl/s3/StaticBucketRouter.java +++ b/datasafe-storage/datasafe-storage-impl-s3/src/main/java/de/adorsys/datasafe/storage/impl/s3/StaticBucketRouter.java @@ -8,6 +8,7 @@ @RequiredArgsConstructor public class StaticBucketRouter implements BucketRouter { + private final String region; private final String bucketName; @Override @@ -20,10 +21,11 @@ public String resourceKey(AbsoluteLocation resource) { UnaryOperator trimStartingSlash = str -> str.replaceFirst("^/", ""); String resourcePath = trimStartingSlash.apply(resource.location().getRawPath()); - if (bucketName == null || "".equals(bucketName) || !resourcePath.contains(bucketName)) { + String bucketNameWithRegion = region + "/" + bucketName; + if (bucketName == null || "".equals(bucketName) || !resourcePath.startsWith(bucketNameWithRegion)) { return resourcePath; } - return trimStartingSlash.apply(resourcePath.substring(resourcePath.indexOf(bucketName) + bucketName.length())); + return trimStartingSlash.apply(resourcePath.substring(resourcePath.indexOf(bucketNameWithRegion) + bucketNameWithRegion.length())); } } diff --git a/datasafe-storage/datasafe-storage-impl-s3/src/test/java/de/adorsys/datasafe/storage/impl/s3/S3SystemStorageServiceIT.java b/datasafe-storage/datasafe-storage-impl-s3/src/test/java/de/adorsys/datasafe/storage/impl/s3/S3SystemStorageServiceIT.java index ee66097af..535c517af 100644 --- a/datasafe-storage/datasafe-storage-impl-s3/src/test/java/de/adorsys/datasafe/storage/impl/s3/S3SystemStorageServiceIT.java +++ b/datasafe-storage/datasafe-storage-impl-s3/src/test/java/de/adorsys/datasafe/storage/impl/s3/S3SystemStorageServiceIT.java @@ -82,6 +82,7 @@ static void beforeAll() { void init() { this.storageService = new S3StorageService( s3, + "eu-central-1", bucketName, ExecutorServiceUtil.submitterExecutesOnStarvationExecutingService() ); diff --git a/datasafe-test-storages/src/test/java/de/adorsys/datasafe/teststorage/WithStorageProvider.java b/datasafe-test-storages/src/test/java/de/adorsys/datasafe/teststorage/WithStorageProvider.java index ba03f52c4..29f6e0b61 100644 --- a/datasafe-test-storages/src/test/java/de/adorsys/datasafe/teststorage/WithStorageProvider.java +++ b/datasafe-test-storages/src/test/java/de/adorsys/datasafe/teststorage/WithStorageProvider.java @@ -235,7 +235,7 @@ protected static StorageDescriptor minio() { StorageDescriptorName.MINIO, () -> { minioStorage.get(); - return new S3StorageService(minio, primaryBucket, EXECUTOR_SERVICE); + return new S3StorageService(minio, minioRegion, primaryBucket, EXECUTOR_SERVICE); }, new Uri("s3://" + primaryBucket + "/" + bucketPath + "/"), minioAccessKeyID, @@ -254,7 +254,7 @@ protected static StorageDescriptor cephVersioned() { StorageDescriptorName.CEPH, () -> { cephStorage.get(); - return new S3StorageService(ceph, primaryBucket, EXECUTOR_SERVICE); + return new S3StorageService(ceph, cephRegion, primaryBucket, EXECUTOR_SERVICE); }, new Uri("s3://" + primaryBucket + "/" + bucketPath + "/"), cephAccessKeyID, @@ -275,10 +275,10 @@ private static boolean skipCeph() { protected static Function storageServiceByBucket() { if (null == amazonS3) { - return bucketName -> new S3StorageService(minio, bucketName, EXECUTOR_SERVICE); + return bucketName -> new S3StorageService(minio, amazonRegion, bucketName, EXECUTOR_SERVICE); } - return bucketName -> new S3StorageService(amazonS3, bucketName, EXECUTOR_SERVICE); + return bucketName -> new S3StorageService(amazonS3, amazonRegion, bucketName, EXECUTOR_SERVICE); } protected static StorageDescriptor s3() { @@ -290,7 +290,7 @@ protected static StorageDescriptor s3() { StorageDescriptorName.AMAZON, () -> { amazonStorage.get(); - return new S3StorageService(amazonS3, primaryBucket, EXECUTOR_SERVICE); + return new S3StorageService(amazonS3, amazonRegion, primaryBucket, EXECUTOR_SERVICE); }, new Uri("s3://" + primaryBucket + "/" + bucketPath + "/"), amazonAccessKeyID,