From c96da5157b12349b184c56e0a4fdb90717a10198 Mon Sep 17 00:00:00 2001 From: awstools Date: Tue, 3 Dec 2024 19:15:21 +0000 Subject: [PATCH] feat(client-dynamodb): This change adds support for global tables with multi-Region strong consistency (in preview). The UpdateTable API now supports a new attribute MultiRegionConsistency to set consistency when creating global tables. The DescribeTable output now optionally includes the MultiRegionConsistency attribute. --- .../src/commands/CreateTableCommand.ts | 1 + .../src/commands/DeleteItemCommand.ts | 3 + .../src/commands/DeleteTableCommand.ts | 1 + .../src/commands/DescribeTableCommand.ts | 1 + .../src/commands/PutItemCommand.ts | 3 + .../commands/RestoreTableFromBackupCommand.ts | 1 + .../RestoreTableToPointInTimeCommand.ts | 1 + .../src/commands/UpdateItemCommand.ts | 3 + .../src/commands/UpdateTableCommand.ts | 2 + .../client-dynamodb/src/endpoint/ruleset.ts | 2 +- .../client-dynamodb/src/models/models_0.ts | 75 +++++++++++++++++++ .../src/protocols/Aws_json1_0.ts | 23 ++++++ codegen/sdk-codegen/aws-models/dynamodb.json | 54 ++++++++++++- 13 files changed, 167 insertions(+), 3 deletions(-) diff --git a/clients/client-dynamodb/src/commands/CreateTableCommand.ts b/clients/client-dynamodb/src/commands/CreateTableCommand.ts index 94e890fcd389..41f5ea85b170 100644 --- a/clients/client-dynamodb/src/commands/CreateTableCommand.ts +++ b/clients/client-dynamodb/src/commands/CreateTableCommand.ts @@ -310,6 +310,7 @@ export interface CreateTableCommandOutput extends CreateTableOutput, __MetadataB * // WriteUnitsPerSecond: Number("long"), * // Status: "CREATING" || "UPDATING" || "DELETING" || "ACTIVE" || "INACCESSIBLE_ENCRYPTION_CREDENTIALS" || "ARCHIVING" || "ARCHIVED", * // }, + * // MultiRegionConsistency: "EVENTUAL" || "STRONG", * // }, * // }; * diff --git a/clients/client-dynamodb/src/commands/DeleteItemCommand.ts b/clients/client-dynamodb/src/commands/DeleteItemCommand.ts index d7c386990ece..8fcc33598412 100644 --- a/clients/client-dynamodb/src/commands/DeleteItemCommand.ts +++ b/clients/client-dynamodb/src/commands/DeleteItemCommand.ts @@ -224,6 +224,9 @@ export interface DeleteItemCommandOutput extends DeleteItemOutput, __MetadataBea * successful, unless your retry queue is too large to finish. Reduce the frequency of * requests and use exponential backoff. For more information, go to Error Retries and Exponential Backoff in the Amazon DynamoDB Developer Guide.

* + * @throws {@link ReplicatedWriteConflictException} (client fault) + *

The request was rejected because one or more items in the request are being modified by a request in another Region.

+ * * @throws {@link RequestLimitExceeded} (client fault) *

