Azure CosmosDB: ошибка при массовом удалении - PullRequest
1 голос
/ 06 августа 2020

Я удаляю объемные элементы и получаю указанную ниже ошибку на своем локальном компьютере. Я использую CosmosDB SDK 3.0.

Произошла ошибка при инициализации CosmosBb. Произошла одна или несколько ошибок. (Код состояния ответа не указывает на успех: ServiceUnavailable (503); Подстатус: 0; ActivityId: befe13e5-172f-4930-953f-e24bf9b0a14a; Причина: (Служба в настоящее время недоступна. ActivityId: befe13e5-172f-4930-953f-e14a24af9, RequestStartTime: 2020-08-06T07: 04: 58.1807989Z, RequestEndTime: 2020-08-06T07: 05: 28.2986219Z, Количество предпринятых регионов: 1 ResponseTime: 2020-08-06T07: 04: 59.1993537Z, StoreResult: StorePhysicalAddress: rntbd : //127.0.0.1: 10253 / apps / DocDbApp / services / DocDbServer18 / partitions / a4cb495e-38c8-11e6-8106-8cdcd42c33be / replicas / 1p /, LSN: -1, GlobalCommittedLsn: -1, PartitionKeyRangeId:, IsValid: False , StatusCode: 410, SubStatusCode: 0, RequestCharge: 0, ItemLSN: -1, SessionToken:, UsingLocalLSN: True, TransportException: произошла ошибка транспорта клиента: не удалось подключиться к удаленной конечной точке. (Время: 2020-08-06T07: 04: 59.1993537Z, идентификатор действия: befe13e5-172f-4930-953f-e24bf9b0a14a, код ошибки: ConnectFailed [0x0005], основная ошибка: ошибка сокета

H Вот мой метод удаления.

private async Task DeleteAllExistingSubscriptions(string userUUId)
        {
            var subscriptions = await _repository
                .GetItemsAsync(x => x.DistributionUserIds.Contains(userUUId), o => o.PayerNumber);

            if (subscriptions.Any())
            {
                List<Task> bulkOperations = new List<Task>();
                foreach (var subscription in subscriptions)
                {
                    bulkOperations.Add(_repository
                        .DeleteItemAsync(subscription.Id.ToString(), subscription.PayerNumber));
                }
                await Task.WhenAll(bulkOperations);
            }
        }

Клиент Cosmos:

private static void RegisterCosmosClient(IServiceCollection serviceCollection, IConfiguration configuration)
        {
            string cosmosDbEndpoint = configuration["CosmoDbEndpoint"];

            Ensure.ConditionIsMet(cosmosDbEndpoint.IsNotNullOrEmpty(),
                () => new InvalidOperationException("Unable to locate configured CosmosDB endpoint"));

            var cosmosDbAuthKey = configuration["CosmoDbAuthkey"];

            Ensure.ConditionIsMet(cosmosDbAuthKey.IsNotNullOrEmpty(),
                () => new InvalidOperationException("Unable to locate configured CosmosDB auth key"));

            serviceCollection.AddSingleton(s => new CosmosClient(cosmosDbEndpoint, cosmosDbAuthKey,
                new CosmosClientOptions { AllowBulkExecution = true }));
        }

1 Ответ

1 голос
/ 06 августа 2020

Ошибка связана с проблемой подключения на стороне клиента:

TransportException: A client transport error occurred: Failed to connect to the remote endpoint. 
(Time: 2020-08-06T07:04:59.1993537Z, 
activity ID: befe13e5-172f-4930-953f-e24bf9b0a14a, 
error code: ConnectFailed [0x0005], base error: socket error

Частая причина - нехватка ресурсов:

  • Объем данных, которые вы отправляете, требует, чтобы ЦП был обработано, если ЦП среды недостаточно для обработки объема данных, вы увидите всплески ЦП (> 70–100%), которые вызовут задержку соединений TCP и вызовут эти проблемы. В этом случае либо уменьшите объем данных, либо увеличьте доступные ресурсы.
  • При работе в облаке это также может быть [ограничение SNAT] (https://docs.microsoft.com/azure/cosmos-db/troubleshoot-dot-net-sdk#snat] или подключение ограничение на экземпляр (в зависимости от сервиса ограничения на количество подключений различаются).

Ссылка: https://docs.microsoft.com/azure/cosmos-db/troubleshoot-dot-net-sdk-request-timeout#troubleshooting -шаги

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...