@@ -21,13 +21,17 @@ import androidx.build.gradle.core.FileHandleInputStream
2121import androidx.build.gradle.core.FileHandleInputStream.Companion.handleInputStream
2222import androidx.build.gradle.core.StorageService
2323import org.gradle.api.logging.Logging
24+ import software.amazon.awssdk.core.exception.SdkClientException
25+ import software.amazon.awssdk.core.exception.SdkException
26+ import software.amazon.awssdk.core.exception.SdkServiceException
2427import software.amazon.awssdk.core.sync.RequestBody
2528import software.amazon.awssdk.services.s3.S3Client
2629import software.amazon.awssdk.services.s3.model.DeleteObjectRequest
2730import software.amazon.awssdk.services.s3.model.GetObjectRequest
31+ import software.amazon.awssdk.services.s3.model.HeadBucketRequest
32+ import software.amazon.awssdk.services.s3.model.NoSuchBucketException
2833import software.amazon.awssdk.services.s3.model.PutObjectRequest
2934import software.amazon.awssdk.services.s3.model.StorageClass.REDUCED_REDUNDANCY
30- import software.amazon.awssdk.services.s3.model.StorageClass.STANDARD
3135import java.io.InputStream
3236import kotlin.io.path.outputStream
3337
@@ -74,7 +78,11 @@ class S3StorageService(
7478 val request = PutObjectRequest .builder()
7579 .bucket(bucketName)
7680 .key(cacheKey)
77- .storageClass(if (reducedRedundancy) REDUCED_REDUNDANCY else STANDARD )
81+ .apply {
82+ if (reducedRedundancy) {
83+ storageClass(REDUCED_REDUNDANCY )
84+ }
85+ }
7886 .build()
7987 logger.info(" Storing $cacheKey via $request " )
8088 return store(client, request, contents)
@@ -101,11 +109,13 @@ class S3StorageService(
101109
102110 override fun validateConfiguration () {
103111 try {
104- val buckets = client.listBuckets().buckets()
105- if (buckets.none { bucket -> bucket.name() == bucketName }) {
106- throw Exception (" Bucket $bucketName under project $region cannot be found or is not accessible using the provided credentials" )
107- }
108- } catch (e: Exception ) {
112+ client.headBucket(HeadBucketRequest .builder().bucket(bucketName).build())
113+ } catch (e: NoSuchBucketException ) {
114+ throw Exception (" Bucket $bucketName in $region cannot be found: ${e.message} " )
115+ } catch (e: SdkServiceException ) {
116+ throw Exception (" AWS SDK exception on validating access to $bucketName in $region : ${e::class .simpleName} - ${e.message} " )
117+ }
118+ catch (e: Exception ) {
109119 logger.warn(" Couldn't validate S3 client config: ${e.message} " )
110120 }
111121 }
0 commit comments