Skip to content

Commit 7800496

Browse files
authored
feat: enhance exception messages with request IDs and metadata (#1248)
1 parent 9b0dca6 commit 7800496

File tree

6 files changed

+38
-11
lines changed

6 files changed

+38
-11
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"id": "8571dd20-b6a8-4cab-9e2a-567e273a016f",
3+
"type": "feature",
4+
"description": "Add request IDs to exception messages where available",
5+
"issues": [
6+
"awslabs/aws-sdk-kotlin#1212"
7+
]
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"id": "de403702-531d-4f43-bc33-aa5bc2fc000f",
3+
"type": "feature",
4+
"description": "Add error metadata to ServiceException messages when a service-provided message isn't available",
5+
"issues": [
6+
"awslabs/aws-sdk-kotlin#1212"
7+
]
8+
}

codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/customization/s3/S3ErrorMetadataIntegration.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,16 @@ class S3ErrorMetadataIntegration : KotlinIntegration {
4848
}
4949
}
5050

51-
// SectionWriter to override the default sdkErrorMetadata for S3's version
51+
// SectionWriter to override the default sdkErrorMetadata and displayMetadata for S3's version
5252
private val addSdkErrorMetadataWriter = AppendingSectionWriter { writer ->
53-
writer.write("override val sdkErrorMetadata: S3ErrorMetadata = S3ErrorMetadata()")
53+
writer
54+
.write("override val sdkErrorMetadata: S3ErrorMetadata = S3ErrorMetadata()")
55+
.write("")
56+
.withBlock("override val displayMetadata: List<String>", "") {
57+
withBlock("get() =", "") {
58+
write("super.displayMetadata + ")
59+
write("""listOfNotNull(sdkErrorMetadata.requestId2?.let { "Extended request ID: ${'$'}it" })""")
60+
}
61+
}
5462
}
5563
}

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ coroutines-version = "1.7.3"
99
atomicfu-version = "0.23.1"
1010

1111
# smithy-kotlin codegen and runtime are versioned separately
12-
smithy-kotlin-runtime-version = "1.0.16"
13-
smithy-kotlin-codegen-version = "0.30.17"
12+
smithy-kotlin-runtime-version = "1.0.17"
13+
smithy-kotlin-codegen-version = "0.30.18"
1414

1515
# codegen
1616
smithy-version = "1.42.0"

services/s3/common/test/aws/sdk/kotlin/services/s3/internal/GetBucketLocationOperationDeserializerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,6 @@ class GetBucketLocationOperationDeserializerTest {
6767
}
6868
}
6969

70-
assertEquals("Some message", exception.message)
70+
assertEquals("Some message, Request ID: Some request ID", exception.message)
7171
}
7272
}

services/s3/common/test/aws/sdk/kotlin/services/s3/internal/Handle200ErrorsInterceptorTest.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import kotlin.test.Test
2020
import kotlin.test.assertEquals
2121
import kotlin.test.assertFailsWith
2222

23+
private const val REQUEST_ID = "K2H6N7ZGQT6WHCEG"
24+
private const val EXT_REQUEST_ID = "WWoZlnK4pTjKCYn6eNV7GgOurabfqLkjbSyqTvDMGBaI9uwzyNhSaDhOCPs8paFGye7S6b/AB3A="
25+
2326
class Handle200ErrorsInterceptorTest {
2427

2528
object TestCredentialsProvider : CredentialsProvider {
@@ -29,8 +32,8 @@ class Handle200ErrorsInterceptorTest {
2932
<Error>
3033
<Code>SlowDown</Code>
3134
<Message>Please reduce your request rate.</Message>
32-
<RequestId>K2H6N7ZGQT6WHCEG</RequestId>
33-
<HostId>WWoZlnK4pTjKCYn6eNV7GgOurabfqLkjbSyqTvDMGBaI9uwzyNhSaDhOCPs8paFGye7S6b/AB3A=</HostId>
35+
<RequestId>$REQUEST_ID</RequestId>
36+
<HostId>$EXT_REQUEST_ID</HostId>
3437
</Error>
3538
""".trimIndent().encodeToByteArray()
3639

@@ -53,9 +56,9 @@ class Handle200ErrorsInterceptorTest {
5356
val expectedMessage = "Please reduce your request rate."
5457
assertEquals("SlowDown", ex.sdkErrorMetadata.errorCode)
5558
assertEquals(expectedMessage, ex.sdkErrorMetadata.errorMessage)
56-
assertEquals(expectedMessage, ex.message)
57-
assertEquals("K2H6N7ZGQT6WHCEG", ex.sdkErrorMetadata.requestId)
58-
assertEquals("WWoZlnK4pTjKCYn6eNV7GgOurabfqLkjbSyqTvDMGBaI9uwzyNhSaDhOCPs8paFGye7S6b/AB3A=", ex.sdkErrorMetadata.requestId2)
59+
assertEquals("$expectedMessage, Request ID: $REQUEST_ID, Extended request ID: $EXT_REQUEST_ID", ex.message)
60+
assertEquals(REQUEST_ID, ex.sdkErrorMetadata.requestId)
61+
assertEquals(EXT_REQUEST_ID, ex.sdkErrorMetadata.requestId2)
5962
}
6063

6164
@Test
@@ -107,7 +110,7 @@ class Handle200ErrorsInterceptorTest {
107110
s3.deleteObjects { bucket = "test" }
108111
}
109112
val expectedMessage = "Please use less foos."
110-
assertEquals(expectedMessage, ex.message)
113+
assertEquals("$expectedMessage, Request ID: rid, Extended request ID: rid2", ex.message)
111114
assertEquals(expectedMessage, ex.sdkErrorMetadata.errorMessage)
112115
assertEquals("FooError", ex.sdkErrorMetadata.errorCode)
113116
assertEquals("rid", ex.sdkErrorMetadata.requestId)

0 commit comments

Comments
 (0)