[英]DirectConnection cannot be used when ConnectionModeSwitch is set to UseConnectionMode while connect with Azure Cosmos DB API for MongoDB
[英]Azure Cosmos DB MongoDB API 4.0 transactions exception handling
我正在開發一個應用程序,該應用程序需要處理對 MongoDB 文檔所做更新的同步。 為此,我正在使用 Azure Cosmos DB MongoDB API 4.0,它支持多文檔事務。
MongoDB.Driver.MongoCommandException: Command update failed: Error=112, Details='Response status code does not indicate success: Conflict (409); Substatus: 5403; ActivityId: 88cc0f1f-708b-4c42-9ba7-70e367f16fe3; Reason: ({ "Errors": [ "Conflicting request to resource has been attempted. Retry to avoid conflicts." ] });. at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.ProcessResponse(ConnectionId connectionId, CommandMessage responseMessage) at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.ExecuteAsync(IConnection connection, CancellationToken cancellationToken) at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocolAsync[TResult](IWireProtocol`1 protocol, ICoreSession session, CancellationToken cancellationToken) at MongoDB.Driver.Core.Operations.RetryableWriteOperationExecutor.ExecuteAsync[TResult](IRetryableWriteOperation`1 operation, RetryableWriteContext context, CancellationToken cancellationToken) at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase`1.ExecuteBatchAsync(RetryableWriteContext context, Batch batch, CancellationToken cancellationToken) at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase`1.ExecuteBatchesAsync(RetryableWriteContext context, CancellationToken cancellationToken) at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.ExecuteBatchAsync(RetryableWriteContext context, Batch batch, CancellationToken cancellationToken) at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.ExecuteAsync(IWriteBinding binding, CancellationToken cancellationToken) at MongoDB.Driver.OperationExecutor.ExecuteWriteOperationAsync[TResult](IWriteBinding binding, IWriteOperation`1 operation, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImpl`1.ExecuteWriteOperationAsync[TResult](IClientSessionHandle session, IWriteOperation`1 operation, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImpl`1.BulkWriteAsync(IClientSessionHandle session, IEnumerable`1 requests, BulkWriteOptions options, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionBase`1.UpdateOneAsync(FilterDefinition`1 filter, UpdateDefinition`1 update, UpdateOptions options, Func`3 bulkWriteAsync)
我嘗試多次重試失敗的更新操作(延遲 1000 毫秒),但沒有任何運氣。
每次重試都以相同的異常消息結束。
最后,異常消息變為:
MongoDB.Driver.MongoCommandException: Command update failed: Error=2, Details='Response status code does not indicate success: BadRequest (400); Substatus: 1101; ActivityId: bcb86266-aa9a-4a2d-9841-7f451d6c72ee; Reason: (Message: {"Errors":["Transaction is not active"]}
我相信最后一個例外是不同的,因為事務超時(文檔中的超時 = 5 秒)。
你很擅長診斷錯誤。 Azure Cosmos DB API for MongoDB 具有列出常見錯誤和解決方案的文檔。
(1) 當另一個事務或寫操作正在使用同一個文檔時,會發生 112 錯誤。 重試操作直到成功是推薦的解決方案。
(2) 如您所述,第二個錯誤-“事務未激活”表示已超過 5 秒超時。 是否可以限制 scope 在多文檔事務中進行的操作?
另一種可能性是,如果由於可用的 RU(吞吐量)數量不足而限制操作(並在服務器端重試),操作花費的時間比預期的要長。 檢查這一點的一個好方法是查看標准化 RU 消耗是否達到 100% 並啟用服務器端重試(默認情況下啟用)。 如果是這種情況,增加 RU(吞吐量)的數量應該可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.