Throughput exceeds the current throughput quota for your account. Please contact * Amazon Web Services Support to request a diff --git a/clients/client-dynamodb/src/commands/DeleteTableCommand.ts b/clients/client-dynamodb/src/commands/DeleteTableCommand.ts index f49209f90d57..02cdbbb11ee1 100644 --- a/clients/client-dynamodb/src/commands/DeleteTableCommand.ts +++ b/clients/client-dynamodb/src/commands/DeleteTableCommand.ts @@ -231,6 +231,7 @@ export interface DeleteTableCommandOutput extends DeleteTableOutput, __MetadataB * // WriteUnitsPerSecond: Number("long"), * // Status: "CREATING" || "UPDATING" || "DELETING" || "ACTIVE" || "INACCESSIBLE_ENCRYPTION_CREDENTIALS" || "ARCHIVING" || "ARCHIVED", * // }, + * // MultiRegionConsistency: "EVENTUAL" || "STRONG", * // }, * // }; * diff --git a/clients/client-dynamodb/src/commands/DescribeTableCommand.ts b/clients/client-dynamodb/src/commands/DescribeTableCommand.ts index 5de3f3a3fa4b..d713909455e6 100644 --- a/clients/client-dynamodb/src/commands/DescribeTableCommand.ts +++ b/clients/client-dynamodb/src/commands/DescribeTableCommand.ts @@ -222,6 +222,7 @@ export interface DescribeTableCommandOutput extends DescribeTableOutput, __Metad * // WriteUnitsPerSecond: Number("long"), * // Status: "CREATING" || "UPDATING" || "DELETING" || "ACTIVE" || "INACCESSIBLE_ENCRYPTION_CREDENTIALS" || "ARCHIVING" || "ARCHIVED", * // }, + * // MultiRegionConsistency: "EVENTUAL" || "STRONG", * // }, * // }; * diff --git a/clients/client-dynamodb/src/commands/PutItemCommand.ts b/clients/client-dynamodb/src/commands/PutItemCommand.ts index a0cc9720cd6f..91611478dc6a 100644 --- a/clients/client-dynamodb/src/commands/PutItemCommand.ts +++ b/clients/client-dynamodb/src/commands/PutItemCommand.ts @@ -234,6 +234,9 @@ export interface PutItemCommandOutput extends PutItemOutput, __MetadataBearer {} * successful, unless your retry queue is too large to finish. Reduce the frequency of * requests and use exponential backoff. For more information, go to Error Retries and Exponential Backoff in the Amazon DynamoDB Developer Guide.

* + * @throws {@link ReplicatedWriteConflictException} (client fault) + *

The request was rejected because one or more items in the request are being modified by a request in another Region.

+ * * @throws {@link RequestLimitExceeded} (client fault) *

Throughput exceeds the current throughput quota for your account. Please contact * Amazon Web Services Support to request a diff --git a/clients/client-dynamodb/src/commands/RestoreTableFromBackupCommand.ts b/clients/client-dynamodb/src/commands/RestoreTableFromBackupCommand.ts index 8720ee921b07..bdbbc1597d8c 100644 --- a/clients/client-dynamodb/src/commands/RestoreTableFromBackupCommand.ts +++ b/clients/client-dynamodb/src/commands/RestoreTableFromBackupCommand.ts @@ -294,6 +294,7 @@ export interface RestoreTableFromBackupCommandOutput extends RestoreTableFromBac * // WriteUnitsPerSecond: Number("long"), * // Status: "CREATING" || "UPDATING" || "DELETING" || "ACTIVE" || "INACCESSIBLE_ENCRYPTION_CREDENTIALS" || "ARCHIVING" || "ARCHIVED", * // }, + * // MultiRegionConsistency: "EVENTUAL" || "STRONG", * // }, * // }; * diff --git a/clients/client-dynamodb/src/commands/RestoreTableToPointInTimeCommand.ts b/clients/client-dynamodb/src/commands/RestoreTableToPointInTimeCommand.ts index 38b69c00f285..6acee992c7b2 100644 --- a/clients/client-dynamodb/src/commands/RestoreTableToPointInTimeCommand.ts +++ b/clients/client-dynamodb/src/commands/RestoreTableToPointInTimeCommand.ts @@ -322,6 +322,7 @@ export interface RestoreTableToPointInTimeCommandOutput extends RestoreTableToPo * // WriteUnitsPerSecond: Number("long"), * // Status: "CREATING" || "UPDATING" || "DELETING" || "ACTIVE" || "INACCESSIBLE_ENCRYPTION_CREDENTIALS" || "ARCHIVING" || "ARCHIVED", * // }, + * // MultiRegionConsistency: "EVENTUAL" || "STRONG", * // }, * // }; * diff --git a/clients/client-dynamodb/src/commands/UpdateItemCommand.ts b/clients/client-dynamodb/src/commands/UpdateItemCommand.ts index de11e96d7de6..52f81d80efeb 100644 --- a/clients/client-dynamodb/src/commands/UpdateItemCommand.ts +++ b/clients/client-dynamodb/src/commands/UpdateItemCommand.ts @@ -227,6 +227,9 @@ export interface UpdateItemCommandOutput extends UpdateItemOutput, __MetadataBea * successful, unless your retry queue is too large to finish. Reduce the frequency of * requests and use exponential backoff. For more information, go to Error Retries and Exponential Backoff in the Amazon DynamoDB Developer Guide.

* + * @throws {@link ReplicatedWriteConflictException} (client fault) + *

The request was rejected because one or more items in the request are being modified by a request in another Region.

+ * * @throws {@link RequestLimitExceeded} (client fault) *

Throughput exceeds the current throughput quota for your account. Please contact * Amazon Web Services Support to request a diff --git a/clients/client-dynamodb/src/commands/UpdateTableCommand.ts b/clients/client-dynamodb/src/commands/UpdateTableCommand.ts index 65b07193b9c7..9c631a528785 100644 --- a/clients/client-dynamodb/src/commands/UpdateTableCommand.ts +++ b/clients/client-dynamodb/src/commands/UpdateTableCommand.ts @@ -184,6 +184,7 @@ export interface UpdateTableCommandOutput extends UpdateTableOutput, __MetadataB * ], * TableClass: "STANDARD" || "STANDARD_INFREQUENT_ACCESS", * DeletionProtectionEnabled: true || false, + * MultiRegionConsistency: "EVENTUAL" || "STRONG", * OnDemandThroughput: { * MaxReadRequestUnits: Number("long"), * MaxWriteRequestUnits: Number("long"), @@ -364,6 +365,7 @@ export interface UpdateTableCommandOutput extends UpdateTableOutput, __MetadataB * // WriteUnitsPerSecond: Number("long"), * // Status: "CREATING" || "UPDATING" || "DELETING" || "ACTIVE" || "INACCESSIBLE_ENCRYPTION_CREDENTIALS" || "ARCHIVING" || "ARCHIVED", * // }, + * // MultiRegionConsistency: "EVENTUAL" || "STRONG", * // }, * // }; * diff --git a/clients/client-dynamodb/src/endpoint/ruleset.ts b/clients/client-dynamodb/src/endpoint/ruleset.ts index 01abfd47f74d..b3871d750018 100644 --- a/clients/client-dynamodb/src/endpoint/ruleset.ts +++ b/clients/client-dynamodb/src/endpoint/ruleset.ts @@ -47,5 +47,5 @@ D=[k], E=[l], F=[n], G=[o,{[J]:g,[K]:[p,"disabled"]}]; -const _data={version:"1.0",parameters:{Region:i,UseDualStack:j,UseFIPS:j,Endpoint:i,AccountId:i,AccountIdEndpointMode:i},rules:[{conditions:[{[J]:b,[K]:[{[L]:"Endpoint"}]}],rules:[{conditions:D,error:"Invalid Configuration: FIPS and custom endpoint are not supported",[I]:c},{conditions:E,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",[I]:c},{endpoint:{[M]:"{Endpoint}",[N]:m,[O]:m},[I]:d}],[I]:e},{conditions:[{[J]:b,[K]:F}],rules:[{conditions:[{[J]:"aws.partition",[K]:F,assign:f}],rules:[{conditions:[{[J]:g,[K]:[n,"local"]}],rules:[{conditions:D,error:"Invalid Configuration: FIPS and local endpoint are not supported",[I]:c},{conditions:E,error:"Invalid Configuration: Dualstack and local endpoint are not supported",[I]:c},{endpoint:{[M]:"http://localhost:8000",[N]:{authSchemes:[{name:"sigv4",signingName:"dynamodb",signingRegion:"us-east-1"}]},[O]:m},[I]:d}],[I]:e},{conditions:[o,{[J]:g,[K]:[p,"required"]},{[J]:h,[K]:[q]}],error:"AccountIdEndpointMode is required but no AccountID was provided or able to be loaded.",[I]:c},{conditions:[q,s,u,v,{[J]:h,[K]:[{[J]:"isValidHostLabel",[K]:[r,a]}]}],error:"Credentials-sourced account ID parameter is invalid",[I]:c},{conditions:[k,l],rules:[{conditions:[w,x],rules:[{conditions:G,endpoint:y,[I]:d},{endpoint:y,[I]:d}],[I]:e},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",[I]:c}],[I]:e},{conditions:D,rules:[{conditions:[w],rules:[{conditions:[{[J]:g,[K]:[t,"aws-us-gov"]}],rules:[z,A],[I]:e},{conditions:G,endpoint:B,[I]:d},{endpoint:B,[I]:d}],[I]:e},{error:"FIPS is enabled but this partition does not support FIPS",[I]:c}],[I]:e},{conditions:E,rules:[{conditions:[x],rules:[{conditions:G,endpoint:C,[I]:d},{endpoint:C,[I]:d}],[I]:e},{error:"DualStack is enabled but this partition does not support DualStack",[I]:c}],[I]:e},z,{conditions:[q,s,u,v],endpoint:{[M]:"https://{AccountId}.ddb.{Region}.{PartitionResult#dnsSuffix}",[N]:m,[O]:m},[I]:d},A],[I]:e}],[I]:e},{error:"Invalid Configuration: Missing Region",[I]:c}]}; +const _data={version:"1.0",parameters:{Region:i,UseDualStack:j,UseFIPS:j,Endpoint:i,AccountId:i,AccountIdEndpointMode:i},rules:[{conditions:[{[J]:b,[K]:[{[L]:"Endpoint"}]}],rules:[{conditions:D,error:"Invalid Configuration: FIPS and custom endpoint are not supported",[I]:c},{conditions:E,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",[I]:c},{endpoint:{[M]:"{Endpoint}",[N]:m,[O]:m},[I]:d}],[I]:e},{conditions:[{[J]:b,[K]:F}],rules:[{conditions:[{[J]:"aws.partition",[K]:F,assign:f}],rules:[{conditions:[{[J]:g,[K]:[n,"local"]}],rules:[{conditions:D,error:"Invalid Configuration: FIPS and local endpoint are not supported",[I]:c},{conditions:E,error:"Invalid Configuration: Dualstack and local endpoint are not supported",[I]:c},{endpoint:{[M]:"http://localhost:8000",[N]:{authSchemes:[{signingRegion:"us-east-1",signingName:"dynamodb",name:"sigv4"}]},[O]:m},[I]:d}],[I]:e},{conditions:[o,{[J]:g,[K]:[p,"required"]},{[J]:h,[K]:[q]}],error:"AccountIdEndpointMode is required but no AccountID was provided or able to be loaded.",[I]:c},{conditions:[q,s,u,v,{[J]:h,[K]:[{[J]:"isValidHostLabel",[K]:[r,a]}]}],error:"Credentials-sourced account ID parameter is invalid",[I]:c},{conditions:[k,l],rules:[{conditions:[w,x],rules:[{conditions:G,endpoint:y,[I]:d},{endpoint:y,[I]:d}],[I]:e},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",[I]:c}],[I]:e},{conditions:D,rules:[{conditions:[w],rules:[{conditions:[{[J]:g,[K]:[t,"aws-us-gov"]}],rules:[z,A],[I]:e},{conditions:G,endpoint:B,[I]:d},{endpoint:B,[I]:d}],[I]:e},{error:"FIPS is enabled but this partition does not support FIPS",[I]:c}],[I]:e},{conditions:E,rules:[{conditions:[x],rules:[{conditions:G,endpoint:C,[I]:d},{endpoint:C,[I]:d}],[I]:e},{error:"DualStack is enabled but this partition does not support DualStack",[I]:c}],[I]:e},z,{conditions:[q,s,u,v],endpoint:{[M]:"https://{AccountId}.ddb.{Region}.{PartitionResult#dnsSuffix}",[N]:m,[O]:m},[I]:d},A],[I]:e}],[I]:e},{error:"Invalid Configuration: Missing Region",[I]:c}]}; export const ruleSet: RuleSetObject = _data; diff --git a/clients/client-dynamodb/src/models/models_0.ts b/clients/client-dynamodb/src/models/models_0.ts index 77aa19e4fb05..2f7ad27239ef 100644 --- a/clients/client-dynamodb/src/models/models_0.ts +++ b/clients/client-dynamodb/src/models/models_0.ts @@ -3143,6 +3143,20 @@ export interface LocalSecondaryIndexDescription { IndexArn?: string | undefined; } +/** + * @public + * @enum + */ +export const MultiRegionConsistency = { + EVENTUAL: "EVENTUAL", + STRONG: "STRONG", +} as const; + +/** + * @public + */ +export type MultiRegionConsistency = (typeof MultiRegionConsistency)[keyof typeof MultiRegionConsistency]; + /** *

Contains details for the restore.

* @public @@ -3612,6 +3626,26 @@ export interface TableDescription { * @public */ WarmThroughput?: TableWarmThroughputDescription | undefined; + + /** + *

Indicates one of the following consistency modes for a global table:

+ * + *

If you don't specify this field, the global table consistency mode defaults to EVENTUAL.

+ * @public + */ + MultiRegionConsistency?: MultiRegionConsistency | undefined; } /** @@ -3730,6 +3764,26 @@ export const ReturnValue = { */ export type ReturnValue = (typeof ReturnValue)[keyof typeof ReturnValue]; +/** + *

The request was rejected because one or more items in the request are being modified by a request in another Region.

+ * @public + */ +export class ReplicatedWriteConflictException extends __BaseException { + readonly name: "ReplicatedWriteConflictException" = "ReplicatedWriteConflictException"; + readonly $fault: "client" = "client"; + /** + * @internal + */ + constructor(opts: __ExceptionOptionType) { + super({ + name: "ReplicatedWriteConflictException", + $fault: "client", + ...opts, + }); + Object.setPrototypeOf(this, ReplicatedWriteConflictException.prototype); + } +} + /** *

Operation was rejected because there is an ongoing transaction for the * item.

@@ -7228,6 +7282,27 @@ export interface UpdateTableInput { */ DeletionProtectionEnabled?: boolean | undefined; + /** + *

Specifies the consistency mode for a new global table. This parameter is only valid when you create a global table by specifying one or more Create actions in the ReplicaUpdates action list.

+ *

You can specify one of the following consistency modes:

+ * + *

If you don't specify this parameter, the global table consistency mode defaults to EVENTUAL.

+ * @public + */ + MultiRegionConsistency?: MultiRegionConsistency | undefined; + /** *

Updates the maximum number of read and write units for the specified table in * on-demand capacity mode. If you use this parameter, you must specify diff --git a/clients/client-dynamodb/src/protocols/Aws_json1_0.ts b/clients/client-dynamodb/src/protocols/Aws_json1_0.ts index c2829824ac7b..5fb088ef936a 100644 --- a/clients/client-dynamodb/src/protocols/Aws_json1_0.ts +++ b/clients/client-dynamodb/src/protocols/Aws_json1_0.ts @@ -310,6 +310,7 @@ import { ReplicaNotFoundException, ReplicaSettingsDescription, ReplicaSettingsUpdate, + ReplicatedWriteConflictException, ReplicationGroupUpdate, ReplicaUpdate, RequestLimitExceeded, @@ -2289,6 +2290,9 @@ const de_CommandError = async (output: __HttpResponse, context: __SerdeContext): case "ConditionalCheckFailedException": case "com.amazonaws.dynamodb#ConditionalCheckFailedException": throw await de_ConditionalCheckFailedExceptionRes(parsedOutput, context); + case "ReplicatedWriteConflictException": + case "com.amazonaws.dynamodb#ReplicatedWriteConflictException": + throw await de_ReplicatedWriteConflictExceptionRes(parsedOutput, context); case "TransactionConflictException": case "com.amazonaws.dynamodb#TransactionConflictException": throw await de_TransactionConflictExceptionRes(parsedOutput, context); @@ -2734,6 +2738,22 @@ const de_ReplicaNotFoundExceptionRes = async ( return __decorateServiceException(exception, body); }; +/** + * deserializeAws_json1_0ReplicatedWriteConflictExceptionRes + */ +const de_ReplicatedWriteConflictExceptionRes = async ( + parsedOutput: any, + context: __SerdeContext +): Promise => { + const body = parsedOutput.body; + const deserialized: any = _json(body); + const exception = new ReplicatedWriteConflictException({ + $metadata: deserializeMetadata(parsedOutput), + ...deserialized, + }); + return __decorateServiceException(exception, body); +}; + /** * deserializeAws_json1_0RequestLimitExceededRes */ @@ -5305,6 +5325,8 @@ const de_ReplicaSettingsDescriptionList = (output: any, context: __SerdeContext) return retVal; }; +// de_ReplicatedWriteConflictException omitted. + // de_RequestLimitExceeded omitted. // de_ResourceInUseException omitted. @@ -5460,6 +5482,7 @@ const de_TableDescription = (output: any, context: __SerdeContext): TableDescrip LatestStreamArn: __expectString, LatestStreamLabel: __expectString, LocalSecondaryIndexes: _json, + MultiRegionConsistency: __expectString, OnDemandThroughput: _json, ProvisionedThroughput: (_: any) => de_ProvisionedThroughputDescription(_, context), Replicas: (_: any) => de_ReplicaDescriptionList(_, context), diff --git a/codegen/sdk-codegen/aws-models/dynamodb.json b/codegen/sdk-codegen/aws-models/dynamodb.json index a27219803eb6..7202e7d33b56 100644 --- a/codegen/sdk-codegen/aws-models/dynamodb.json +++ b/codegen/sdk-codegen/aws-models/dynamodb.json @@ -2460,6 +2460,9 @@ { "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" }, + { + "target": "com.amazonaws.dynamodb#ReplicatedWriteConflictException" + }, { "target": "com.amazonaws.dynamodb#RequestLimitExceeded" }, @@ -4038,9 +4041,9 @@ "properties": { "authSchemes": [ { - "name": "sigv4", + "signingRegion": "us-east-1", "signingName": "dynamodb", - "signingRegion": "us-east-1" + "name": "sigv4" } ] }, @@ -9234,6 +9237,23 @@ "target": "com.amazonaws.dynamodb#AttributeValue" } }, + "com.amazonaws.dynamodb#MultiRegionConsistency": { + "type": "enum", + "members": { + "EVENTUAL": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "EVENTUAL" + } + }, + "STRONG": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "STRONG" + } + } + } + }, "com.amazonaws.dynamodb#NextTokenString": { "type": "string" }, @@ -9719,6 +9739,9 @@ { "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" }, + { + "target": "com.amazonaws.dynamodb#ReplicatedWriteConflictException" + }, { "target": "com.amazonaws.dynamodb#RequestLimitExceeded" }, @@ -10804,6 +10827,18 @@ "target": "com.amazonaws.dynamodb#ReplicaUpdate" } }, + "com.amazonaws.dynamodb#ReplicatedWriteConflictException": { + "type": "structure", + "members": { + "message": { + "target": "com.amazonaws.dynamodb#ErrorMessage" + } + }, + "traits": { + "smithy.api#documentation": "

