Skip to content

[BUG]:CosmosNullReferenceException when hedging enabled and client called with cancelled cancellation token #4737

@anderuso

Description

@anderuso

Describe the bug
CosmosNullReferenceException is thrown when cosmosdb client hedging enabled in the client 3.44.0P and ReadItemAsync() is called with cancelled cancellation token

To Reproduce
Create a cosmos client instance with Hedging enabled and call the client's ReadItemAsync() method with an already canceled cancellation token (when AvailabilityStrategy option is not set, CosmosOperationCanceledException is thrown properly).

CosmosClientOptions options = new CosmosClientOptions
{
    ConnectionMode = ConnectionMode.Direct,
    ApplicationPreferredRegions = new[] { "Central US", "France Central" },
    AvailabilityStrategy = AvailabilityStrategy.CrossRegionHedgingStrategy(TimeSpan.FromMilliseconds(50), null)
};
CosmosClient client = new CosmosClient("https://account:443/", new DefaultAzureCredential(), options);
CancellationTokenSource cts = new CancellationTokenSource();
cts.Cancel();
await client.GetContainer("db", "container").ReadItemAsync<ItemType>("a", new PartitionKey("b"), cancellationToken: cts.Token);

Expected behavior
CosmosOperationCanceledException is thrown

Actual behavior
CosmosNullReferenceException Exception is thrown

Environment summary
SDK Version: cosmos-netstandard-sdk/3.44.0P
OS Version (e.g. Windows, Linux, MacOSX): X64|Microsoft Windows 10.0.20348|.NET 8.0.8

Additional context
Actual stack trace:
---> (Inner) System.AggregateException
---> (Inner #0) Microsoft.Azure.Cosmos.CosmosNullReferenceException: Object reference not set to an instance of an object.{"Summary":{},"name":"ReadItemAsync","start datetime":"2024-09-27T08:21:27.877Z","duration in milliseconds":0.6168,"data":{"Client Configuration":{"Client Created Time Utc":"2024-09-26T07:35:42.1814932Z","MachineId":"vmId","VM Region":"centralus","NumberOfClientsCreated":4,"NumberOfActiveClients":4,"ConnectionMode":"Direct","User Agent":"cosmos-netstandard-sdk/3.44.0P|1|X64|Microsoft Windows 10.0.20348|.NET 8.0.8|L|","ConnectionConfig":{"gw":"(cps:50, urto:6, p:False, httpf: False)","rntbd":"(cto: 2, icto: -1, mrpc: 30, mcpe: 65535, erd: True, pr: PrivatePortPool)","other":"(ed:False, be:False)"},"ConsistencyConfig":"(consistency: NotSet, prgns:[Central US, South Central US], apprgn: )","ProcessorCount":4},"DistributedTraceId":"e33cf7078803921b45b15859607c23d4"},"children":[{"name":"Microsoft.Azure.Cosmos.Handlers.RequestInvokerHandler","duration in milliseconds":0.4678,"children":[{"name":"Microsoft.Azure.Cosmos.Handlers.DiagnosticsHandler","duration in milliseconds":0.1713,"children":[{"name":"Microsoft.Azure.Cosmos.Handlers.TelemetryHandler","duration in milliseconds":0.1331,"children":[{"name":"Microsoft.Azure.Cosmos.Handlers.RetryHandler","duration in milliseconds":0.0923}]}]},{"name":"Microsoft.Azure.Cosmos.Handlers.DiagnosticsHandler","duration in milliseconds":0.1242,"children":[{"name":"Microsoft.Azure.Cosmos.Handlers.TelemetryHandler","duration in milliseconds":0.0865,"children":[{"name":"Microsoft.Azure.Cosmos.Handlers.RetryHandler","duration in milliseconds":0.0506}]}]}]}]}
---> (Inner) System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Azure.Cosmos.CosmosResponseFactoryCore.ProcessMessage(ResponseMessage responseMessage, Func`2 createResponse)
at await Microsoft.Azure.Cosmos.ContainerCore.ReadItemAsync(?)
at await Microsoft.Azure.Cosmos.ClientContextCore.RunWithDiagnosticsHelperAsync(?)
<---
at await Microsoft.Azure.Cosmos.ClientContextCore.RunWithDiagnosticsHelperAsync(?)
at await Microsoft.Azure.Cosmos.ClientContextCore.OperationHelperWithRootTraceAsync(?)
at our code calling the client's ReadItemAsync()

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions