diff --git a/Microsoft.Azure.Cosmos/src/Batch/BatchCore.cs b/Microsoft.Azure.Cosmos/src/Batch/BatchCore.cs index 9c73b22014..913ef6acb7 100644 --- a/Microsoft.Azure.Cosmos/src/Batch/BatchCore.cs +++ b/Microsoft.Azure.Cosmos/src/Batch/BatchCore.cs @@ -217,16 +217,21 @@ public virtual Task ExecuteAsync( RequestOptions requestOptions, CancellationToken cancellationToken = default(CancellationToken)) { - CosmosDiagnosticsContext diagnosticsContext = CosmosDiagnosticsContext.Create(requestOptions); - BatchExecutor executor = new BatchExecutor( - container: this.container, - partitionKey: this.partitionKey, - operations: this.operations, - batchOptions: requestOptions, - diagnosticsContext: diagnosticsContext); - - this.operations = new List(); - return executor.ExecuteAsync(cancellationToken); + return this.container.ClientContext.OperationHelperAsync( + nameof(ExecuteAsync), + requestOptions, + (diagnostics) => + { + BatchExecutor executor = new BatchExecutor( + container: this.container, + partitionKey: this.partitionKey, + operations: this.operations, + batchOptions: requestOptions, + diagnosticsContext: diagnostics); + + this.operations = new List(); + return executor.ExecuteAsync(cancellationToken); + }); } /// diff --git a/Microsoft.Azure.Cosmos/src/Resource/Conflict/ConflictsCore.cs b/Microsoft.Azure.Cosmos/src/Resource/Conflict/ConflictsCore.cs index cf15e2acd6..644839f2e1 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/Conflict/ConflictsCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/Conflict/ConflictsCore.cs @@ -11,10 +11,9 @@ namespace Microsoft.Azure.Cosmos using Microsoft.Azure.Documents; // TODO: This class should inherit from ConflictsInternal to avoid the downcasting hacks. - internal class ConflictsCore : Conflicts + internal abstract class ConflictsCore : Conflicts { private readonly ContainerInternal container; - private readonly CosmosClientContext clientContext; public ConflictsCore( CosmosClientContext clientContext, @@ -31,10 +30,13 @@ public ConflictsCore( } this.container = container; - this.clientContext = clientContext; + this.ClientContext = clientContext; } - public override Task DeleteAsync( + protected CosmosClientContext ClientContext { get; } + + public Task DeleteAsync( + CosmosDiagnosticsContext diagnosticsContext, ConflictProperties conflict, PartitionKey partitionKey, CancellationToken cancellationToken = default(CancellationToken)) @@ -44,12 +46,12 @@ public override Task DeleteAsync( throw new ArgumentNullException(nameof(conflict)); } - Uri conflictLink = this.clientContext.CreateLink( + Uri conflictLink = this.ClientContext.CreateLink( parentLink: this.container.LinkUri.OriginalString, uriPathSegment: Paths.ConflictsPathSegment, id: conflict.Id); - return this.clientContext.ProcessResourceOperationStreamAsync( + return this.ClientContext.ProcessResourceOperationStreamAsync( resourceUri: conflictLink, resourceType: ResourceType.Conflict, operationType: OperationType.Delete, @@ -58,14 +60,14 @@ public override Task DeleteAsync( partitionKey: partitionKey, streamPayload: null, requestEnricher: null, - diagnosticsContext: null, + diagnosticsContext: diagnosticsContext, cancellationToken: cancellationToken); } public override FeedIterator GetConflictQueryStreamIterator( - string queryText = null, - string continuationToken = null, - QueryRequestOptions requestOptions = null) + string queryText, + string continuationToken, + QueryRequestOptions requestOptions) { QueryDefinition queryDefinition = null; if (queryText != null) @@ -80,9 +82,9 @@ public override FeedIterator GetConflictQueryStreamIterator( } public override FeedIterator GetConflictQueryIterator( - string queryText = null, - string continuationToken = null, - QueryRequestOptions requestOptions = null) + string queryText, + string continuationToken, + QueryRequestOptions requestOptions) { QueryDefinition queryDefinition = null; if (queryText != null) @@ -97,9 +99,9 @@ public override FeedIterator GetConflictQueryIterator( } public override FeedIterator GetConflictQueryStreamIterator( - QueryDefinition queryDefinition, - string continuationToken = null, - QueryRequestOptions requestOptions = null) + QueryDefinition queryDefinition, + string continuationToken = null, + QueryRequestOptions requestOptions = null) { return FeedRangeIteratorCore.Create( containerCore: this.container, @@ -124,12 +126,13 @@ public override FeedIterator GetConflictQueryIterator( return new FeedIteratorCore( databaseStreamIterator, - (response) => this.clientContext.ResponseFactory.CreateQueryFeedResponse( + (response) => this.ClientContext.ResponseFactory.CreateQueryFeedResponse( responseMessage: response, resourceType: ResourceType.Conflict)); } - public override async Task> ReadCurrentAsync( + public async Task> ReadCurrentAsync( + CosmosDiagnosticsContext diagnosticsContext, ConflictProperties cosmosConflict, PartitionKey partitionKey, CancellationToken cancellationToken = default(CancellationToken)) @@ -144,22 +147,22 @@ public override async Task> ReadCurrentAsync( string databaseResourceId = await databaseCore.GetRIDAsync(cancellationToken); string containerResourceId = await this.container.GetRIDAsync(cancellationToken); - Uri dbLink = this.clientContext.CreateLink( + Uri dbLink = this.ClientContext.CreateLink( parentLink: string.Empty, uriPathSegment: Paths.DatabasesPathSegment, id: databaseResourceId); - Uri containerLink = this.clientContext.CreateLink( + Uri containerLink = this.ClientContext.CreateLink( parentLink: dbLink.OriginalString, uriPathSegment: Paths.CollectionsPathSegment, id: containerResourceId); - Uri itemLink = this.clientContext.CreateLink( + Uri itemLink = this.ClientContext.CreateLink( parentLink: containerLink.OriginalString, uriPathSegment: Paths.DocumentsPathSegment, id: cosmosConflict.SourceResourceId); - ResponseMessage response = await this.clientContext.ProcessResourceOperationStreamAsync( + ResponseMessage response = await this.ClientContext.ProcessResourceOperationStreamAsync( resourceUri: itemLink, resourceType: ResourceType.Document, operationType: OperationType.Read, @@ -168,10 +171,10 @@ public override async Task> ReadCurrentAsync( partitionKey: partitionKey, streamPayload: null, requestEnricher: null, - diagnosticsContext: null, + diagnosticsContext: diagnosticsContext, cancellationToken: cancellationToken); - return this.clientContext.ResponseFactory.CreateItemResponse(response); + return this.ClientContext.ResponseFactory.CreateItemResponse(response); } public override T ReadConflictContent(ConflictProperties cosmosConflict) @@ -191,7 +194,7 @@ public override T ReadConflictContent(ConflictProperties cosmosConflict) writer.Write(cosmosConflict.Content); writer.Flush(); stream.Position = 0; - return this.clientContext.SerializerCore.FromStream(stream); + return this.ClientContext.SerializerCore.FromStream(stream); } } } diff --git a/Microsoft.Azure.Cosmos/src/Resource/Conflict/ConflictsInlineCore.cs b/Microsoft.Azure.Cosmos/src/Resource/Conflict/ConflictsInlineCore.cs index 3c10e0aa8f..ea24486f43 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/Conflict/ConflictsInlineCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/Conflict/ConflictsInlineCore.cs @@ -4,7 +4,6 @@ namespace Microsoft.Azure.Cosmos { - using System; using System.Threading; using System.Threading.Tasks; @@ -25,13 +24,16 @@ public override Task DeleteAsync( PartitionKey partitionKey, CancellationToken cancellationToken = default(CancellationToken)) { - return TaskHelper.RunInlineIfNeededAsync(() => base.DeleteAsync(conflict, partitionKey, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + operationName: nameof(DeleteAsync), + requestOptions: null, + task: (diagnostics) => base.DeleteAsync(diagnostics, conflict, partitionKey, cancellationToken)); } public override FeedIterator GetConflictQueryStreamIterator( - string queryText = null, - string continuationToken = null, - QueryRequestOptions requestOptions = null) + string queryText = null, + string continuationToken = null, + QueryRequestOptions requestOptions = null) { return new FeedIteratorInlineCore(base.GetConflictQueryStreamIterator( queryText, @@ -77,7 +79,10 @@ public override Task> ReadCurrentAsync( PartitionKey partitionKey, CancellationToken cancellationToken = default(CancellationToken)) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReadCurrentAsync(cosmosConflict, partitionKey, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + operationName: nameof(ReadCurrentAsync), + requestOptions: null, + task: (diagnostics) => base.ReadCurrentAsync(diagnostics, cosmosConflict, partitionKey, cancellationToken)); } public override T ReadConflictContent(ConflictProperties cosmosConflict) diff --git a/Microsoft.Azure.Cosmos/src/Resource/Permission/PermissionCore.cs b/Microsoft.Azure.Cosmos/src/Resource/Permission/PermissionCore.cs index b5f8f680b5..0b0c6fd472 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/Permission/PermissionCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/Permission/PermissionCore.cs @@ -15,10 +15,9 @@ namespace Microsoft.Azure.Cosmos /// /// for creating new users, and reading/querying all user; /// - internal class PermissionCore : Permission + internal abstract class PermissionCore : Permission { private readonly Uri linkUri; - private readonly CosmosClientContext clientContext; internal PermissionCore( CosmosClientContext clientContext, @@ -26,7 +25,7 @@ internal PermissionCore( string userId) { this.Id = userId; - this.clientContext = clientContext; + this.ClientContext = clientContext; this.linkUri = clientContext.CreateLink( parentLink: user.LinkUri.OriginalString, uriPathSegment: Paths.PermissionsPathSegment, @@ -36,46 +35,58 @@ internal PermissionCore( /// public override string Id { get; } - /// - public override async Task DeleteAsync(RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + internal CosmosClientContext ClientContext { get; } + + public async Task DeleteAsync( + CosmosDiagnosticsContext diagnosticsContext, + RequestOptions requestOptions, + CancellationToken cancellationToken) { ResponseMessage response = await this.DeletePermissionStreamAsync( + diagnosticsContext: diagnosticsContext, requestOptions: requestOptions, cancellationToken: cancellationToken); - return this.clientContext.ResponseFactory.CreatePermissionResponse(this, response); + return this.ClientContext.ResponseFactory.CreatePermissionResponse(this, response); } public Task DeletePermissionStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, RequestOptions requestOptions, CancellationToken cancellationToken) { return this.ProcessStreamAsync( + diagnosticsContext: diagnosticsContext, streamPayload: null, operationType: OperationType.Delete, + tokenExpiryInSeconds: null, requestOptions: requestOptions, cancellationToken: cancellationToken); } - /// - public override async Task ReadAsync(int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public async Task ReadAsync( + CosmosDiagnosticsContext diagnosticsContext, + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { ResponseMessage response = await this.ReadPermissionStreamAsync( + diagnosticsContext: diagnosticsContext, tokenExpiryInSeconds: tokenExpiryInSeconds, requestOptions: requestOptions, cancellationToken: cancellationToken); - return this.clientContext.ResponseFactory.CreatePermissionResponse(this, response); + return this.ClientContext.ResponseFactory.CreatePermissionResponse(this, response); } - public Task ReadPermissionStreamAsync(int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public Task ReadPermissionStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessStreamAsync( + diagnosticsContext: diagnosticsContext, streamPayload: null, operationType: OperationType.Read, tokenExpiryInSeconds: tokenExpiryInSeconds, @@ -83,50 +94,58 @@ public Task ReadPermissionStreamAsync(int? tokenExpiryInSeconds cancellationToken: cancellationToken); } - /// - public override async Task ReplaceAsync(PermissionProperties permissionProperties, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public async Task ReplaceAsync( + CosmosDiagnosticsContext diagnosticsContext, + PermissionProperties permissionProperties, + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (permissionProperties == null) { throw new ArgumentNullException(nameof(permissionProperties)); } - this.clientContext.ValidateResource(permissionProperties.Id); + this.ClientContext.ValidateResource(permissionProperties.Id); ResponseMessage response = await this.ReplaceStreamInternalAsync( - streamPayload: this.clientContext.SerializerCore.ToStream(permissionProperties), + diagnosticsContext: diagnosticsContext, + streamPayload: this.ClientContext.SerializerCore.ToStream(permissionProperties), tokenExpiryInSeconds: tokenExpiryInSeconds, requestOptions: requestOptions, cancellationToken: cancellationToken); - return this.clientContext.ResponseFactory.CreatePermissionResponse(this, response); + return this.ClientContext.ResponseFactory.CreatePermissionResponse(this, response); } - public Task ReplacePermissionStreamAsync(PermissionProperties permissionProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public Task ReplacePermissionStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, + PermissionProperties permissionProperties, + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (permissionProperties == null) { throw new ArgumentNullException(nameof(permissionProperties)); } - this.clientContext.ValidateResource(permissionProperties.Id); + this.ClientContext.ValidateResource(permissionProperties.Id); return this.ReplaceStreamInternalAsync( - streamPayload: this.clientContext.SerializerCore.ToStream(permissionProperties), + diagnosticsContext: diagnosticsContext, + streamPayload: this.ClientContext.SerializerCore.ToStream(permissionProperties), + tokenExpiryInSeconds: null, requestOptions: requestOptions, cancellationToken: cancellationToken); } private Task ReplaceStreamInternalAsync( + CosmosDiagnosticsContext diagnosticsContext, Stream streamPayload, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessStreamAsync( + diagnosticsContext: diagnosticsContext, streamPayload: streamPayload, operationType: OperationType.Replace, tokenExpiryInSeconds: tokenExpiryInSeconds, @@ -135,13 +154,15 @@ private Task ReplaceStreamInternalAsync( } private Task ProcessStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, Stream streamPayload, OperationType operationType, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessResourceOperationStreamAsync( + diagnosticsContext: diagnosticsContext, streamPayload: streamPayload, operationType: operationType, linkUri: this.linkUri, @@ -152,15 +173,16 @@ private Task ProcessStreamAsync( } private Task ProcessResourceOperationStreamAsync( - Stream streamPayload, - OperationType operationType, - Uri linkUri, - ResourceType resourceType, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + CosmosDiagnosticsContext diagnosticsContext, + Stream streamPayload, + OperationType operationType, + Uri linkUri, + ResourceType resourceType, + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { - return this.clientContext.ProcessResourceOperationStreamAsync( + return this.ClientContext.ProcessResourceOperationStreamAsync( resourceUri: linkUri, resourceType: resourceType, operationType: operationType, @@ -175,7 +197,7 @@ private Task ProcessResourceOperationStreamAsync( requestMessage.Headers.Add(HttpConstants.HttpHeaders.ResourceTokenExpiry, tokenExpiryInSeconds.Value.ToString()); } }, - diagnosticsContext: null, + diagnosticsContext: diagnosticsContext, cancellationToken: cancellationToken); } } diff --git a/Microsoft.Azure.Cosmos/src/Resource/Permission/PermissionInlineCore.cs b/Microsoft.Azure.Cosmos/src/Resource/Permission/PermissionInlineCore.cs index be4feba2dc..6df6e24c2e 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/Permission/PermissionInlineCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/Permission/PermissionInlineCore.cs @@ -26,7 +26,10 @@ public override Task ReadAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReadAsync(tokenExpiryInSeconds, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReadAsync), + requestOptions, + (diagnostics) => base.ReadAsync(diagnostics, tokenExpiryInSeconds, requestOptions, cancellationToken)); } public override Task ReplaceAsync( @@ -35,14 +38,20 @@ public override Task ReplaceAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReplaceAsync(permissionProperties, tokenExpiryInSeconds, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReplaceAsync), + requestOptions, + (diagnostics) => base.ReplaceAsync(diagnostics, permissionProperties, tokenExpiryInSeconds, requestOptions, cancellationToken)); } public override Task DeleteAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.DeleteAsync(requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(DeleteAsync), + requestOptions, + (diagnostics) => base.DeleteAsync(diagnostics, requestOptions, cancellationToken)); } } } diff --git a/Microsoft.Azure.Cosmos/src/Resource/Scripts/ScriptsCore.cs b/Microsoft.Azure.Cosmos/src/Resource/Scripts/ScriptsCore.cs index 5f49901b65..25851d8627 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/Scripts/ScriptsCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/Scripts/ScriptsCore.cs @@ -10,28 +10,31 @@ namespace Microsoft.Azure.Cosmos.Scripts using System.Threading.Tasks; using Microsoft.Azure.Documents; - internal class ScriptsCore : Scripts + internal abstract class ScriptsCore : Scripts { private readonly ContainerInternal container; - private readonly CosmosClientContext clientContext; internal ScriptsCore( ContainerInternal container, CosmosClientContext clientContext) { this.container = container; - this.clientContext = clientContext; + this.ClientContext = clientContext; } - public override Task CreateStoredProcedureAsync( - StoredProcedureProperties storedProcedureProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + protected CosmosClientContext ClientContext { get; } + + public Task CreateStoredProcedureAsync( + CosmosDiagnosticsContext diagnosticsContext, + StoredProcedureProperties storedProcedureProperties, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessStoredProcedureOperationAsync( + diagnosticsContext: diagnosticsContext, linkUri: this.container.LinkUri, operationType: OperationType.Create, - streamPayload: this.clientContext.SerializerCore.ToStream(storedProcedureProperties), + streamPayload: this.ClientContext.SerializerCore.ToStream(storedProcedureProperties), requestOptions: requestOptions, cancellationToken: cancellationToken); } @@ -76,7 +79,7 @@ public override FeedIterator GetStoredProcedureQueryStreamIterator( QueryRequestOptions requestOptions = null) { return new FeedIteratorCore( - clientContext: this.clientContext, + clientContext: this.ClientContext, this.container.LinkUri, resourceType: ResourceType.StoredProcedure, queryDefinition: queryDefinition, @@ -99,15 +102,16 @@ public override FeedIterator GetStoredProcedureQueryIterator( return new FeedIteratorCore( databaseStreamIterator, - (response) => this.clientContext.ResponseFactory.CreateQueryFeedResponse( + (response) => this.ClientContext.ResponseFactory.CreateQueryFeedResponse( responseMessage: response, resourceType: ResourceType.StoredProcedure)); } - public override Task ReadStoredProcedureAsync( + public Task ReadStoredProcedureAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (string.IsNullOrEmpty(id)) { @@ -115,6 +119,7 @@ public override Task ReadStoredProcedureAsync( } return this.ProcessStoredProcedureOperationAsync( + diagnosticsContext: diagnosticsContext, id: id, operationType: OperationType.Read, streamPayload: null, @@ -122,23 +127,26 @@ public override Task ReadStoredProcedureAsync( cancellationToken: cancellationToken); } - public override Task ReplaceStoredProcedureAsync( + public Task ReplaceStoredProcedureAsync( + CosmosDiagnosticsContext diagnosticsContext, StoredProcedureProperties storedProcedureProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessStoredProcedureOperationAsync( + diagnosticsContext: diagnosticsContext, id: storedProcedureProperties.Id, operationType: OperationType.Replace, - streamPayload: this.clientContext.SerializerCore.ToStream(storedProcedureProperties), + streamPayload: this.ClientContext.SerializerCore.ToStream(storedProcedureProperties), requestOptions: requestOptions, cancellationToken: cancellationToken); } - public override Task DeleteStoredProcedureAsync( + public Task DeleteStoredProcedureAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (string.IsNullOrEmpty(id)) { @@ -146,6 +154,7 @@ public override Task DeleteStoredProcedureAsync( } return this.ProcessStoredProcedureOperationAsync( + diagnosticsContext: diagnosticsContext, id: id, operationType: OperationType.Delete, streamPayload: null, @@ -153,37 +162,41 @@ public override Task DeleteStoredProcedureAsync( cancellationToken: cancellationToken); } - public override async Task> ExecuteStoredProcedureAsync( + public async Task> ExecuteStoredProcedureAsync( + CosmosDiagnosticsContext diagnosticsContext, string storedProcedureId, Cosmos.PartitionKey partitionKey, dynamic[] parameters, - StoredProcedureRequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + StoredProcedureRequestOptions requestOptions, + CancellationToken cancellationToken) { ResponseMessage response = await this.ExecuteStoredProcedureStreamAsync( + diagnosticsContext: diagnosticsContext, storedProcedureId: storedProcedureId, partitionKey: partitionKey, parameters: parameters, requestOptions: requestOptions, cancellationToken: cancellationToken); - return this.clientContext.ResponseFactory.CreateStoredProcedureExecuteResponse(response); + return this.ClientContext.ResponseFactory.CreateStoredProcedureExecuteResponse(response); } - public override Task ExecuteStoredProcedureStreamAsync( + public Task ExecuteStoredProcedureStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, string storedProcedureId, Cosmos.PartitionKey partitionKey, dynamic[] parameters, - StoredProcedureRequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + StoredProcedureRequestOptions requestOptions, + CancellationToken cancellationToken) { Stream streamPayload = null; if (parameters != null) { - streamPayload = this.clientContext.SerializerCore.ToStream(parameters); + streamPayload = this.ClientContext.SerializerCore.ToStream(parameters); } return this.ExecuteStoredProcedureStreamAsync( + diagnosticsContext: diagnosticsContext, storedProcedureId: storedProcedureId, partitionKey: partitionKey, streamPayload: streamPayload, @@ -191,12 +204,13 @@ public override Task ExecuteStoredProcedureStreamAsync( cancellationToken: cancellationToken); } - public override Task ExecuteStoredProcedureStreamAsync( + public Task ExecuteStoredProcedureStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, string storedProcedureId, Stream streamPayload, Cosmos.PartitionKey partitionKey, - StoredProcedureRequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + StoredProcedureRequestOptions requestOptions, + CancellationToken cancellationToken) { if (string.IsNullOrEmpty(storedProcedureId)) { @@ -204,13 +218,14 @@ public override Task ExecuteStoredProcedureStreamAsync( } ContainerInternal.ValidatePartitionKey(partitionKey, requestOptions); - - Uri linkUri = this.clientContext.CreateLink( + + Uri linkUri = this.ClientContext.CreateLink( parentLink: this.container.LinkUri.OriginalString, uriPathSegment: Paths.StoredProceduresPathSegment, id: storedProcedureId); return this.ProcessStreamOperationAsync( + diagnosticsContext: diagnosticsContext, resourceUri: linkUri, resourceType: ResourceType.StoredProcedure, operationType: OperationType.ExecuteJavaScript, @@ -220,10 +235,11 @@ public override Task ExecuteStoredProcedureStreamAsync( cancellationToken: cancellationToken); } - public override Task CreateTriggerAsync( + public Task CreateTriggerAsync( + CosmosDiagnosticsContext diagnosticsContext, TriggerProperties triggerProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (triggerProperties == null) { @@ -241,9 +257,10 @@ public override Task CreateTriggerAsync( } return this.ProcessTriggerOperationAsync( + diagnosticsContext: diagnosticsContext, linkUri: this.container.LinkUri, operationType: OperationType.Create, - streamPayload: this.clientContext.SerializerCore.ToStream(triggerProperties), + streamPayload: this.ClientContext.SerializerCore.ToStream(triggerProperties), requestOptions: requestOptions, cancellationToken: cancellationToken); } @@ -288,7 +305,7 @@ public override FeedIterator GetTriggerQueryStreamIterator( QueryRequestOptions requestOptions = null) { return new FeedIteratorCore( - clientContext: this.clientContext, + clientContext: this.ClientContext, this.container.LinkUri, resourceType: ResourceType.Trigger, queryDefinition: queryDefinition, @@ -311,15 +328,16 @@ public override FeedIterator GetTriggerQueryIterator( return new FeedIteratorCore( databaseStreamIterator, - (response) => this.clientContext.ResponseFactory.CreateQueryFeedResponse( + (response) => this.ClientContext.ResponseFactory.CreateQueryFeedResponse( responseMessage: response, resourceType: ResourceType.Trigger)); } - public override Task ReadTriggerAsync( + public Task ReadTriggerAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (string.IsNullOrEmpty(id)) { @@ -327,6 +345,7 @@ public override Task ReadTriggerAsync( } return this.ProcessTriggerOperationAsync( + diagnosticsContext: diagnosticsContext, id: id, operationType: OperationType.Read, streamPayload: null, @@ -334,10 +353,11 @@ public override Task ReadTriggerAsync( cancellationToken: cancellationToken); } - public override Task ReplaceTriggerAsync( + public Task ReplaceTriggerAsync( + CosmosDiagnosticsContext diagnosticsContext, TriggerProperties triggerProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (triggerProperties == null) { @@ -355,17 +375,19 @@ public override Task ReplaceTriggerAsync( } return this.ProcessTriggerOperationAsync( + diagnosticsContext: diagnosticsContext, id: triggerProperties.Id, operationType: OperationType.Replace, - streamPayload: this.clientContext.SerializerCore.ToStream(triggerProperties), + streamPayload: this.ClientContext.SerializerCore.ToStream(triggerProperties), requestOptions: requestOptions, cancellationToken: cancellationToken); } - public override Task DeleteTriggerAsync( + public Task DeleteTriggerAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (string.IsNullOrEmpty(id)) { @@ -373,6 +395,7 @@ public override Task DeleteTriggerAsync( } return this.ProcessTriggerOperationAsync( + diagnosticsContext: diagnosticsContext, id: id, operationType: OperationType.Delete, streamPayload: null, @@ -380,10 +403,11 @@ public override Task DeleteTriggerAsync( cancellationToken: cancellationToken); } - public override Task CreateUserDefinedFunctionAsync( + public Task CreateUserDefinedFunctionAsync( + CosmosDiagnosticsContext diagnosticsContext, UserDefinedFunctionProperties userDefinedFunctionProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (userDefinedFunctionProperties == null) { @@ -401,9 +425,10 @@ public override Task CreateUserDefinedFunctionAsync } return this.ProcessUserDefinedFunctionOperationAsync( + diagnosticsContext: diagnosticsContext, linkUri: this.container.LinkUri, operationType: OperationType.Create, - streamPayload: this.clientContext.SerializerCore.ToStream(userDefinedFunctionProperties), + streamPayload: this.ClientContext.SerializerCore.ToStream(userDefinedFunctionProperties), requestOptions: requestOptions, cancellationToken: cancellationToken); } @@ -448,7 +473,7 @@ public override FeedIterator GetUserDefinedFunctionQueryStreamIterator( QueryRequestOptions requestOptions = null) { return new FeedIteratorCore( - clientContext: this.clientContext, + clientContext: this.ClientContext, this.container.LinkUri, resourceType: ResourceType.UserDefinedFunction, queryDefinition: queryDefinition, @@ -471,15 +496,16 @@ public override FeedIterator GetUserDefinedFunctionQueryIterator( return new FeedIteratorCore( databaseStreamIterator, - (response) => this.clientContext.ResponseFactory.CreateQueryFeedResponse( + (response) => this.ClientContext.ResponseFactory.CreateQueryFeedResponse( responseMessage: response, resourceType: ResourceType.UserDefinedFunction)); } - public override Task ReadUserDefinedFunctionAsync( + public Task ReadUserDefinedFunctionAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (string.IsNullOrEmpty(id)) { @@ -487,6 +513,7 @@ public override Task ReadUserDefinedFunctionAsync( } return this.ProcessUserDefinedFunctionOperationAsync( + diagnosticsContext: diagnosticsContext, id: id, operationType: OperationType.Read, streamPayload: null, @@ -494,10 +521,11 @@ public override Task ReadUserDefinedFunctionAsync( cancellationToken: cancellationToken); } - public override Task ReplaceUserDefinedFunctionAsync( + public Task ReplaceUserDefinedFunctionAsync( + CosmosDiagnosticsContext diagnosticsContext, UserDefinedFunctionProperties userDefinedFunctionProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (userDefinedFunctionProperties == null) { @@ -515,17 +543,19 @@ public override Task ReplaceUserDefinedFunctionAsyn } return this.ProcessUserDefinedFunctionOperationAsync( + diagnosticsContext: diagnosticsContext, id: userDefinedFunctionProperties.Id, operationType: OperationType.Replace, - streamPayload: this.clientContext.SerializerCore.ToStream(userDefinedFunctionProperties), + streamPayload: this.ClientContext.SerializerCore.ToStream(userDefinedFunctionProperties), requestOptions: requestOptions, cancellationToken: cancellationToken); } - public override Task DeleteUserDefinedFunctionAsync( + public Task DeleteUserDefinedFunctionAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (string.IsNullOrEmpty(id)) { @@ -533,6 +563,7 @@ public override Task DeleteUserDefinedFunctionAsync } return this.ProcessUserDefinedFunctionOperationAsync( + diagnosticsContext: diagnosticsContext, id: id, operationType: OperationType.Delete, streamPayload: null, @@ -541,18 +572,20 @@ public override Task DeleteUserDefinedFunctionAsync } private Task ProcessStoredProcedureOperationAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, OperationType operationType, Stream streamPayload, RequestOptions requestOptions, CancellationToken cancellationToken) { - Uri linkUri = this.clientContext.CreateLink( + Uri linkUri = this.ClientContext.CreateLink( parentLink: this.container.LinkUri.OriginalString, uriPathSegment: Paths.StoredProceduresPathSegment, id: id); return this.ProcessStoredProcedureOperationAsync( + diagnosticsContext: diagnosticsContext, linkUri: linkUri, operationType: operationType, streamPayload: streamPayload, @@ -561,6 +594,7 @@ private Task ProcessStoredProcedureOperationAsync( } private async Task ProcessStoredProcedureOperationAsync( + CosmosDiagnosticsContext diagnosticsContext, Uri linkUri, OperationType operationType, Stream streamPayload, @@ -568,6 +602,7 @@ private async Task ProcessStoredProcedureOperationAsync CancellationToken cancellationToken) { ResponseMessage response = await this.ProcessStreamOperationAsync( + diagnosticsContext: diagnosticsContext, resourceUri: linkUri, resourceType: ResourceType.StoredProcedure, operationType: operationType, @@ -576,22 +611,24 @@ private async Task ProcessStoredProcedureOperationAsync streamPayload: streamPayload, cancellationToken: cancellationToken); - return this.clientContext.ResponseFactory.CreateStoredProcedureResponse(response); + return this.ClientContext.ResponseFactory.CreateStoredProcedureResponse(response); } private Task ProcessTriggerOperationAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, OperationType operationType, Stream streamPayload, RequestOptions requestOptions, CancellationToken cancellationToken) { - Uri linkUri = this.clientContext.CreateLink( + Uri linkUri = this.ClientContext.CreateLink( parentLink: this.container.LinkUri.OriginalString, uriPathSegment: Paths.TriggersPathSegment, id: id); return this.ProcessTriggerOperationAsync( + diagnosticsContext: diagnosticsContext, linkUri: linkUri, operationType: operationType, streamPayload: streamPayload, @@ -600,6 +637,7 @@ private Task ProcessTriggerOperationAsync( } private async Task ProcessTriggerOperationAsync( + CosmosDiagnosticsContext diagnosticsContext, Uri linkUri, OperationType operationType, Stream streamPayload, @@ -607,6 +645,7 @@ private async Task ProcessTriggerOperationAsync( CancellationToken cancellationToken) { ResponseMessage response = await this.ProcessStreamOperationAsync( + diagnosticsContext: diagnosticsContext, resourceUri: linkUri, resourceType: ResourceType.Trigger, operationType: operationType, @@ -615,10 +654,11 @@ private async Task ProcessTriggerOperationAsync( streamPayload: streamPayload, cancellationToken: cancellationToken); - return this.clientContext.ResponseFactory.CreateTriggerResponse(response); + return this.ClientContext.ResponseFactory.CreateTriggerResponse(response); } private Task ProcessStreamOperationAsync( + CosmosDiagnosticsContext diagnosticsContext, Uri resourceUri, ResourceType resourceType, OperationType operationType, @@ -627,7 +667,7 @@ private Task ProcessStreamOperationAsync( RequestOptions requestOptions, CancellationToken cancellationToken) { - return this.clientContext.ProcessResourceOperationStreamAsync( + return this.ClientContext.ProcessResourceOperationStreamAsync( resourceUri: resourceUri, resourceType: resourceType, operationType: operationType, @@ -636,23 +676,25 @@ private Task ProcessStreamOperationAsync( partitionKey: partitionKey, streamPayload: streamPayload, requestEnricher: null, - diagnosticsContext: null, + diagnosticsContext: diagnosticsContext, cancellationToken: cancellationToken); } private Task ProcessUserDefinedFunctionOperationAsync( + CosmosDiagnosticsContext diagnosticsContext, string id, OperationType operationType, Stream streamPayload, RequestOptions requestOptions, CancellationToken cancellationToken) { - Uri linkUri = this.clientContext.CreateLink( + Uri linkUri = this.ClientContext.CreateLink( parentLink: this.container.LinkUri.OriginalString, uriPathSegment: Paths.UserDefinedFunctionsPathSegment, id: id); return this.ProcessUserDefinedFunctionOperationAsync( + diagnosticsContext: diagnosticsContext, linkUri: linkUri, operationType: operationType, streamPayload: streamPayload, @@ -661,6 +703,7 @@ private Task ProcessUserDefinedFunctionOperationAsy } private async Task ProcessUserDefinedFunctionOperationAsync( + CosmosDiagnosticsContext diagnosticsContext, Uri linkUri, OperationType operationType, Stream streamPayload, @@ -668,6 +711,7 @@ private async Task ProcessUserDefinedFunctionOperat CancellationToken cancellationToken) { ResponseMessage response = await this.ProcessStreamOperationAsync( + diagnosticsContext: diagnosticsContext, resourceUri: linkUri, resourceType: ResourceType.UserDefinedFunction, operationType: operationType, @@ -676,7 +720,7 @@ private async Task ProcessUserDefinedFunctionOperat streamPayload: streamPayload, cancellationToken: cancellationToken); - return this.clientContext.ResponseFactory.CreateUserDefinedFunctionResponse(response); + return this.ClientContext.ResponseFactory.CreateUserDefinedFunctionResponse(response); } } } diff --git a/Microsoft.Azure.Cosmos/src/Resource/Scripts/ScriptsInlineCore.cs b/Microsoft.Azure.Cosmos/src/Resource/Scripts/ScriptsInlineCore.cs index f8c7835c46..49b0050e6d 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/Scripts/ScriptsInlineCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/Scripts/ScriptsInlineCore.cs @@ -26,13 +26,16 @@ public override Task CreateStoredProcedureAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.CreateStoredProcedureAsync(storedProcedureProperties, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(CreateStoredProcedureAsync), + requestOptions, + (diagnostics) => base.CreateStoredProcedureAsync(diagnostics, storedProcedureProperties, requestOptions, cancellationToken)); } public override FeedIterator GetStoredProcedureQueryIterator( - QueryDefinition queryDefinition, - string continuationToken = null, - QueryRequestOptions requestOptions = null) + QueryDefinition queryDefinition, + string continuationToken = null, + QueryRequestOptions requestOptions = null) { return new FeedIteratorInlineCore(base.GetStoredProcedureQueryIterator( queryDefinition, @@ -78,7 +81,10 @@ public override Task ReadStoredProcedureAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReadStoredProcedureAsync(id, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReadStoredProcedureAsync), + requestOptions, + (diagnostics) => base.ReadStoredProcedureAsync(diagnostics, id, requestOptions, cancellationToken)); } public override Task ReplaceStoredProcedureAsync( @@ -86,7 +92,10 @@ public override Task ReplaceStoredProcedureAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReplaceStoredProcedureAsync(storedProcedureProperties, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReplaceStoredProcedureAsync), + requestOptions, + (diagnostics) => base.ReplaceStoredProcedureAsync(diagnostics, storedProcedureProperties, requestOptions, cancellationToken)); } public override Task DeleteStoredProcedureAsync( @@ -94,7 +103,10 @@ public override Task DeleteStoredProcedureAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.DeleteStoredProcedureAsync(id, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(DeleteStoredProcedureAsync), + requestOptions, + (diagnostics) => base.DeleteStoredProcedureAsync(diagnostics, id, requestOptions, cancellationToken)); } public override Task> ExecuteStoredProcedureAsync( @@ -104,7 +116,10 @@ public override Task> ExecuteStoredProce StoredProcedureRequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ExecuteStoredProcedureAsync(storedProcedureId, partitionKey, parameters, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ExecuteStoredProcedureAsync), + requestOptions, + (diagnostics) => base.ExecuteStoredProcedureAsync(diagnostics, storedProcedureId, partitionKey, parameters, requestOptions, cancellationToken)); } public override Task ExecuteStoredProcedureStreamAsync( @@ -114,7 +129,10 @@ public override Task ExecuteStoredProcedureStreamAsync( StoredProcedureRequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ExecuteStoredProcedureStreamAsync(storedProcedureId, partitionKey, parameters, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ExecuteStoredProcedureStreamAsync), + requestOptions, + (diagnostics) => base.ExecuteStoredProcedureStreamAsync(diagnostics, storedProcedureId, partitionKey, parameters, requestOptions, cancellationToken)); } public override Task ExecuteStoredProcedureStreamAsync( @@ -124,7 +142,10 @@ public override Task ExecuteStoredProcedureStreamAsync( StoredProcedureRequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ExecuteStoredProcedureStreamAsync(storedProcedureId, streamPayload, partitionKey, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ExecuteStoredProcedureStreamAsync), + requestOptions, + (diagnostics) => base.ExecuteStoredProcedureStreamAsync(diagnostics, storedProcedureId, streamPayload, partitionKey, requestOptions, cancellationToken)); } public override Task CreateTriggerAsync( @@ -132,7 +153,10 @@ public override Task CreateTriggerAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.CreateTriggerAsync(triggerProperties, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(CreateTriggerAsync), + requestOptions, + (diagnostics) => base.CreateTriggerAsync(diagnostics, triggerProperties, requestOptions, cancellationToken)); } public override FeedIterator GetTriggerQueryIterator( @@ -184,7 +208,10 @@ public override Task ReadTriggerAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReadTriggerAsync(id, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReadTriggerAsync), + requestOptions, + (diagnostics) => base.ReadTriggerAsync(diagnostics, id, requestOptions, cancellationToken)); } public override Task ReplaceTriggerAsync( @@ -192,7 +219,10 @@ public override Task ReplaceTriggerAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReplaceTriggerAsync(triggerProperties, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReplaceTriggerAsync), + requestOptions, + (diagnostics) => base.ReplaceTriggerAsync(diagnostics, triggerProperties, requestOptions, cancellationToken)); } public override Task DeleteTriggerAsync( @@ -200,7 +230,10 @@ public override Task DeleteTriggerAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.DeleteTriggerAsync(id, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(DeleteTriggerAsync), + requestOptions, + (diagnostics) => base.DeleteTriggerAsync(diagnostics, id, requestOptions, cancellationToken)); } public override Task CreateUserDefinedFunctionAsync( @@ -208,7 +241,10 @@ public override Task CreateUserDefinedFunctionAsync RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.CreateUserDefinedFunctionAsync(userDefinedFunctionProperties, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(CreateUserDefinedFunctionAsync), + requestOptions, + (diagnostics) => base.CreateUserDefinedFunctionAsync(diagnostics, userDefinedFunctionProperties, requestOptions, cancellationToken)); } public override FeedIterator GetUserDefinedFunctionQueryIterator( @@ -260,7 +296,10 @@ public override Task ReadUserDefinedFunctionAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReadUserDefinedFunctionAsync(id, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReadUserDefinedFunctionAsync), + requestOptions, + (diagnostics) => base.ReadUserDefinedFunctionAsync(diagnostics, id, requestOptions, cancellationToken)); } public override Task ReplaceUserDefinedFunctionAsync( @@ -268,7 +307,10 @@ public override Task ReplaceUserDefinedFunctionAsyn RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReplaceUserDefinedFunctionAsync(userDefinedFunctionProperties, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReplaceUserDefinedFunctionAsync), + requestOptions, + (diagnostics) => base.ReplaceUserDefinedFunctionAsync(diagnostics, userDefinedFunctionProperties, requestOptions, cancellationToken)); } public override Task DeleteUserDefinedFunctionAsync( @@ -276,7 +318,10 @@ public override Task DeleteUserDefinedFunctionAsync RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.DeleteUserDefinedFunctionAsync(id, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(DeleteUserDefinedFunctionAsync), + requestOptions, + (diagnostics) => base.DeleteUserDefinedFunctionAsync(diagnostics, id, requestOptions, cancellationToken)); } } } diff --git a/Microsoft.Azure.Cosmos/src/Resource/User/UserCore.cs b/Microsoft.Azure.Cosmos/src/Resource/User/UserCore.cs index 8115af1adb..2706e0b5c7 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/User/UserCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/User/UserCore.cs @@ -15,7 +15,7 @@ namespace Microsoft.Azure.Cosmos /// /// for creating new users, and reading/querying all user; /// - internal class UserCore : User + internal abstract class UserCore : User { internal UserCore( CosmosClientContext clientContext, @@ -44,31 +44,37 @@ internal UserCore( internal virtual CosmosClientContext ClientContext { get; } - /// - public override async Task ReadAsync(RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public async Task ReadAsync( + CosmosDiagnosticsContext diagnosticsContext, + RequestOptions requestOptions, + CancellationToken cancellationToken) { ResponseMessage response = await this.ReadStreamAsync( + diagnosticsContext: diagnosticsContext, requestOptions: requestOptions, cancellationToken: cancellationToken); return this.ClientContext.ResponseFactory.CreateUserResponse(this, response); } - public Task ReadStreamAsync(RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public Task ReadStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessStreamAsync( + diagnosticsContext: diagnosticsContext, streamPayload: null, operationType: OperationType.Read, requestOptions: requestOptions, cancellationToken: cancellationToken); } - /// - public override async Task ReplaceAsync(UserProperties userProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public async Task ReplaceAsync( + CosmosDiagnosticsContext diagnosticsContext, + UserProperties userProperties, + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (userProperties == null) { @@ -77,6 +83,7 @@ public override async Task ReplaceAsync(UserProperties userPropert this.ClientContext.ValidateResource(userProperties.Id); ResponseMessage response = await this.ReplaceStreamInternalAsync( + diagnosticsContext: diagnosticsContext, streamPayload: this.ClientContext.SerializerCore.ToStream(userProperties), requestOptions: requestOptions, cancellationToken: cancellationToken); @@ -84,9 +91,11 @@ public override async Task ReplaceAsync(UserProperties userPropert return this.ClientContext.ResponseFactory.CreateUserResponse(this, response); } - public Task ReplaceStreamAsync(UserProperties userProperties, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public Task ReplaceStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, + UserProperties userProperties, + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (userProperties == null) { @@ -95,33 +104,38 @@ public Task ReplaceStreamAsync(UserProperties userProperties, this.ClientContext.ValidateResource(userProperties.Id); return this.ReplaceStreamInternalAsync( + diagnosticsContext: diagnosticsContext, streamPayload: this.ClientContext.SerializerCore.ToStream(userProperties), requestOptions: requestOptions, cancellationToken: cancellationToken); } - /// - public override async Task DeleteAsync(RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public async Task DeleteAsync( + CosmosDiagnosticsContext diagnosticsContext, + RequestOptions requestOptions, + CancellationToken cancellationToken) { ResponseMessage response = await this.DeleteStreamAsync( + diagnosticsContext: diagnosticsContext, requestOptions: requestOptions, cancellationToken: cancellationToken); return this.ClientContext.ResponseFactory.CreateUserResponse(this, response); } - public Task DeleteStreamAsync(RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public Task DeleteStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessStreamAsync( + diagnosticsContext: diagnosticsContext, streamPayload: null, operationType: OperationType.Delete, requestOptions: requestOptions, cancellationToken: cancellationToken); } - /// public override Permission GetPermission(string id) { if (string.IsNullOrEmpty(id)) @@ -135,11 +149,12 @@ public override Permission GetPermission(string id) id); } - /// - public override async Task CreatePermissionAsync(PermissionProperties permissionProperties, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public async Task CreatePermissionAsync( + CosmosDiagnosticsContext diagnosticsContext, + PermissionProperties permissionProperties, + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (permissionProperties == null) { @@ -149,6 +164,7 @@ public override async Task CreatePermissionAsync(PermissionP this.ClientContext.ValidateResource(permissionProperties.Id); ResponseMessage response = await this.CreatePermissionStreamInternalAsync( + diagnosticsContext: diagnosticsContext, streamPayload: this.ClientContext.SerializerCore.ToStream(permissionProperties), tokenExpiryInSeconds: tokenExpiryInSeconds, requestOptions: requestOptions, @@ -157,10 +173,12 @@ public override async Task CreatePermissionAsync(PermissionP return this.ClientContext.ResponseFactory.CreatePermissionResponse(this.GetPermission(permissionProperties.Id), response); } - public Task CreatePermissionStreamAsync(PermissionProperties permissionProperties, + public Task CreatePermissionStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, + PermissionProperties permissionProperties, int? tokenExpiryInSeconds, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (permissionProperties == null) { @@ -170,16 +188,20 @@ public Task CreatePermissionStreamAsync(PermissionProperties pe this.ClientContext.ValidateResource(permissionProperties.Id); Stream streamPayload = this.ClientContext.SerializerCore.ToStream(permissionProperties); - return this.CreatePermissionStreamInternalAsync(streamPayload, + return this.CreatePermissionStreamInternalAsync( + diagnosticsContext, + streamPayload, tokenExpiryInSeconds, requestOptions, cancellationToken); } - public override async Task UpsertPermissionAsync(PermissionProperties permissionProperties, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + public async Task UpsertPermissionAsync( + CosmosDiagnosticsContext diagnosticsContext, + PermissionProperties permissionProperties, + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { if (permissionProperties == null) { @@ -189,6 +211,7 @@ public override async Task UpsertPermissionAsync(PermissionP this.ClientContext.ValidateResource(permissionProperties.Id); ResponseMessage response = await this.UpsertPermissionStreamInternalAsync( + diagnosticsContext: diagnosticsContext, streamPayload: this.ClientContext.SerializerCore.ToStream(permissionProperties), tokenExpiryInSeconds: tokenExpiryInSeconds, requestOptions: requestOptions, @@ -197,7 +220,6 @@ public override async Task UpsertPermissionAsync(PermissionP return this.ClientContext.ResponseFactory.CreatePermissionResponse(this.GetPermission(permissionProperties.Id), response); } - /// public override FeedIterator GetPermissionQueryIterator(QueryDefinition queryDefinition, string continuationToken = null, QueryRequestOptions requestOptions = null) @@ -263,10 +285,11 @@ public FeedIterator GetPermissionQueryStreamIterator(string queryText = null, } internal Task ProcessPermissionCreateAsync( + CosmosDiagnosticsContext diagnosticsContext, Stream streamPayload, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ClientContext.ProcessResourceOperationStreamAsync( resourceUri: this.LinkUri, @@ -283,15 +306,16 @@ internal Task ProcessPermissionCreateAsync( requestMessage.Headers.Add(HttpConstants.HttpHeaders.ResourceTokenExpiry, tokenExpiryInSeconds.Value.ToString()); } }, - diagnosticsContext: null, + diagnosticsContext: diagnosticsContext, cancellationToken: cancellationToken); } internal Task ProcessPermissionUpsertAsync( + CosmosDiagnosticsContext diagnosticsContext, Stream streamPayload, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ClientContext.ProcessResourceOperationStreamAsync( resourceUri: this.LinkUri, @@ -308,16 +332,18 @@ internal Task ProcessPermissionUpsertAsync( requestMessage.Headers.Add(HttpConstants.HttpHeaders.ResourceTokenExpiry, tokenExpiryInSeconds.Value.ToString()); } }, - diagnosticsContext: null, + diagnosticsContext: diagnosticsContext, cancellationToken: cancellationToken); } private Task ReplaceStreamInternalAsync( + CosmosDiagnosticsContext diagnosticsContext, Stream streamPayload, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessStreamAsync( + diagnosticsContext: diagnosticsContext, streamPayload: streamPayload, operationType: OperationType.Replace, requestOptions: requestOptions, @@ -325,12 +351,14 @@ private Task ReplaceStreamInternalAsync( } private Task ProcessStreamAsync( + CosmosDiagnosticsContext diagnosticsContext, Stream streamPayload, OperationType operationType, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessResourceOperationStreamAsync( + diagnosticsContext: diagnosticsContext, streamPayload: streamPayload, operationType: operationType, linkUri: this.LinkUri, @@ -340,12 +368,13 @@ private Task ProcessStreamAsync( } private Task ProcessResourceOperationStreamAsync( - Stream streamPayload, - OperationType operationType, - Uri linkUri, - ResourceType resourceType, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + CosmosDiagnosticsContext diagnosticsContext, + Stream streamPayload, + OperationType operationType, + Uri linkUri, + ResourceType resourceType, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ClientContext.ProcessResourceOperationStreamAsync( resourceUri: linkUri, @@ -356,17 +385,19 @@ private Task ProcessResourceOperationStreamAsync( streamPayload: streamPayload, requestOptions: requestOptions, requestEnricher: null, - diagnosticsContext: null, + diagnosticsContext: diagnosticsContext, cancellationToken: cancellationToken); } private Task CreatePermissionStreamInternalAsync( + CosmosDiagnosticsContext diagnosticsContext, Stream streamPayload, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessPermissionCreateAsync( + diagnosticsContext: diagnosticsContext, streamPayload: streamPayload, tokenExpiryInSeconds: tokenExpiryInSeconds, requestOptions: requestOptions, @@ -374,12 +405,14 @@ private Task CreatePermissionStreamInternalAsync( } private Task UpsertPermissionStreamInternalAsync( + CosmosDiagnosticsContext diagnosticsContext, Stream streamPayload, - int? tokenExpiryInSeconds = null, - RequestOptions requestOptions = null, - CancellationToken cancellationToken = default(CancellationToken)) + int? tokenExpiryInSeconds, + RequestOptions requestOptions, + CancellationToken cancellationToken) { return this.ProcessPermissionUpsertAsync( + diagnosticsContext: diagnosticsContext, streamPayload: streamPayload, tokenExpiryInSeconds: tokenExpiryInSeconds, requestOptions: requestOptions, diff --git a/Microsoft.Azure.Cosmos/src/Resource/User/UserInlineCore.cs b/Microsoft.Azure.Cosmos/src/Resource/User/UserInlineCore.cs index c02bf20fce..53b1ead214 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/User/UserInlineCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/User/UserInlineCore.cs @@ -26,7 +26,10 @@ public override Task ReadAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReadAsync(requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReadAsync), + requestOptions, + (diagnostics) => base.ReadAsync(diagnostics, requestOptions, cancellationToken)); } public override Task ReplaceAsync( @@ -34,14 +37,20 @@ public override Task ReplaceAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.ReplaceAsync(userProperties, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(ReplaceAsync), + requestOptions, + (diagnostics) => base.ReplaceAsync(diagnostics, userProperties, requestOptions, cancellationToken)); } public override Task DeleteAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.DeleteAsync(requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(DeleteAsync), + requestOptions, + (diagnostics) => base.DeleteAsync(diagnostics, requestOptions, cancellationToken)); } public override Permission GetPermission(string id) @@ -55,7 +64,10 @@ public override Task CreatePermissionAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.CreatePermissionAsync(permissionProperties, tokenExpiryInSeconds, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(CreatePermissionAsync), + requestOptions, + (diagnostics) => base.CreatePermissionAsync(diagnostics, permissionProperties, tokenExpiryInSeconds, requestOptions, cancellationToken)); } public override Task UpsertPermissionAsync( @@ -64,7 +76,10 @@ public override Task UpsertPermissionAsync( RequestOptions requestOptions = null, CancellationToken cancellationToken = default) { - return TaskHelper.RunInlineIfNeededAsync(() => base.UpsertPermissionAsync(permissionProperties, tokenExpiryInSeconds, requestOptions, cancellationToken)); + return this.ClientContext.OperationHelperAsync( + nameof(UpsertPermissionAsync), + requestOptions, + (diagnostics) => base.UpsertPermissionAsync(diagnostics, permissionProperties, tokenExpiryInSeconds, requestOptions, cancellationToken)); } public override FeedIterator GetPermissionQueryIterator(