Skip to content

Commit 24d137f

Browse files
authored
Merge pull request #53 from duzinkie/s3express-support
support for s3 express one zone
2 parents bdcb982 + d5713da commit 24d137f

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

s3buildcache/src/main/kotlin/androidx/build/gradle/s3buildcache/S3BuildCache.kt

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ abstract class S3BuildCache : RemoteGradleBuildCache() {
3131

3232
/**
3333
* Whether to use reduced redundancy.
34+
* When using S3 Express One Zone, set to false
3435
* @see <a href="https://aws.amazon.com/s3/reduced-redundancy/">Reduced Redundancy</a>
3536
* */
3637
var reducedRedundancy: Boolean = true

s3buildcache/src/main/kotlin/androidx/build/gradle/s3buildcache/S3StorageService.kt

+17-7
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@ import androidx.build.gradle.core.FileHandleInputStream
2121
import androidx.build.gradle.core.FileHandleInputStream.Companion.handleInputStream
2222
import androidx.build.gradle.core.StorageService
2323
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
2427
import software.amazon.awssdk.core.sync.RequestBody
2528
import software.amazon.awssdk.services.s3.S3Client
2629
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest
2730
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
2833
import software.amazon.awssdk.services.s3.model.PutObjectRequest
2934
import software.amazon.awssdk.services.s3.model.StorageClass.REDUCED_REDUNDANCY
30-
import software.amazon.awssdk.services.s3.model.StorageClass.STANDARD
3135
import java.io.InputStream
3236
import 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

Comments
 (0)