Skip to content

Commit 07513d1

Browse files
Add DDB_MAPPER feature ID for requests originating from DynamoDBContext (#3734)
1 parent bff37c8 commit 07513d1

File tree

6 files changed

+33
-49
lines changed

6 files changed

+33
-49
lines changed

sdk/src/Services/DynamoDBv2/Custom/DocumentModel/DocumentBatchGet.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ private async Task<Results> GetAttributeItemsAsync(CancellationToken cancellatio
464464
break;
465465

466466
BatchGetItemRequest request = CreateRequest(nextSet);
467-
targetTable.AddRequestHandler(request, isAsync: true);
467+
targetTable.UpdateRequestUserAgentDetails(request, isAsync: true);
468468

469469
await CallUntilCompletionAsync(clientToUse, request, results, cancellationToken).ConfigureAwait(false);
470470
}
@@ -492,7 +492,7 @@ private Results GetAttributeItems()
492492
break;
493493

494494
BatchGetItemRequest request = CreateRequest(nextSet);
495-
targetTable.AddRequestHandler(request, isAsync: false);
495+
targetTable.UpdateRequestUserAgentDetails(request, isAsync: false);
496496

497497
CallUntilCompletion(clientToUse, request, results);
498498
}

sdk/src/Services/DynamoDBv2/Custom/DocumentModel/DocumentBatchWrite.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ private BatchWriteItemRequest ConstructRequest(
498498
}
499499
}
500500

501-
targetTable.AddRequestHandler(request, isAsync);
501+
targetTable.UpdateRequestUserAgentDetails(request, isAsync);
502502
return request;
503503
}
504504

sdk/src/Services/DynamoDBv2/Custom/DocumentModel/DocumentTransactGet.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ private TransactGetItemsRequest ConstructRequest(bool isAsync)
409409
{
410410
var transactItems = Items.Select(item => item.GetRequest()).ToList();
411411
var request = new TransactGetItemsRequest { TransactItems = transactItems };
412-
Items[0].TransactionPart.TargetTable.AddRequestHandler(request, isAsync);
412+
Items[0].TransactionPart.TargetTable.UpdateRequestUserAgentDetails(request, isAsync);
413413
return request;
414414
}
415415

sdk/src/Services/DynamoDBv2/Custom/DocumentModel/DocumentTransactWrite.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,7 @@ private TransactWriteItemsRequest ConstructRequest(bool isAsync)
764764
{
765765
var transactItems = Items.Select(item => item.GetRequest()).ToList();
766766
var request = new TransactWriteItemsRequest { TransactItems = transactItems };
767-
Items[0].TransactionPart.TargetTable.AddRequestHandler(request, isAsync);
767+
Items[0].TransactionPart.TargetTable.UpdateRequestUserAgentDetails(request, isAsync);
768768
return request;
769769
}
770770

sdk/src/Services/DynamoDBv2/Custom/DocumentModel/Search.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ internal List<Document> GetNextSetHelper()
328328
scanReq.Segment = this.Segment;
329329
}
330330

331-
SourceTable.AddRequestHandler(scanReq, isAsync: false);
331+
SourceTable.UpdateRequestUserAgentDetails(scanReq, isAsync: false);
332332

333333
var scanResult = internalClient.Scan(scanReq);
334334
foreach (var item in scanResult.Items)
@@ -378,7 +378,7 @@ internal List<Document> GetNextSetHelper()
378378
if (queryReq.QueryFilter != null && queryReq.QueryFilter.Count > 1)
379379
queryReq.ConditionalOperator = EnumMapper.Convert(ConditionalOperator);
380380

381-
SourceTable.AddRequestHandler(queryReq, isAsync: false);
381+
SourceTable.UpdateRequestUserAgentDetails(queryReq, isAsync: false);
382382

383383
var queryResult = internalClient.Query(queryReq);
384384
foreach (var item in queryResult.Items)
@@ -442,7 +442,7 @@ internal async Task<List<Document>> GetNextSetHelperAsync(CancellationToken canc
442442
scanReq.Segment = this.Segment;
443443
}
444444

445-
SourceTable.AddRequestHandler(scanReq, isAsync: true);
445+
SourceTable.UpdateRequestUserAgentDetails(scanReq, isAsync: true);
446446

