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 d0f300e11..c93905980 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 @@ -135,6 +135,7 @@ void initDatasafe() { accessKey(CREDENTIALS), secretKey(CREDENTIALS) ), + REGION, CREDENTIALS, EXECUTOR ); @@ -156,6 +157,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 668c119c0..622d33d67 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 @@ -106,6 +106,7 @@ void testMultiUserStorageUserSetup() { StorageService directoryStorage = new S3StorageService( directoryClient, DIRECTORY_BUCKET.getBucketName(), + REGION, EXECUTOR ); @@ -135,6 +136,7 @@ void testMultiUserStorageUserSetup() { ), // Bucket name is encoded in first path segment acc.getBucketName(), + acc.getRegion(), 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 0258e85d6..0dd58dd8e 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 12dae475d..d5ad46a28 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 @@ -131,6 +131,7 @@ StorageService clientCredentials(AmazonS3 s3, S3Factory factory, DatasafePropert ExecutorService executorService = ExecutorServiceUtil.submitterExecutesOnStarvationExecutingService(); S3StorageService basicStorage = new S3StorageService( s3, + properties.getAmazonRegion(), properties.getBucketName(), executorService ); @@ -184,6 +185,7 @@ StorageService singleStorageServiceFilesystem(DatasafeProperties properties) { StorageService singleStorageServiceS3(AmazonS3 s3, DatasafeProperties properties) { return new S3StorageService( s3, + properties.getAmazonRegion(), properties.getBucketName(), ExecutorServiceUtil.submitterExecutesOnStarvationExecutingService() ); @@ -202,7 +204,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 f2113b056..67e6ed07f 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 @@ -298,6 +298,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 398bf8735..a3eec4ded 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 5c50d8c2b..9495840c9 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,