Коды ответа на статус

Следующие коды состояния могут быть возвращены в ответах 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 .