The request was rejected because one or more items in the request are being modified by a request in another Region.

", + "smithy.api#error": "client" + } + }, "com.amazonaws.dynamodb#ReplicationGroupUpdate": { "type": "structure", "members": { @@ -12228,6 +12263,12 @@ "traits": { "smithy.api#documentation": "

Describes the warm throughput value of the base table.

" } + }, + "MultiRegionConsistency": { + "target": "com.amazonaws.dynamodb#MultiRegionConsistency", + "traits": { + "smithy.api#documentation": "

Indicates one of the following consistency modes for a global table:

\n \n

If you don't specify this field, the global table consistency mode defaults to EVENTUAL.

" + } } }, "traits": { @@ -13309,6 +13350,9 @@ { "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" }, + { + "target": "com.amazonaws.dynamodb#ReplicatedWriteConflictException" + }, { "target": "com.amazonaws.dynamodb#RequestLimitExceeded" }, @@ -13733,6 +13777,12 @@ "smithy.api#documentation": "

Indicates whether deletion protection is to be enabled (true) or disabled (false) on\n the table.

" } }, + "MultiRegionConsistency": { + "target": "com.amazonaws.dynamodb#MultiRegionConsistency", + "traits": { + "smithy.api#documentation": "

Specifies the consistency mode for a new global table. This parameter is only valid when you create a global table by specifying one or more Create actions in the ReplicaUpdates action list.

\n

You can specify one of the following consistency modes:

\n \n

If you don't specify this parameter, the global table consistency mode defaults to EVENTUAL.

" + } + }, "OnDemandThroughput": { "target": "com.amazonaws.dynamodb#OnDemandThroughput", "traits": {