447447
var scanResult = await SourceTable.DDBClient.ScanAsync(scanReq, cancellationToken).ConfigureAwait(false);
448448
foreach (var item in scanResult.Items)
@@ -484,7 +484,7 @@ internal async Task<List<Document>> GetNextSetHelperAsync(CancellationToken canc
484484
if (queryReq.QueryFilter != null && queryReq.QueryFilter.Count > 1)
485485
queryReq.ConditionalOperator = EnumMapper.Convert(ConditionalOperator);
486486

487-
SourceTable.AddRequestHandler(queryReq, isAsync: true);
487+
SourceTable.UpdateRequestUserAgentDetails(queryReq, isAsync: true);
488488

489489
var queryResult = await SourceTable.DDBClient.QueryAsync(queryReq, cancellationToken).ConfigureAwait(false);
490490
foreach (var item in queryResult.Items)
@@ -644,7 +644,7 @@ private int GetCount()
644644
scanReq.Segment = this.Segment;
645645
}
646646

647-
SourceTable.AddRequestHandler(scanReq, isAsync: false);
647+
SourceTable.UpdateRequestUserAgentDetails(scanReq, isAsync: false);
648648

649649
var scanResult = internalClient.Scan(scanReq);
650650
count = Matches.Count + scanResult.Count.GetValueOrDefault();
@@ -669,7 +669,7 @@ private int GetCount()
669669
if (queryReq.QueryFilter != null && queryReq.QueryFilter.Count > 1)
670670
queryReq.ConditionalOperator = EnumMapper.Convert(ConditionalOperator);
671671

672-
SourceTable.AddRequestHandler(queryReq, isAsync: false);
672+
SourceTable.UpdateRequestUserAgentDetails(queryReq, isAsync: false);
673673

674674
var queryResult = internalClient.Query(queryReq);
675675
count = Matches.Count + queryResult.Count.GetValueOrDefault();

sdk/src/Services/DynamoDBv2/Custom/DocumentModel/Table.cs

Lines changed: 22 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
using Amazon.DynamoDBv2.DataModel;
2929
using Amazon.Runtime.Internal.Util;
3030
using Amazon.Runtime.Telemetry.Tracing;
31+
using Amazon.Runtime.Internal.UserAgent;
3132

3233
namespace Amazon.DynamoDBv2.DocumentModel
3334
{
@@ -499,39 +500,22 @@ private static Primitive KeyDateTimeToEpochSecondsLong(Primitive key, string att
499500
return converted;
500501
}
501502

502-
internal void UserAgentRequestEventHandlerSync(object sender, RequestEventArgs args)
503+
internal void UpdateRequestUserAgentDetails(AmazonDynamoDBRequest request, bool isAsync)
503504
{
504-
UserAgentRequestEventHandler(sender, args, false);
505-
}
506-
internal void UserAgentRequestEventHandlerAsync(object sender, RequestEventArgs args)
507-
{
508-
UserAgentRequestEventHandler(sender, args, true);
509-
}
505+
if (request == null) return;
510506

511-
internal void AddRequestHandler(AmazonDynamoDBRequest request, bool isAsync)
512-
{
513-
((Amazon.Runtime.Internal.IAmazonWebServiceRequest)request).AddBeforeRequestHandler(isAsync ?
514-
new RequestEventHandler(this.UserAgentRequestEventHandlerAsync) :
515-
new RequestEventHandler(this.UserAgentRequestEventHandlerSync)
516-
);
517-
}
507+
var userAgentDetails = ((Runtime.Internal.IAmazonWebServiceRequest)request).UserAgentDetails;
518508

519-
private void UserAgentRequestEventHandler(object sender, RequestEventArgs args, bool isAsync)
520-
{
521-
WebServiceRequestEventArgs wsArgs = args as WebServiceRequestEventArgs;
522-
if (wsArgs != null)
509+
userAgentDetails.AddUserAgentComponent("ft/ddb-hll");
510+
userAgentDetails.AddUserAgentComponent($"md/{(isAsync ? "TableAsync" : "TableSync")}");
511+
512+
if (this.TableConsumer == DynamoDBConsumer.DataModel)
523513
{
524-
var feature = string.Format(" ft/ddb-hll md/{0} md/{1}", this.TableConsumer, (isAsync ? "TableAsync" : "TableSync"));
525-
if (wsArgs.Headers.Keys.Contains(HeaderKeys.UserAgentHeader))
526-
{
527-
string currentUserAgent = wsArgs.Headers[HeaderKeys.UserAgentHeader];
528-
wsArgs.Headers[HeaderKeys.UserAgentHeader] = currentUserAgent + feature;
529-
}
530-
else if (wsArgs.Headers.Keys.Contains(HeaderKeys.XAmzUserAgentHeader))
531-
{
532-
string currentUserAgent = wsArgs.Headers[HeaderKeys.XAmzUserAgentHeader];
533-
wsArgs.Headers[HeaderKeys.XAmzUserAgentHeader] = currentUserAgent + feature;
534-
}
514+
userAgentDetails.AddFeature(UserAgentFeatureId.DDB_MAPPER);
515+
}
516+
else
517+
{
518+
userAgentDetails.AddUserAgentComponent($"md/{this.TableConsumer}");
535519
}
536520
}
537521

@@ -572,7 +556,7 @@ private TableDescription DescribeTable(string tableName)
572556
{
573557
TableName = TableName
574558
};
575-
this.AddRequestHandler(req, isAsync: false);
559+
this.UpdateRequestUserAgentDetails(req, isAsync: false);
576560

577561
#if NETSTANDARD
578562
// Cast the IAmazonDynamoDB to the concrete client instead, so we can access the internal sync-over-async methods
@@ -1191,7 +1175,7 @@ internal Document PutItemHelper(Document doc, PutItemOperationConfig config)
11911175
TableName = TableName,
11921176
Item = this.ToAttributeMap(doc)
11931177
};
1194-
this.AddRequestHandler(req, isAsync: false);
1178+
this.UpdateRequestUserAgentDetails(req, isAsync: false);
11951179

