Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(appsync): support for read consistency during DynamoDB reads #20793

Merged
merged 27 commits into from
Jul 21, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
fd94542
add consistent read for dynamoDbGetItem, dynamoDbScanTable and dynamo…
YichenQian09 Jun 22, 2022
1d04a0a
change the indent
YichenQian09 Jun 23, 2022
bc2cd79
add tests for consistentRead
YichenQian09 Jul 1, 2022
a81b745
add reference for consistentRead in README.md
YichenQian09 Jul 1, 2022
cf44a76
pass the consistentRead as boolean in mapping-template
YichenQian09 Jul 1, 2022
ce16abc
chore: add unit test
pahud Jul 7, 2022
a3a1ccc
Merge pull request #1 from pahud/pahud/read-consistency
YichenQian09 Jul 8, 2022
905339b
added united tests for read consistency
YichenQian09 Jul 9, 2022
08fe755
modified united tests for read consistency
YichenQian09 Jul 9, 2022
f761b45
delete inexistent files in main branch
YichenQian09 Jul 11, 2022
5d100bf
Merge branch 'aws-main' into consistent-read-v2
YichenQian09 Jul 11, 2022
ef9a183
update markdown for DynamoDB read consistency
YichenQian09 Jul 13, 2022
364ea79
updated the readme.md
YichenQian09 Jul 13, 2022
76c14fe
Merge branch 'main' into read-consistency
kellertk Jul 14, 2022
502ac8d
updated readme.md
YichenQian09 Jul 14, 2022
46ae6f1
updated readme.md
YichenQian09 Jul 14, 2022
78d03c3
Merge branch 'read-consistency' of https://github.com/YichenQian09/aw…
YichenQian09 Jul 14, 2022
4d23918
Merge branch 'main' into read-consistency
YichenQian09 Jul 15, 2022
ff88f79
Merge branch 'main' into read-consistency
pahud Jul 15, 2022
8e25f62
update readme.md
YichenQian09 Jul 18, 2022
3867d2a
solved conflict
YichenQian09 Jul 18, 2022
f2fc776
updated the expiration timestamp for api-key
YichenQian09 Jul 19, 2022
25b0059
Merge branch 'main' into read-consistency
YichenQian09 Jul 19, 2022
ea91ca7
Merge branch 'main' into read-consistency
YichenQian09 Jul 19, 2022
5ebe3b2
Update packages/@aws-cdk/aws-appsync/README.md
YichenQian09 Jul 21, 2022
1e24775
Merge branch 'main' into read-consistency
YichenQian09 Jul 21, 2022
669d3dd
Merge branch 'main' into read-consistency
mergify[bot] Jul 21, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
add consistent read for dynamoDbGetItem, dynamoDbScanTable and dynamo…
…DbQuery
  • Loading branch information
YichenQian09 committed Jun 22, 2022
commit fd9454243941f40d23eef4ea16a26d1d5553d31f
2 changes: 1 addition & 1 deletion packages/@aws-cdk/aws-appsync/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ const demoDS = api.addDynamoDbDataSource('demoDataSource', demoTable);
demoDS.createResolver({
typeName: 'Query',
fieldName: 'getDemos',
requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(),
requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(true),
responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(),
});

