diff options
author | hor911 <hor911@ydb.tech> | 2023-02-21 16:08:48 +0300 |
---|---|---|
committer | hor911 <hor911@ydb.tech> | 2023-02-21 16:08:48 +0300 |
commit | a592760719385100032c595377aee9cd5c6b3977 (patch) | |
tree | f4996c076dea5c68ded0b36126562e515c29a429 /conanfile.txt | |
parent | d203996858cdf8c2c59024e6cedab2819d17ebe5 (diff) | |
download | ydb-a592760719385100032c595377aee9cd5c6b3977.tar.gz |
Error handling when Content-Length == 0
Фикс нетривиальный. Он чинит несколько проблем:
1. Ситуация когда у нас возвращается код ошибки (i.e. 403) и пустой body (Content-Length: 0). В это случае не вызывался TEasyCurlStream::Write(), не заполнялось поле HttpResponseCode и не вызывался callback OnStart(), как следствие в корректор не приходило событие TEvPrivate::TEvReadStarted и не работал retry policy.
2. Для ретраев в рамках https://a.yandex-team.ru/review/2940722 было добавлен код анализа retry police в обработчик TEvReadFinished, но если OnStart() все-таки вызывается (а теперь он вызывается всегда) это генерировало двойной вызов GetNextRetryDelay() что некорректно и может даже бесконечно перезапускать запросы в некоторых случаях, убираю это.
3. Аналогично в отсутствие данных не срабатывало событие TEvDataPart и не возвращался код ошибки HTTP в Issues, поправил и это тоже.
Как это проверить-зафиксировать тестом - не знаю. Надо уметь возвращать управляемые ошибки от эмулятора S3 MOTO, но там такой функциональности нет. Собственно с ошибкой я столкнулся, когда отлаживал на этом эмуляторе Multi-part Upload, а он не работал из-за ошибок с обоих сторон.
Diffstat (limited to 'conanfile.txt')
0 files changed, 0 insertions, 0 deletions