Skip to content

DeserializationException on DDB ResourceInUse #356

@cprice404

Description

@cprice404

Describe the bug

In the DynamoDB SDK: making a createTable request for a table that already exists results in:

aws.smithy.kotlin.runtime.serde.DeserializationException: Unexpected token type EndDocument

Expected Behavior

Should throw a ResourceInUse exception or similar

Current Behavior


Unexpected token type EndDocument
aws.smithy.kotlin.runtime.serde.DeserializationException: Unexpected token type EndDocument
	at app//aws.smithy.kotlin.runtime.serde.json.JsonDeserializer.deserializeStruct(JsonDeserializer.kt:73)
	at app//aws.smithy.kotlin.runtime.serde.DeserializerKt.deserializeStruct(Deserializer.kt:200)
	at app//aws.sdk.kotlin.services.dynamodb.transform.ResourceInUseExceptionDeserializerKt.deserializeResourceInUseExceptionError(ResourceInUseExceptionDeserializer.kt:45)
	at app//aws.sdk.kotlin.services.dynamodb.transform.ResourceInUseExceptionDeserializerKt.access$deserializeResourceInUseExceptionError(ResourceInUseExceptionDeserializer.kt:1)
	at app//aws.sdk.kotlin.services.dynamodb.transform.ResourceInUseExceptionDeserializer.deserialize(ResourceInUseExceptionDeserializer.kt:32)
	at app//aws.sdk.kotlin.services.dynamodb.transform.CreateTableOperationDeserializerKt.throwCreateTableError(CreateTableOperationDeserializer.kt:85)
	at app//aws.sdk.kotlin.services.dynamodb.transform.CreateTableOperationDeserializerKt.access$throwCreateTableError(CreateTableOperationDeserializer.kt:1)
	at app//aws.sdk.kotlin.services.dynamodb.transform.CreateTableOperationDeserializer.deserialize(CreateTableOperationDeserializer.kt:35)
	at app//aws.smithy.kotlin.runtime.http.operation.SdkOperationExecutionKt$decorate$3.invoke(SdkOperationExecution.kt:97)
	at app//aws.smithy.kotlin.runtime.http.operation.SdkOperationExecutionKt$decorate$3.invoke(SdkOperationExecution.kt:97)
	at app//aws.smithy.kotlin.runtime.http.operation.DeserializeHandler.call(SdkOperationExecution.kt:153)
	at app//aws.smithy.kotlin.runtime.http.operation.DeserializeHandler$call$1.invokeSuspend(SdkOperationExecution.kt)

Steps to Reproduce

Run this twice:

   val request = CreateTableRequest {
            this.tableName = "foo"
            attributeDefinitions = listOf(
                AttributeDefinition {
                    attributeName = "myKey"
                    attributeType = ScalarAttributeType.S
                }
            )
            keySchema = listOf(
                KeySchemaElement {
                    attributeName = "myKey"
                    keyType = KeyType.Hash
                }
            )
            provisionedThroughput = ProvisionedThroughput {
                readCapacityUnits = 10
                writeCapacityUnits = 10
            }
        }

Possible Solution

Seems like just a basic deserialization bug

Context

Writing code that should catch the ResourceInUse exception and handle it; will probably be
forced to temporarliy catch this DeserializationException instead.

Your Environment

  • AWS Kotlin SDK version used: 0.7.0-alpha
  • Platform (JVM/JS/Native): JVM
  • Operating System and version: Mac OSX Big Sur

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue is a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions