Следующие коды состояния могут быть возвращены в ответах gRPC. Это применимо ко всем версиям gRPC, описанным на этом сайте.
Код | Положение дел | Примечания |
---|---|---|
0 | OK | Возвращение к Success |
1 | CANCELLED | Операция была отменена, как правило, вызывающей стороной. |
2 | UNKNOWN | Например, эта ошибка может быть возвращена, когда значение статуса, полученное из другого адресного пространства, принадлежит пространству ошибок, которое неизвестно в этом адресном пространстве. Кроме того, в эту ошибку могут быть преобразованы ошибки, вызванные API, которые не возвращают достаточно информации об ошибках. |
3 | INVALID_ARGUMENT | Клиент указал недопустимый аргумент. |
4 | DEADLINE_EXCEEDED | Срок истек до завершения операции. Для операций, изменяющих состояние системы, эта ошибка может возвращаться, даже если операция завершилась успешно. Например, успешный ответ от сервера, который был задержан на время, достаточное для истечения крайнего срока. |
5 | NOT_FOUND | Некоторый запрошенный объект не найден. |
6 | ALREADY_EXISTS | Сущность, которую пытался создать клиент, уже существует. |
7 | PERMISSION_DENIED | У вызывающего объекта нет разрешения на выполнение указанной операции. Не используйте PERMISSION_DENIED для отклонений, вызванных исчерпанием какого-либо ресурса; вместо этого используйте RESOURCE_EXHAUSTED для этих ошибок. Не используйте PERMISSION_DENIED , если вызывающий абонент не может быть идентифицирован (вместо этого используйте UNAUTHENTICATED для таких ошибок). Получение кода ошибки PERMISSION_DENIED не означает, что запрос действителен, или запрошенный объект существует или удовлетворяет другим предварительным условиям. |
8 | RESOURCE_EXHAUSTED | Какой-то ресурс исчерпан, возможно, квота на пользователя или, возможно, во всей файловой системе недостаточно места. |
9 | FAILED_PRECONDITION | Операция отклонена, поскольку система не находится в состоянии, необходимом для выполнения операции. Например, удаляемый каталог не пуст или операция rmdir применяется к некаталогу. |
10 | ABORTED | Операция была прервана, как правило, из-за проблемы параллелизма, например сбоя проверки секвенсора или прерывания транзакции. |
11 | OUT_OF_RANGE | Была предпринята попытка выполнить операцию за пределами допустимого диапазона. |
12 | UNIMPLEMENTED | Операция не реализована или не поддерживается/включена в этом сервисе. |
13 | INTERNAL | Внутренние ошибки. Это означает, что некоторые инварианты, ожидаемые базовой системой, были нарушены. Этот код ошибки зарезервирован для серьезных ошибок. |
14 | UNAVAILABLE | В настоящее время услуга недоступна. Скорее всего, это временное состояние, которое можно исправить, если повторить попытку с отсрочкой. |
15 | DATA_LOSS | Невосстановимая потеря или повреждение данных. |
16 | UNAUTHENTICATED | В запросе нет действительных учетных данных аутентификации для операции. |
Иногда могут применяться несколько кодов ошибок. Службы должны возвращать наиболее конкретный код ошибки, который применим. Например, отдайте предпочтение OUT_OF_RANGE
вместо FAILED_PRECONDITION
, если применимы оба кода. Аналогично, отдавайте предпочтение NOT_FOUND
или ALREADY_EXISTS
вместо FAILED_PRECONDITION
.
FAILED_PRECONDITION, ABORTED или UNAVAILABLE
Ниже приведен лакмусовый тест, который может помочь вам сделать выбор между FAILED_PRECONDITION
, ABORTED
и UNAVAILABLE
:
- Используйте
UNAVAILABLE
если клиент может повторить только неудачный вызов. - Используйте
ABORTED
если клиент должен повторить попытку на более высоком уровне, например, когда указанная клиентом проверка и установка завершается неудачей, что указывает на то, что клиент должен перезапустить последовательность чтения-изменения-записи. - Используйте
FAILED_PRECONDITION
, если клиент не должен повторять попытку до тех пор, пока состояние системы не будет явно исправлено. Например, если «rmdir» завершается неудачно, потому что каталог не пуст, лучше всего вернутьFAILED_PRECONDITION
, поскольку клиент не должен повторять попытку, пока файлы не будут удалены из каталога.
INVALID_ARGUMENT, FAILED_PRECONDITION и OUT_OF_RANGE
Ниже приводится лакмусовая бумажка, которая может помочь вам сделать выбор между INVALID_ARGUMENT
, FAILED_PRECONDITION
и OUT_OF_RANGE
:
- Используйте
INVALID_ARGUMENT
, если аргументы проблематичны независимо от состояния системы. Например: неверный URL-адрес. - Используйте
OUT_OF_RANGE
, если значение выходит за пределы диапазона из-за состояния системы. Например, start_date предшествуетstart_date_restrict
. - Используйте
FAILED_PRECONDITION
, если значение недопустимо из-за состояния системы, но не является значениемOUT_OF_RANGE
.