DynamoDb .AsyncSearch <T>.GetRemainingAsync зависает случайным образом - PullRequest
2 голосов
/ 19 марта 2019

Я использую AWS .Net Core SDK для подключения к Amazon DynamoDB, все работает нормально, за исключением многократного и случайного получения тайм-аутов (около 30 секунд на запрос).

Я использовал ведение журнала и проследил проблему доМетод GetRemainingAsync после получения результатов операции сканирования.

    public async Task<IList<T>> GetByPropertyAsync(List<KeyValuePair<string, object>> properties)
    {
        var conditions = new List<ScanCondition>();
        foreach (var property in properties)
        {
            conditions.Add(new ScanCondition(property.Key, ScanOperator.Equal, property.Value));
        }
        var response = base.ScanAsync<T>(conditions, _config);
        return response.GetRemainingAsync().Result;
    }

При регистрации и отправке нескольких запросов (один за другим) строка response.GetRemainingAsync().Result зависает около 30 секунд, это часто происходит.

Возможнобыть связанной с потоками проблемой, я попытался запустить эту строку в отдельном потоке, используя:

Task.Run(() => response.GetRemainingAsync()).Result;

Но это тоже не сработало.

1 Ответ

0 голосов
/ 06 апреля 2019

Проблема была в response.GetRemainingAsync() получении ProvisionedThroughputExceededException, который будет вызывать повторную попытку до истечения времени ожидания, что звучит как зависание.

Решение заключается в увеличении лимита ProvisionedThroughput или переходе на модель по требованию или, конечно, обновлении клиента DynamodB политики повторов.

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