From 6c08737d25644854d5a92c52b0a83d3fb6203105 Mon Sep 17 00:00:00 2001 From: Ziqi Wang Date: Wed, 6 Mar 2024 11:58:48 -0800 Subject: [PATCH] fix the test --- .../nrtsearch/server/module/S3Module.java | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/yelp/nrtsearch/server/module/S3Module.java b/src/main/java/com/yelp/nrtsearch/server/module/S3Module.java index 0c14c6f55..c62758561 100644 --- a/src/main/java/com/yelp/nrtsearch/server/module/S3Module.java +++ b/src/main/java/com/yelp/nrtsearch/server/module/S3Module.java @@ -25,6 +25,7 @@ import com.amazonaws.retry.RetryPolicy; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import com.amazonaws.services.s3.model.AmazonS3Exception; import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Provides; @@ -51,24 +52,34 @@ protected AmazonS3 providesAmazonS3(LuceneServerConfiguration luceneServerConfig awsCredentialsProvider = new ProfileCredentialsProvider(profilesConfigFile, "default"); } final boolean globalBucketAccess = luceneServerConfiguration.getEnableGlobalBucketAccess(); - AmazonS3 s3ClientInterim = - AmazonS3ClientBuilder.standard() - .withCredentials(awsCredentialsProvider) - .withForceGlobalBucketAccessEnabled(globalBucketAccess) - .build(); - String region = s3ClientInterim.getBucketLocation(luceneServerConfiguration.getBucketName()); - // In useast-1, the region is returned as "US" which is an equivalent to "us-east-1" - // https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/Region.html#US_Standard - // However, this causes an UnknownHostException so we override it to the full region name - if (region.equals("US")) { - region = "us-east-1"; - } - String serviceEndpoint = String.format("s3.%s.amazonaws.com", region); - logger.info(String.format("S3 ServiceEndpoint: %s", serviceEndpoint)); + AmazonS3ClientBuilder clientBuilder = AmazonS3ClientBuilder.standard() .withCredentials(awsCredentialsProvider) - .withEndpointConfiguration(new EndpointConfiguration(serviceEndpoint, region)); + .withForceGlobalBucketAccessEnabled(globalBucketAccess); + try { + AmazonS3 s3ClientInterim = + AmazonS3ClientBuilder.standard() + .withCredentials(awsCredentialsProvider) + .withForceGlobalBucketAccessEnabled(globalBucketAccess) + .build(); + String region = s3ClientInterim.getBucketLocation(luceneServerConfiguration.getBucketName()); + // In useast-1, the region is returned as "US" which is an equivalent to "us-east-1" + // https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/Region.html#US_Standard + // However, this causes an UnknownHostException so we override it to the full region name + if (region.equals("US")) { + region = "us-east-1"; + } + String serviceEndpoint = String.format("s3.%s.amazonaws.com", region); + logger.info(String.format("S3 ServiceEndpoint: %s", serviceEndpoint)); + clientBuilder.withEndpointConfiguration(new EndpointConfiguration(serviceEndpoint, region)); + } catch (AmazonS3Exception amazonS3Exception) { + logger.warn( + "failed to get the location of S3 bucket: " + + luceneServerConfiguration.getBucketName() + + ". This could be caused by invalid credentials or invalid bucket name.", + amazonS3Exception); + } int maxRetries = luceneServerConfiguration.getMaxS3ClientRetries(); if (maxRetries > 0) { @@ -83,9 +94,6 @@ protected AmazonS3 providesAmazonS3(LuceneServerConfiguration luceneServerConfig clientBuilder.setClientConfiguration(clientConfiguration); } - if (globalBucketAccess) { - clientBuilder.enableForceGlobalBucketAccess(); - } return clientBuilder.build(); } }