11961180
if (currentConfig.ReturnValues == ReturnValues.AllOldAttributes)
11971181
req.ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues);
@@ -1249,7 +1233,7 @@ internal async Task<Document> PutItemHelperAsync(Document doc, PutItemOperationC
12491233
TableName = TableName,
12501234
Item = this.ToAttributeMap(doc)
12511235
};
1252-
this.AddRequestHandler(req, isAsync: true);
1236+
this.UpdateRequestUserAgentDetails(req, isAsync: true);
12531237

12541238
if (currentConfig.ReturnValues == ReturnValues.AllOldAttributes)
12551239
req.ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues);
@@ -1301,7 +1285,7 @@ internal Document GetItemHelper(Key key, GetItemOperationConfig config)
13011285
ConsistentRead = currentConfig.ConsistentRead
13021286
};
13031287

1304-
this.AddRequestHandler(request, isAsync: false);
1288+
this.UpdateRequestUserAgentDetails(request, isAsync: false);
13051289

13061290
#if NETSTANDARD
13071291
// Cast the IAmazonDynamoDB to the concrete client instead, so we can access the internal sync-over-async methods
@@ -1336,7 +1320,7 @@ internal async Task<Document> GetItemHelperAsync(Key key, GetItemOperationConfig
13361320
ConsistentRead = currentConfig.ConsistentRead
13371321
};
13381322

1339-
this.AddRequestHandler(request, isAsync: true);
1323+
this.UpdateRequestUserAgentDetails(request, isAsync: true);
13401324

13411325
if (currentConfig.AttributesToGet != null)
13421326
request.AttributesToGet = currentConfig.AttributesToGet;
@@ -1390,7 +1374,7 @@ internal Document UpdateHelper(Document doc, Key key, UpdateItemOperationConfig
13901374
ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues)
13911375
};
13921376

1393-
this.AddRequestHandler(req, isAsync: false);
1377+
this.UpdateRequestUserAgentDetails(req, isAsync: false);
13941378

13951379
ValidateConditional(currentConfig);
13961380

@@ -1481,7 +1465,7 @@ internal async Task<Document> UpdateHelperAsync(Document doc, Key key, UpdateIte
14811465
ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues)
14821466
};
14831467

1484-
this.AddRequestHandler(req, isAsync: true);
1468+
this.UpdateRequestUserAgentDetails(req, isAsync: true);
14851469

14861470
ValidateConditional(currentConfig);
14871471

@@ -1564,7 +1548,7 @@ internal Document DeleteHelper(Key key, DeleteItemOperationConfig config)
15641548
TableName = TableName,
15651549
Key = key
15661550
};
1567-
this.AddRequestHandler(req, isAsync: false);
1551+
this.UpdateRequestUserAgentDetails(req, isAsync: false);
15681552

15691553
if (currentConfig.ReturnValues == ReturnValues.AllOldAttributes)
15701554
req.ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues);
@@ -1620,7 +1604,7 @@ internal async Task<Document> DeleteHelperAsync(Key key, DeleteItemOperationConf
16201604
TableName = TableName,
16211605
Key = key
16221606
};
1623-
this.AddRequestHandler(req, isAsync: true);
1607+
this.UpdateRequestUserAgentDetails(req, isAsync: true);
16241608

16251609
if (currentConfig.ReturnValues == ReturnValues.AllOldAttributes)
16261610
req.ReturnValues = EnumMapper.Convert(currentConfig.ReturnValues);

0 commit comments

Comments
 (0)