diff --git a/.changes/220eb2c9-2f5b-4ebb-bc30-901bdedc1a4c.json b/.changes/220eb2c9-2f5b-4ebb-bc30-901bdedc1a4c.json new file mode 100644 index 00000000000..38a51e06339 --- /dev/null +++ b/.changes/220eb2c9-2f5b-4ebb-bc30-901bdedc1a4c.json @@ -0,0 +1,5 @@ +{ + "id": "220eb2c9-2f5b-4ebb-bc30-901bdedc1a4c", + "type": "bugfix", + "description": "⚠️ **IMPORTANT**: Update to the latest S3 model, which correctly models `ReplicationRuleFilter` and `LifecycleRuleFilter` as structures (not unions). This may cause compilation failures in existing code which references these two shapes." +} diff --git a/codegen/sdk/aws-models/s3.json b/codegen/sdk/aws-models/s3.json index 3b02edc71dd..fc155a8427a 100644 --- a/codegen/sdk/aws-models/s3.json +++ b/codegen/sdk/aws-models/s3.json @@ -26084,7 +26084,7 @@ } }, "com.amazonaws.s3#LifecycleRuleFilter": { - "type": "union", + "type": "structure", "members": { "Prefix": { "target": "com.amazonaws.s3#Prefix", @@ -32311,7 +32311,7 @@ } }, "com.amazonaws.s3#ReplicationRuleFilter": { - "type": "union", + "type": "structure", "members": { "Prefix": { "target": "com.amazonaws.s3#Prefix", diff --git a/services/s3/e2eTest/src/MutliRegionAccessPointTest.kt b/services/s3/e2eTest/src/MutliRegionAccessPointTest.kt index 9c3cb087fa6..49630763536 100644 --- a/services/s3/e2eTest/src/MutliRegionAccessPointTest.kt +++ b/services/s3/e2eTest/src/MutliRegionAccessPointTest.kt @@ -8,8 +8,8 @@ import aws.sdk.kotlin.e2etest.S3TestUtils.createMultiRegionAccessPoint import aws.sdk.kotlin.e2etest.S3TestUtils.deleteBucketAndAllContents import aws.sdk.kotlin.e2etest.S3TestUtils.deleteMultiRegionAccessPoint import aws.sdk.kotlin.e2etest.S3TestUtils.getAccountId +import aws.sdk.kotlin.e2etest.S3TestUtils.getBucketWithPrefix import aws.sdk.kotlin.e2etest.S3TestUtils.getMultiRegionAccessPointArn -import aws.sdk.kotlin.e2etest.S3TestUtils.getTestBucket import aws.sdk.kotlin.e2etest.S3TestUtils.multiRegionAccessPointWasCreated import aws.sdk.kotlin.services.s3.S3Client import aws.sdk.kotlin.services.s3.deleteObject @@ -27,6 +27,8 @@ import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith +private const val MRAP_BUCKET_PREFIX = "s3-mrap-test-bucket-" + @TestInstance(TestInstance.Lifecycle.PER_CLASS) class MutliRegionAccessPointTest { private val s3West = S3Client { region = "us-west-2" } @@ -45,8 +47,8 @@ class MutliRegionAccessPointTest { @BeforeAll private fun setUp(): Unit = runBlocking { accountId = getAccountId() - usWestBucket = getTestBucket(s3West, "us-west-2", accountId) - usEastBucket = getTestBucket(s3East, "us-east-2", accountId) + usWestBucket = getBucketWithPrefix(s3West, MRAP_BUCKET_PREFIX, "us-west-2", accountId) + usEastBucket = getBucketWithPrefix(s3East, MRAP_BUCKET_PREFIX, "us-east-2", accountId) createMultiRegionAccessPoint( s3Control, diff --git a/services/s3/e2eTest/src/S3TestUtils.kt b/services/s3/e2eTest/src/S3TestUtils.kt index 91f8b846261..6247ac2f129 100644 --- a/services/s3/e2eTest/src/S3TestUtils.kt +++ b/services/s3/e2eTest/src/S3TestUtils.kt @@ -10,7 +10,6 @@ import aws.sdk.kotlin.services.s3.model.* import aws.sdk.kotlin.services.s3.model.BucketLocationConstraint import aws.sdk.kotlin.services.s3.model.ExpirationStatus import aws.sdk.kotlin.services.s3.model.LifecycleRule -import aws.sdk.kotlin.services.s3.model.LifecycleRuleFilter import aws.sdk.kotlin.services.s3.paginators.listObjectsV2Paginated import aws.sdk.kotlin.services.s3.waiters.waitUntilBucketExists import aws.sdk.kotlin.services.s3.waiters.waitUntilBucketNotExists @@ -46,11 +45,11 @@ object S3TestUtils { accountId: String? = null, ): String = getBucketWithPrefix(client, TEST_BUCKET_PREFIX, region, accountId) - private suspend fun getBucketWithPrefix( + suspend fun getBucketWithPrefix( client: S3Client, prefix: String, - region: String?, - accountId: String?, + region: String? = null, + accountId: String? = null, ): String = withTimeout(60.seconds) { val buckets = client.listBuckets() .buckets @@ -88,7 +87,7 @@ object S3TestUtils { rules = listOf( LifecycleRule { expiration { days = 1 } - filter = LifecycleRuleFilter.Prefix("") + filter { this.prefix = "" } status = ExpirationStatus.Enabled id = "delete-old" },