mirror of https://github.com/grpc/grpc.git
commit
39f72a18fe
1150 changed files with 42279 additions and 17087 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,118 @@ |
|||||||
|
## **gRPC Compression** |
||||||
|
|
||||||
|
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", |
||||||
|
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be |
||||||
|
interpreted as described in [RFC 2119](http://www.ietf.org/rfc/rfc2119.txt). |
||||||
|
|
||||||
|
### Intent |
||||||
|
|
||||||
|
Compression is used to reduce the amount of bandwidth used between peers. The |
||||||
|
compression supported by gRPC acts _at the individual message level_, taking |
||||||
|
_message_ [as defined in the wire format |
||||||
|
document](PROTOCOL-HTTP2.md). |
||||||
|
|
||||||
|
The implementation supports different compression algorithms. A _default |
||||||
|
compression level_, to be used in the absence of message-specific settings, MAY |
||||||
|
be specified for during channel creation. |
||||||
|
|
||||||
|
The ability to control compression settings per call and to enable/disable |
||||||
|
compression on a per message basis MAY be used to prevent CRIME/BEAST attacks. |
||||||
|
It also allows for asymmetric compression communication, whereby a response MAY |
||||||
|
be compressed differently, if at all. |
||||||
|
|
||||||
|
### Specification |
||||||
|
|
||||||
|
Compression MAY be configured by the Client Application by calling the |
||||||
|
appropriate API method. There are two scenarios where compression MAY be |
||||||
|
configured: |
||||||
|
|
||||||
|
+ At channel creation time, which sets the channel default compression and |
||||||
|
therefore the compression that SHALL be used in the absence of per-RPC |
||||||
|
compression configuration. |
||||||
|
+ At response time, via: |
||||||
|
+ For unary RPCs, the {Client,Server}Context instance. |
||||||
|
+ For streaming RPCs, the {Client,Server}Writer instance. In this case, |
||||||
|
configuration is reduced to disabling compression altogether. |
||||||
|
|
||||||
|
### Compression Method Asymmetry Between Peers |
||||||
|
|
||||||
|
A gRPC peer MAY choose to respond using a different compression method to that |
||||||
|
of the request, including not performing any compression, regardless of channel |
||||||
|
and RPC settings (for example, if compression would result in small or negative |
||||||
|
gains). |
||||||
|
|
||||||
|
When a message from a client compressed with an unsupported algorithm is |
||||||
|
processed by a server, it WILL result in an `UNIMPLEMENTED` error status on the |
||||||
|
server. The server will then include in its response a `grpc-accept-encoding` |
||||||
|
header specifying the algorithms it does accept. If an `UNIMPLEMENTED` error |
||||||
|
status is returned from the server despite having used one of the algorithms |
||||||
|
from the `grpc-accept-encoding` header, the cause MUST NOT be related to |
||||||
|
compression. Data sent from a server compressed with an algorithm not supported |
||||||
|
by the client WILL result in an `INTERNAL` error status on the client side. |
||||||
|
|
||||||
|
Note that a peer MAY choose to not disclose all the encodings it supports. |
||||||
|
However, if it receives a message compressed in an undisclosed but supported |
||||||
|
encoding, it MUST include said encoding in the response's `grpc-accept-encoding |
||||||
|
h`eader. |
||||||
|
|
||||||
|
For every message a server is requested to compress using an algorithm it knows |
||||||
|
the client doesn't support (as indicated by the last `grpc-accept-encoding` |
||||||
|
header received from the client), it SHALL send the message uncompressed. |
||||||
|
|
||||||
|
### Specific Disabling of Compression |
||||||
|
|
||||||
|
If the user (through the previously described mechanisms) requests to disable |
||||||
|
compression the next message MUST be sent uncompressed. This is instrumental in |
||||||
|
preventing BEAST/CRIME attacks. This applies to both the the unary and streaming |
||||||
|
cases. |
||||||
|
|
||||||
|
### Compression Levels and Algorithms |
||||||
|
|
||||||
|
The set of supported algorithm is implementation dependent. In order to simplify |
||||||
|
the public API and to operate seamlessly across implementations (both in terms |
||||||
|
of languages but also different version of the same one), we introduce the idea |
||||||
|
of _compression levels_ (such as "low", "medium", "high"). |
||||||
|
|
||||||
|
Levels map to concrete algorithms and/or their settings (such as "low" mapping |
||||||
|
to "gzip -3" and "high" mapping to "gzip -9") automatically depending on what a |
||||||
|
peer is known to support. A server is always aware of what its clients support, |
||||||
|
as clients disclose it in their Message-Accept-Encoding header as part of their |
||||||
|
initial call. A client doesn't a priori (presently) know which algorithms a |
||||||
|
server supports. This issue can be addressed with an initial negotiation of |
||||||
|
capabilities or an automatic retry mechanism. These features will be implemented |
||||||
|
in the future. Currently however, compression levels are only supported at the |
||||||
|
server side, which is aware of the client's capabilities through the incoming |
||||||
|
Message-Accept-Encoding header. |
||||||
|
|
||||||
|
### Propagation to child RPCs |
||||||
|
|
||||||
|
The inheritance of the compression configuration by child RPCs is left up to the |
||||||
|
implementation. Note that in the absence of changes to the parent channel, its |
||||||
|
configuration will be used. |
||||||
|
|
||||||
|
### Test cases |
||||||
|
|
||||||
|
1. When a compression level is not specified for either the channel or the |
||||||
|
message, the default channel level _none_ is considered: data MUST NOT be |
||||||
|
compressed. |
||||||
|
1. When per-RPC compression configuration isn't present for a message, the |
||||||
|
channel compression configuration MUST be used. |
||||||
|
1. When a compression method (including no compression) is specified for an |
||||||
|
outgoing message, the message MUST be compressed accordingly. |
||||||
|
1. A message compressed by a client in a way not supported by its server MUST |
||||||
|
fail with status `UNIMPLEMENTED`, its associated description indicating the |
||||||
|
unsupported condition as well as the supported ones. The returned |
||||||
|
`grpc-accept-encoding` header MUST NOT contain the compression method |
||||||
|
(encoding) used. |
||||||
|
1. A message compressed by a server in a way not supported by its client MUST |
||||||
|
fail with status `INTERNAL`, its associated description indicating the |
||||||
|
unsupported condition as well as the supported ones. The returned |
||||||
|
`grpc-accept-encoding` header MUST NOT contain the compression method |
||||||
|
(encoding) used. |
||||||
|
1. An ill-constructed message with its [Compressed-Flag |
||||||
|
bit](PROTOCOL-HTTP2.md#compressed-flag) |
||||||
|
set but lacking a |
||||||
|
"[grpc-encoding](PROTOCOL-HTTP2.md#message-encoding)" |
||||||
|
entry different from _identity_ in its metadata MUST fail with `INTERNAL` |
||||||
|
status, its associated description indicating the invalid Compressed-Flag |
||||||
|
condition. |
@ -0,0 +1,91 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<Scheme |
||||||
|
LastUpgradeVersion = "0730" |
||||||
|
version = "1.3"> |
||||||
|
<BuildAction |
||||||
|
parallelizeBuildables = "YES" |
||||||
|
buildImplicitDependencies = "YES"> |
||||||
|
<BuildActionEntries> |
||||||
|
<BuildActionEntry |
||||||
|
buildForTesting = "YES" |
||||||
|
buildForRunning = "YES" |
||||||
|
buildForProfiling = "YES" |
||||||
|
buildForArchiving = "YES" |
||||||
|
buildForAnalyzing = "YES"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "63E1E97B1B28CB2000EF0978" |
||||||
|
BuildableName = "AuthSample.app" |
||||||
|
BlueprintName = "AuthSample" |
||||||
|
ReferencedContainer = "container:AuthSample.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildActionEntry> |
||||||
|
</BuildActionEntries> |
||||||
|
</BuildAction> |
||||||
|
<TestAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"> |
||||||
|
<Testables> |
||||||
|
</Testables> |
||||||
|
<MacroExpansion> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "63E1E97B1B28CB2000EF0978" |
||||||
|
BuildableName = "AuthSample.app" |
||||||
|
BlueprintName = "AuthSample" |
||||||
|
ReferencedContainer = "container:AuthSample.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</MacroExpansion> |
||||||
|
<AdditionalOptions> |
||||||
|
</AdditionalOptions> |
||||||
|
</TestAction> |
||||||
|
<LaunchAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
launchStyle = "0" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
ignoresPersistentStateOnLaunch = "NO" |
||||||
|
debugDocumentVersioning = "YES" |
||||||
|
debugServiceExtension = "internal" |
||||||
|
allowLocationSimulation = "YES"> |
||||||
|
<BuildableProductRunnable |
||||||
|
runnableDebuggingMode = "0"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "63E1E97B1B28CB2000EF0978" |
||||||
|
BuildableName = "AuthSample.app" |
||||||
|
BlueprintName = "AuthSample" |
||||||
|
ReferencedContainer = "container:AuthSample.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildableProductRunnable> |
||||||
|
<AdditionalOptions> |
||||||
|
</AdditionalOptions> |
||||||
|
</LaunchAction> |
||||||
|
<ProfileAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES" |
||||||
|
savedToolIdentifier = "" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
debugDocumentVersioning = "YES"> |
||||||
|
<BuildableProductRunnable |
||||||
|
runnableDebuggingMode = "0"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "63E1E97B1B28CB2000EF0978" |
||||||
|
BuildableName = "AuthSample.app" |
||||||
|
BlueprintName = "AuthSample" |
||||||
|
ReferencedContainer = "container:AuthSample.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildableProductRunnable> |
||||||
|
</ProfileAction> |
||||||
|
<AnalyzeAction |
||||||
|
buildConfiguration = "Debug"> |
||||||
|
</AnalyzeAction> |
||||||
|
<ArchiveAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
revealArchiveInOrganizer = "YES"> |
||||||
|
</ArchiveAction> |
||||||
|
</Scheme> |
@ -0,0 +1,91 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<Scheme |
||||||
|
LastUpgradeVersion = "0730" |
||||||
|
version = "1.3"> |
||||||
|
<BuildAction |
||||||
|
parallelizeBuildables = "YES" |
||||||
|
buildImplicitDependencies = "YES"> |
||||||
|
<BuildActionEntries> |
||||||
|
<BuildActionEntry |
||||||
|
buildForTesting = "YES" |
||||||
|
buildForRunning = "YES" |
||||||
|
buildForProfiling = "YES" |
||||||
|
buildForArchiving = "YES" |
||||||
|
buildForAnalyzing = "YES"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "5E36905F1B2A23800040F884" |
||||||
|
BuildableName = "HelloWorld.app" |
||||||
|
BlueprintName = "HelloWorld" |
||||||
|
ReferencedContainer = "container:HelloWorld.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildActionEntry> |
||||||
|
</BuildActionEntries> |
||||||
|
</BuildAction> |
||||||
|
<TestAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"> |
||||||
|
<Testables> |
||||||
|
</Testables> |
||||||
|
<MacroExpansion> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "5E36905F1B2A23800040F884" |
||||||
|
BuildableName = "HelloWorld.app" |
||||||
|
BlueprintName = "HelloWorld" |
||||||
|
ReferencedContainer = "container:HelloWorld.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</MacroExpansion> |
||||||
|
<AdditionalOptions> |
||||||
|
</AdditionalOptions> |
||||||
|
</TestAction> |
||||||
|
<LaunchAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
launchStyle = "0" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
ignoresPersistentStateOnLaunch = "NO" |
||||||
|
debugDocumentVersioning = "YES" |
||||||
|
debugServiceExtension = "internal" |
||||||
|
allowLocationSimulation = "YES"> |
||||||
|
<BuildableProductRunnable |
||||||
|
runnableDebuggingMode = "0"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "5E36905F1B2A23800040F884" |
||||||
|
BuildableName = "HelloWorld.app" |
||||||
|
BlueprintName = "HelloWorld" |
||||||
|
ReferencedContainer = "container:HelloWorld.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildableProductRunnable> |
||||||
|
<AdditionalOptions> |
||||||
|
</AdditionalOptions> |
||||||
|
</LaunchAction> |
||||||
|
<ProfileAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES" |
||||||
|
savedToolIdentifier = "" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
debugDocumentVersioning = "YES"> |
||||||
|
<BuildableProductRunnable |
||||||
|
runnableDebuggingMode = "0"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "5E36905F1B2A23800040F884" |
||||||
|
BuildableName = "HelloWorld.app" |
||||||
|
BlueprintName = "HelloWorld" |
||||||
|
ReferencedContainer = "container:HelloWorld.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildableProductRunnable> |
||||||
|
</ProfileAction> |
||||||
|
<AnalyzeAction |
||||||
|
buildConfiguration = "Debug"> |
||||||
|
</AnalyzeAction> |
||||||
|
<ArchiveAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
revealArchiveInOrganizer = "YES"> |
||||||
|
</ArchiveAction> |
||||||
|
</Scheme> |
@ -0,0 +1,91 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<Scheme |
||||||
|
LastUpgradeVersion = "0730" |
||||||
|
version = "1.3"> |
||||||
|
<BuildAction |
||||||
|
parallelizeBuildables = "YES" |
||||||
|
buildImplicitDependencies = "YES"> |
||||||
|
<BuildActionEntries> |
||||||
|
<BuildActionEntry |
||||||
|
buildForTesting = "YES" |
||||||
|
buildForRunning = "YES" |
||||||
|
buildForProfiling = "YES" |
||||||
|
buildForArchiving = "YES" |
||||||
|
buildForAnalyzing = "YES"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "6325277C1B1D0395003073D9" |
||||||
|
BuildableName = "RouteGuideClient.app" |
||||||
|
BlueprintName = "RouteGuideClient" |
||||||
|
ReferencedContainer = "container:RouteGuideClient.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildActionEntry> |
||||||
|
</BuildActionEntries> |
||||||
|
</BuildAction> |
||||||
|
<TestAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"> |
||||||
|
<Testables> |
||||||
|
</Testables> |
||||||
|
<MacroExpansion> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "6325277C1B1D0395003073D9" |
||||||
|
BuildableName = "RouteGuideClient.app" |
||||||
|
BlueprintName = "RouteGuideClient" |
||||||
|
ReferencedContainer = "container:RouteGuideClient.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</MacroExpansion> |
||||||
|
<AdditionalOptions> |
||||||
|
</AdditionalOptions> |
||||||
|
</TestAction> |
||||||
|
<LaunchAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
launchStyle = "0" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
ignoresPersistentStateOnLaunch = "NO" |
||||||
|
debugDocumentVersioning = "YES" |
||||||
|
debugServiceExtension = "internal" |
||||||
|
allowLocationSimulation = "YES"> |
||||||
|
<BuildableProductRunnable |
||||||
|
runnableDebuggingMode = "0"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "6325277C1B1D0395003073D9" |
||||||
|
BuildableName = "RouteGuideClient.app" |
||||||
|
BlueprintName = "RouteGuideClient" |
||||||
|
ReferencedContainer = "container:RouteGuideClient.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildableProductRunnable> |
||||||
|
<AdditionalOptions> |
||||||
|
</AdditionalOptions> |
||||||
|
</LaunchAction> |
||||||
|
<ProfileAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES" |
||||||
|
savedToolIdentifier = "" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
debugDocumentVersioning = "YES"> |
||||||
|
<BuildableProductRunnable |
||||||
|
runnableDebuggingMode = "0"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "6325277C1B1D0395003073D9" |
||||||
|
BuildableName = "RouteGuideClient.app" |
||||||
|
BlueprintName = "RouteGuideClient" |
||||||
|
ReferencedContainer = "container:RouteGuideClient.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildableProductRunnable> |
||||||
|
</ProfileAction> |
||||||
|
<AnalyzeAction |
||||||
|
buildConfiguration = "Debug"> |
||||||
|
</AnalyzeAction> |
||||||
|
<ArchiveAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
revealArchiveInOrganizer = "YES"> |
||||||
|
</ArchiveAction> |
||||||
|
</Scheme> |
@ -1,152 +0,0 @@ |
|||||||
/*
|
|
||||||
* |
|
||||||
* Copyright 2016, Google Inc. |
|
||||||
* All rights reserved. |
|
||||||
* |
|
||||||
* Redistribution and use in source and binary forms, with or without |
|
||||||
* modification, are permitted provided that the following conditions are |
|
||||||
* met: |
|
||||||
* |
|
||||||
* * Redistributions of source code must retain the above copyright |
|
||||||
* notice, this list of conditions and the following disclaimer. |
|
||||||
* * Redistributions in binary form must reproduce the above |
|
||||||
* copyright notice, this list of conditions and the following disclaimer |
|
||||||
* in the documentation and/or other materials provided with the |
|
||||||
* distribution. |
|
||||||
* * Neither the name of Google Inc. nor the names of its |
|
||||||
* contributors may be used to endorse or promote products derived from |
|
||||||
* this software without specific prior written permission. |
|
||||||
* |
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef GRPCXX_IMPL_CODEGEN_IMPL_STATUS_CODE_ENUM_H |
|
||||||
#define GRPCXX_IMPL_CODEGEN_IMPL_STATUS_CODE_ENUM_H |
|
||||||
|
|
||||||
namespace grpc { |
|
||||||
|
|
||||||
enum StatusCode { |
|
||||||
/// Not an error; returned on success.
|
|
||||||
OK = 0, |
|
||||||
|
|
||||||
/// The operation was cancelled (typically by the caller).
|
|
||||||
CANCELLED = 1, |
|
||||||
|
|
||||||
/// Unknown error. An example of where this error may be returned is if a
|
|
||||||
/// Status value received from another address space belongs to an error-space
|
|
||||||
/// that is not known in this address space. Also errors raised by APIs that
|
|
||||||
/// do not return enough error information may be converted to this error.
|
|
||||||
UNKNOWN = 2, |
|
||||||
|
|
||||||
/// Client specified an invalid argument. Note that this differs from
|
|
||||||
/// FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments that are
|
|
||||||
/// problematic regardless of the state of the system (e.g., a malformed file
|
|
||||||
/// name).
|
|
||||||
INVALID_ARGUMENT = 3, |
|
||||||
|
|
||||||
/// Deadline expired before operation could complete. For operations that
|
|
||||||
/// change the state of the system, this error may be returned even if the
|
|
||||||
/// operation has completed successfully. For example, a successful response
|
|
||||||
/// from a server could have been delayed long enough for the deadline to
|
|
||||||
/// expire.
|
|
||||||
DEADLINE_EXCEEDED = 4, |
|
||||||
|
|
||||||
/// Some requested entity (e.g., file or directory) was not found.
|
|
||||||
NOT_FOUND = 5, |
|
||||||
|
|
||||||
/// Some entity that we attempted to create (e.g., file or directory) already
|
|
||||||
/// exists.
|
|
||||||
ALREADY_EXISTS = 6, |
|
||||||
|
|
||||||
/// The caller does not have permission to execute the specified operation.
|
|
||||||
/// PERMISSION_DENIED must not be used for rejections caused by exhausting
|
|
||||||
/// some resource (use RESOURCE_EXHAUSTED instead for those errors).
|
|
||||||
/// PERMISSION_DENIED must not be used if the caller can not be identified
|
|
||||||
/// (use UNAUTHENTICATED instead for those errors).
|
|
||||||
PERMISSION_DENIED = 7, |
|
||||||
|
|
||||||
/// The request does not have valid authentication credentials for the
|
|
||||||
/// operation.
|
|
||||||
UNAUTHENTICATED = 16, |
|
||||||
|
|
||||||
/// Some resource has been exhausted, perhaps a per-user quota, or perhaps the
|
|
||||||
/// entire file system is out of space.
|
|
||||||
RESOURCE_EXHAUSTED = 8, |
|
||||||
|
|
||||||
/// Operation was rejected because the system is not in a state required for
|
|
||||||
/// the operation's execution. For example, directory to be deleted may be
|
|
||||||
/// non-empty, an rmdir operation is applied to a non-directory, etc.
|
|
||||||
///
|
|
||||||
/// A litmus test that may help a service implementor in deciding
|
|
||||||
/// between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE:
|
|
||||||
/// (a) Use UNAVAILABLE if the client can retry just the failing call.
|
|
||||||
/// (b) Use ABORTED if the client should retry at a higher-level
|
|
||||||
/// (e.g., restarting a read-modify-write sequence).
|
|
||||||
/// (c) Use FAILED_PRECONDITION if the client should not retry until
|
|
||||||
/// the system state has been explicitly fixed. E.g., if an "rmdir"
|
|
||||||
/// fails because the directory is non-empty, FAILED_PRECONDITION
|
|
||||||
/// should be returned since the client should not retry unless
|
|
||||||
/// they have first fixed up the directory by deleting files from it.
|
|
||||||
/// (d) Use FAILED_PRECONDITION if the client performs conditional
|
|
||||||
/// REST Get/Update/Delete on a resource and the resource on the
|
|
||||||
/// server does not match the condition. E.g., conflicting
|
|
||||||
/// read-modify-write on the same resource.
|
|
||||||
FAILED_PRECONDITION = 9, |
|
||||||
|
|
||||||
/// The operation was aborted, typically due to a concurrency issue like
|
|
||||||
/// sequencer check failures, transaction aborts, etc.
|
|
||||||
///
|
|
||||||
/// See litmus test above for deciding between FAILED_PRECONDITION, ABORTED,
|
|
||||||
/// and UNAVAILABLE.
|
|
||||||
ABORTED = 10, |
|
||||||
|
|
||||||
/// Operation was attempted past the valid range. E.g., seeking or reading
|
|
||||||
/// past end of file.
|
|
||||||
///
|
|
||||||
/// Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed
|
|
||||||
/// if the system state changes. For example, a 32-bit file system will
|
|
||||||
/// generate INVALID_ARGUMENT if asked to read at an offset that is not in the
|
|
||||||
/// range [0,2^32-1], but it will generate OUT_OF_RANGE if asked to read from
|
|
||||||
/// an offset past the current file size.
|
|
||||||
///
|
|
||||||
/// There is a fair bit of overlap between FAILED_PRECONDITION and
|
|
||||||
/// OUT_OF_RANGE. We recommend using OUT_OF_RANGE (the more specific error)
|
|
||||||
/// when it applies so that callers who are iterating through a space can
|
|
||||||
/// easily look for an OUT_OF_RANGE error to detect when they are done.
|
|
||||||
OUT_OF_RANGE = 11, |
|
||||||
|
|
||||||
/// Operation is not implemented or not supported/enabled in this service.
|
|
||||||
UNIMPLEMENTED = 12, |
|
||||||
|
|
||||||
/// Internal errors. Means some invariants expected by underlying System has
|
|
||||||
/// been broken. If you see one of these errors, Something is very broken.
|
|
||||||
INTERNAL = 13, |
|
||||||
|
|
||||||
/// The service is currently unavailable. This is a most likely a transient
|
|
||||||
/// condition and may be corrected by retrying with a backoff.
|
|
||||||
///
|
|
||||||
/// See litmus test above for deciding between FAILED_PRECONDITION, ABORTED,
|
|
||||||
/// and UNAVAILABLE.
|
|
||||||
UNAVAILABLE = 14, |
|
||||||
|
|
||||||
/// Unrecoverable data loss or corruption.
|
|
||||||
DATA_LOSS = 15, |
|
||||||
|
|
||||||
/// Force users to include a default branch:
|
|
||||||
DO_NOT_USE = -1 |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace grpc
|
|
||||||
|
|
||||||
#endif // GRPCXX_IMPL_CODEGEN_IMPL_STATUS_CODE_ENUM_H
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue