1 /* 2 * 3 * Copyright 2015 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 #ifndef GRPC_IMPL_CODEGEN_STATUS_H 20 #define GRPC_IMPL_CODEGEN_STATUS_H 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 typedef enum { 27 /** Not an error; returned on success */ 28 GRPC_STATUS_OK = 0, 29 30 /** The operation was cancelled (typically by the caller). */ 31 GRPC_STATUS_CANCELLED = 1, 32 33 /** Unknown error. An example of where this error may be returned is 34 if a Status value received from another address space belongs to 35 an error-space that is not known in this address space. Also 36 errors raised by APIs that do not return enough error information 37 may be converted to this error. */ 38 GRPC_STATUS_UNKNOWN = 2, 39 40 /** Client specified an invalid argument. Note that this differs 41 from FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments 42 that are problematic regardless of the state of the system 43 (e.g., a malformed file name). */ 44 GRPC_STATUS_INVALID_ARGUMENT = 3, 45 46 /** Deadline expired before operation could complete. For operations 47 that change the state of the system, this error may be returned 48 even if the operation has completed successfully. For example, a 49 successful response from a server could have been delayed long 50 enough for the deadline to expire. */ 51 GRPC_STATUS_DEADLINE_EXCEEDED = 4, 52 53 /** Some requested entity (e.g., file or directory) was not found. */ 54 GRPC_STATUS_NOT_FOUND = 5, 55 56 /** Some entity that we attempted to create (e.g., file or directory) 57 already exists. */ 58 GRPC_STATUS_ALREADY_EXISTS = 6, 59 60 /** The caller does not have permission to execute the specified 61 operation. PERMISSION_DENIED must not be used for rejections 62 caused by exhausting some resource (use RESOURCE_EXHAUSTED 63 instead for those errors). PERMISSION_DENIED must not be 64 used if the caller can not be identified (use UNAUTHENTICATED 65 instead for those errors). */ 66 GRPC_STATUS_PERMISSION_DENIED = 7, 67 68 /** The request does not have valid authentication credentials for the 69 operation. */ 70 GRPC_STATUS_UNAUTHENTICATED = 16, 71 72 /** Some resource has been exhausted, perhaps a per-user quota, or 73 perhaps the entire file system is out of space. */ 74 GRPC_STATUS_RESOURCE_EXHAUSTED = 8, 75 76 /** Operation was rejected because the system is not in a state 77 required for the operation's execution. For example, directory 78 to be deleted may be non-empty, an rmdir operation is applied to 79 a non-directory, etc. 80 81 A litmus test that may help a service implementor in deciding 82 between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE: 83 (a) Use UNAVAILABLE if the client can retry just the failing call. 84 (b) Use ABORTED if the client should retry at a higher-level 85 (e.g., restarting a read-modify-write sequence). 86 (c) Use FAILED_PRECONDITION if the client should not retry until 87 the system state has been explicitly fixed. E.g., if an "rmdir" 88 fails because the directory is non-empty, FAILED_PRECONDITION 89 should be returned since the client should not retry unless 90 they have first fixed up the directory by deleting files from it. 91 (d) Use FAILED_PRECONDITION if the client performs conditional 92 REST Get/Update/Delete on a resource and the resource on the 93 server does not match the condition. E.g., conflicting 94 read-modify-write on the same resource. */ 95 GRPC_STATUS_FAILED_PRECONDITION = 9, 96 97 /** The operation was aborted, typically due to a concurrency issue 98 like sequencer check failures, transaction aborts, etc. 99 100 See litmus test above for deciding between FAILED_PRECONDITION, 101 ABORTED, and UNAVAILABLE. */ 102 GRPC_STATUS_ABORTED = 10, 103 104 /** Operation was attempted past the valid range. E.g., seeking or 105 reading past end of file. 106 107 Unlike INVALID_ARGUMENT, this error indicates a problem that may 108 be fixed if the system state changes. For example, a 32-bit file 109 system will generate INVALID_ARGUMENT if asked to read at an 110 offset that is not in the range [0,2^32-1], but it will generate 111 OUT_OF_RANGE if asked to read from an offset past the current 112 file size. 113 114 There is a fair bit of overlap between FAILED_PRECONDITION and 115 OUT_OF_RANGE. We recommend using OUT_OF_RANGE (the more specific 116 error) when it applies so that callers who are iterating through 117 a space can easily look for an OUT_OF_RANGE error to detect when 118 they are done. */ 119 GRPC_STATUS_OUT_OF_RANGE = 11, 120 121 /** Operation is not implemented or not supported/enabled in this service. */ 122 GRPC_STATUS_UNIMPLEMENTED = 12, 123 124 /** Internal errors. Means some invariants expected by underlying 125 system has been broken. If you see one of these errors, 126 something is very broken. */ 127 GRPC_STATUS_INTERNAL = 13, 128 129 /** The service is currently unavailable. This is a most likely a 130 transient condition and may be corrected by retrying with 131 a backoff. Note that it is not always safe to retry non-idempotent 132 operations. 133 134 WARNING: Although data MIGHT not have been transmitted when this 135 status occurs, there is NOT A GUARANTEE that the server has not seen 136 anything. So in general it is unsafe to retry on this status code 137 if the call is non-idempotent. 138 139 See litmus test above for deciding between FAILED_PRECONDITION, 140 ABORTED, and UNAVAILABLE. */ 141 GRPC_STATUS_UNAVAILABLE = 14, 142 143 /** Unrecoverable data loss or corruption. */ 144 GRPC_STATUS_DATA_LOSS = 15, 145 146 /** Force users to include a default branch: */ 147 GRPC_STATUS__DO_NOT_USE = -1 148 } grpc_status_code; 149 150 #ifdef __cplusplus 151 } 152 #endif 153 154 #endif /* GRPC_IMPL_CODEGEN_STATUS_H */ 155