Expand Down
12 changes: 6 additions & 6 deletions packages/@aws-cdk/aws-appsync/lib/mapping-template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@ export abstract class MappingTemplate {
/**
* Mapping template to scan a DynamoDB table to fetch all entries
*/
public static dynamoDbScanTable(): MappingTemplate {
return this.fromString('{"version" : "2017-02-28", "operation" : "Scan"}');
public static dynamoDbScanTable(consistentRead: boolean = false): MappingTemplate {
return this.fromString(`{"version" : "2017-02-28", "operation" : "Scan", "consistentRead": "${consistentRead}"}`);
}

/**
* Mapping template to query a set of items from a DynamoDB table
*
* @param cond the key condition for the query
*/
public static dynamoDbQuery(cond: KeyCondition, indexName?: string): MappingTemplate {
return this.fromString(`{"version" : "2017-02-28", "operation" : "Query", ${indexName ? `"index" : "${indexName}", ` : ''}${cond.renderTemplate()}}`);
public static dynamoDbQuery(cond: KeyCondition, consistentRead: boolean = false, indexName?: string): MappingTemplate {
return this.fromString(`{"version" : "2017-02-28", "operation" : "Query", "consistentRead": "${consistentRead}", ${indexName ? `"index" : "${indexName}", ` : ''}${cond.renderTemplate()}}`);
}

/**
Expand All @@ -55,8 +55,8 @@ export abstract class MappingTemplate {
* @param keyName the name of the hash key field
* @param idArg the name of the Query argument
*/
public static dynamoDbGetItem(keyName: string, idArg: string): MappingTemplate {
return this.fromString(`{"version": "2017-02-28", "operation": "GetItem", "key": {"${keyName}": $util.dynamodb.toDynamoDBJson($ctx.args.${idArg})}}`);
public static dynamoDbGetItem(keyName: string, idArg: string, consistentRead: boolean = false): MappingTemplate {
return this.fromString(`{"version": "2017-02-28", "operation": "GetItem", "consistentRead": "${consistentRead}", "key": {"${keyName}": $util.dynamodb.toDynamoDBJson($ctx.args.${idArg})}}`);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/@aws-cdk/aws-appsync/test/integ.api-import.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const testDS = api.addDynamoDbDataSource('ds', testTable);
testDS.createResolver({
typeName: 'Query',
fieldName: 'getTests',
requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(),
requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(true),
responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(),
});

Expand Down
2 changes: 1 addition & 1 deletion packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ const testDS = api.addDynamoDbDataSource('testDataSource', testTable);
testDS.createResolver({
typeName: 'Query',
fieldName: 'getTests',
requestMappingTemplate: MappingTemplate.dynamoDbScanTable(),
requestMappingTemplate: MappingTemplate.dynamoDbScanTable(true),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});

Expand Down
4 changes: 2 additions & 2 deletions packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@ const testDS = api.addDynamoDbDataSource('ds', testTable, { name: 'testDataSourc
testDS.createResolver({
typeName: 'Query',
fieldName: 'getTest',
requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id'),
requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id', true),
responseMappingTemplate: MappingTemplate.dynamoDbResultItem(),
});

testDS.createResolver({
typeName: 'Query',
fieldName: 'getTests',
requestMappingTemplate: MappingTemplate.dynamoDbScanTable(),
requestMappingTemplate: MappingTemplate.dynamoDbScanTable(true),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});

Expand Down
2 changes: 1 addition & 1 deletion packages/@aws-cdk/aws-appsync/test/integ.graphql-schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ const species = api.addType(new appsync.ObjectType('Species', {
api.addQuery('getPlanets', new appsync.ResolvableField({
returnType: planet.attribute({ isList: true }),
dataSource: tableDS,
requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(),
requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(true),
responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(),
}));

Expand Down
18 changes: 9 additions & 9 deletions packages/@aws-cdk/aws-appsync/test/integ.graphql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,13 @@ const paymentDS = api.addDynamoDbDataSource('paymentDs', paymentTable, { name: '
customerDS.createResolver({
typeName: 'Query',
fieldName: 'getCustomers',
requestMappingTemplate: MappingTemplate.dynamoDbScanTable(),
requestMappingTemplate: MappingTemplate.dynamoDbScanTable(true),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});
customerDS.createResolver({
typeName: 'Query',
fieldName: 'getCustomer',
requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id'),
requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id', true),
responseMappingTemplate: MappingTemplate.dynamoDbResultItem(),
});
customerDS.createResolver({
Expand Down Expand Up @@ -165,49 +165,49 @@ for (const { suffix, op } of ops) {
orderDS.createResolver({
typeName: 'Query',
fieldName: 'getCustomerOrders' + suffix,
requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('customer', 'customer')),
requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('customer', 'customer'), true),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});
orderDS.createResolver({
typeName: 'Query',
fieldName: 'getOrderCustomers' + suffix,
requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('order', 'order'), 'orderIndex'),
requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('order', 'order'), true, 'orderIndex'),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});
}
orderDS.createResolver({
typeName: 'Query',
fieldName: 'getCustomerOrdersFilter',
requestMappingTemplate: MappingTemplate.dynamoDbQuery(
KeyCondition.eq('customer', 'customer').and(KeyCondition.beginsWith('order', 'order'))),
KeyCondition.eq('customer', 'customer').and(KeyCondition.beginsWith('order', 'order')), true),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});
orderDS.createResolver({
typeName: 'Query',
fieldName: 'getCustomerOrdersBetween',
requestMappingTemplate: MappingTemplate.dynamoDbQuery(
KeyCondition.eq('customer', 'customer').and(KeyCondition.between('order', 'order1', 'order2'))),
KeyCondition.eq('customer', 'customer').and(KeyCondition.between('order', 'order1', 'order2')), true),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});
orderDS.createResolver({
typeName: 'Query',
fieldName: 'getOrderCustomersFilter',
requestMappingTemplate: MappingTemplate.dynamoDbQuery(
KeyCondition.eq('order', 'order').and(KeyCondition.beginsWith('customer', 'customer'))),
KeyCondition.eq('order', 'order').and(KeyCondition.beginsWith('customer', 'customer')), true),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});
orderDS.createResolver({
typeName: 'Query',
fieldName: 'getOrderCustomersBetween',
requestMappingTemplate: MappingTemplate.dynamoDbQuery(
KeyCondition.eq('order', 'order').and(KeyCondition.between('customer', 'customer1', 'customer2')), 'orderIndex'),
KeyCondition.eq('order', 'order').and(KeyCondition.between('customer', 'customer1', 'customer2')), true, 'orderIndex'),
responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
});

paymentDS.createResolver({
typeName: 'Query',
fieldName: 'getPayment',
requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id'),
requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id', true),
responseMappingTemplate: MappingTemplate.dynamoDbResultItem(),
});
paymentDS.createResolver({
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading