@@ -21,13 +21,17 @@ import androidx.build.gradle.core.FileHandleInputStream
21
21
import androidx.build.gradle.core.FileHandleInputStream.Companion.handleInputStream
22
22
import androidx.build.gradle.core.StorageService
23
23
import 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
24
27
import software.amazon.awssdk.core.sync.RequestBody
25
28
import software.amazon.awssdk.services.s3.S3Client
26
29
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest
27
30
import 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
28
33
import software.amazon.awssdk.services.s3.model.PutObjectRequest
29
34
import software.amazon.awssdk.services.s3.model.StorageClass.REDUCED_REDUNDANCY
30
- import software.amazon.awssdk.services.s3.model.StorageClass.STANDARD
31
35
import java.io.InputStream
32
36
import kotlin.io.path.outputStream
33
37
@@ -74,7 +78,11 @@ class S3StorageService(
74
78
val request = PutObjectRequest .builder()
75
79
.bucket(bucketName)
76
80
.key(cacheKey)
77
- .storageClass(if (reducedRedundancy) REDUCED_REDUNDANCY else STANDARD )
81
+ .apply {
82
+ if (reducedRedundancy) {
83
+ storageClass(REDUCED_REDUNDANCY )
84
+ }
85
+ }
78
86
.build()
79
87
logger.info(" Storing $cacheKey via $request " )
80
88
return store(client, request, contents)
@@ -101,11 +109,13 @@ class S3StorageService(
101
109
102
110
override fun validateConfiguration () {
103
111
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 ) {
109
119
logger.warn(" Couldn't validate S3 client config: ${e.message} " )
110
120
}
111
121
}
0 commit comments