Ошибки и повторные запросы¶
Страница перечисляет ответы, которые приложение получает, когда хранилище не может выполнить запрос или ограничивает его, и говорит, какие из них имеет смысл повторять. Она нужна разработчику, который настраивает повторы и сроки ожидания в клиенте S3.
Какие ответы повторять¶
| Ответ | Когда приходит | Что делать |
|---|---|---|
503 ServiceUnavailable |
хранилище временно не может обслужить запрос (см. Ответы при отказе хранилища) | повторить запрос |
503 SlowDown |
истекло предельное время запроса либо инстанс перегружен обращениями к метаданным (см. Предельное время запроса) | повторить запрос с задержкой |
503 SlowDown с заголовком Retry-After |
превышено ограничение частоты запросов пользователя или бакета | повторить после времени из заголовка |
403 QuotaExceeded |
превышена квота на хранимый объём или число объектов | не повторять: освободить место или увеличить квоту |
404 NoSuchKey для объекта, который был записан |
данные объекта утрачены (см. Ответы при отказе хранилища) | повтор не поможет |
500 InternalError |
внутренняя ошибка | сообщить администратору идентификатор запроса из ответа |
Квоты и ограничение частоты запросов задаёт администратор (см. Квоты и ограничение скорости).
Предельное время запроса¶
Сервер ограничивает время выполнения каждого запроса. Срок отсчитывается от поступления запроса.
| Запросы | Срок по умолчанию | Что не входит в срок |
|---|---|---|
| чтение объекта и его атрибутов, списки | 30 секунд | передача тела ответа клиенту |
| запись, копирование, составная загрузка, удаление объектов | 30 секунд | время, пока сервер ждёт от клиента тело объекта |
| создание и удаление бакета, изменение его настроек | 360 секунд | — |
Запрос, срок которого истёк, получает ответ 503 SlowDown, а если срок истёк
во время согласования изменения в кластере — 503 ServiceUnavailable. Сроки
настраивает администратор параметрами read_timeout_s, write_timeout_s и
catalog_timeout_s (см.
Предельное время запроса).
Срок ожидания в клиенте и в обратном прокси перед хранилищем стоит задавать не
меньше серверного: прокси, оборвавший ожидание раньше, вернёт клиенту ответ
504, а запрос продолжит выполняться и может завершиться успешно (см.
Шаг 9 установки).
Ответы при отказе хранилища¶
Запрос, который хранилище не может обслужить, получает один из трёх ответов:
| Ситуация | Ответ | Повтор |
|---|---|---|
хранилище временно не может обслужить запрос: недоступно или не принимает запись слишком много участников группы, для чтения доступно меньше k фрагментов, у инстанса нет подходящей группы или места, кластер ещё не сформирован |
503 ServiceUnavailable |
клиент повторяет запрос |
полоса объекта признана утраченной и внесена в реестр повреждённых полос s3r_t<N>_damage |
404 NoSuchKey: объект читается как отсутствующий |
повтор не поможет |
| внутренняя ошибка | 500 InternalError |
В сообщении указана ситуация, но не место отказа: адреса инстансов, номера фрагментов, блоков и групп в ответ не попадают. Сообщение устроено так:
- в конце в квадратных скобках стоят имя и номер кода ошибки S3R;
- за ними следует идентификатор запроса;
- подробности записываются в журнал инстанса вместе с этим идентификатором.
Например, запись при двух недоступных участниках группы 2+2 получает ответ 503 с сообщением:
no placement group has enough reachable members to take the write [NoQuorum/20029] request 3F2A9C0D5B7E1186
У ошибки Picodata или Tarantool нет кода S3R: сообщение содержит её номер и тип и заканчивается идентификатором запроса, а её текст в ответ не попадает.