aboutsummaryrefslogtreecommitdiffstats
path: root/library
diff options
context:
space:
mode:
authorhor911 <hor911@ydb.tech>2023-02-21 16:08:48 +0300
committerhor911 <hor911@ydb.tech>2023-02-21 16:08:48 +0300
commita592760719385100032c595377aee9cd5c6b3977 (patch)
treef4996c076dea5c68ded0b36126562e515c29a429 /library
parentd203996858cdf8c2c59024e6cedab2819d17ebe5 (diff)
downloadydb-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 'library')
0 files changed, 0 insertions, 0 deletions