# Protocol Documentation ## Table of Contents - [status/types.proto](#status/types.proto) - Messages - [Status](#neo.fs.v2.status.Status) - [Status.Detail](#neo.fs.v2.status.Status.Detail) - [Scalar Value Types](#scalar-value-types)
## status/types.proto ### Message Status Declares the general format of the status returns of the FrostFS RPC protocol. Status is present in all response messages. Each RPC of FrostFS protocol describes the possible outcomes and details of the operation. Each status is assigned a one-to-one numeric code. Any unique result of an operation in FrostFS is unambiguously associated with the code value. Numerical set of codes is split into 1024-element sections. An enumeration is defined for each section. Values can be referred to in the following ways: * numerical value ranging from 0 to 4,294,967,295 (global code); * values from enumeration (local code). The formula for the ratio of the local code (`L`) of a defined section (`S`) to the global one (`G`): `G = 1024 * S + L`. All outcomes are divided into successful and failed, which corresponds to the success or failure of the operation. The definition of success follows the semantics of RPC and the description of its purpose. The server must not attach code that is the opposite of the outcome type. See the set of return codes in the description for calls. Each status can carry a developer-facing error message. It should be a human readable text in English. The server should not transmit (and the client should not expect) useful information in the message. Field `details` should make the return more detailed. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | code | [uint32](#uint32) | | The status code | | message | [string](#string) | | Developer-facing error message | | details | [Status.Detail](#neo.fs.v2.status.Status.Detail) | repeated | Data detailing the outcome of the operation. Must be unique by ID. | ### Message Status.Detail Return detail. It contains additional information that can be used to analyze the response. Each code defines a set of details that can be attached to a status. Client should not handle details that are not covered by the code. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | id | [uint32](#uint32) | | Detail ID. The identifier is required to determine the binary format of the detail and how to decode it. | | value | [bytes](#bytes) | | Binary status detail. Must follow the format associated with ID. The possibility of missing a value must be explicitly allowed. | ### APEManager Section of status for APE manager related operations. | Name | Number | Description | | ---- | ------ | ----------- | | APE_MANAGER_ACCESS_DENIED | 0 | [**5120**] The operation is denied by APE manager. | ### CommonFail Section of failed statuses independent of the operation. | Name | Number | Description | | ---- | ------ | ----------- | | INTERNAL | 0 | [**1024**] Internal server error, default failure. Not detailed. If the server cannot match failed outcome to the code, it should use this code. | | WRONG_MAGIC_NUMBER | 1 | [**1025**] Wrong magic of the FrostFS network. Details: - [**0**] Magic number of the served FrostFS network (big-endian 64-bit unsigned integer). | | SIGNATURE_VERIFICATION_FAIL | 2 | [**1026**] Signature verification failure. | | NODE_UNDER_MAINTENANCE | 3 | [**1027**] Node is under maintenance. | | INVALID_ARGUMENT | 4 | [**1028**] Invalid argument error. If the server fails on validation of a request parameter as the client sent it incorrectly, then this code should be used. | ### Container Section of statuses for container-related operations. | Name | Number | Description | | ---- | ------ | ----------- | | CONTAINER_NOT_FOUND | 0 | [**3072**] Container not found. | | EACL_NOT_FOUND | 1 | [**3073**] eACL table not found. | | CONTAINER_ACCESS_DENIED | 2 | [**3074**] Container access denied. | ### Object Section of statuses for object-related operations. | Name | Number | Description | | ---- | ------ | ----------- | | ACCESS_DENIED | 0 | [**2048**] Access denied by ACL. Details: - [**0**] Human-readable description (UTF-8 encoded string). | | OBJECT_NOT_FOUND | 1 | [**2049**] Object not found. | | LOCKED | 2 | [**2050**] Operation rejected by the object lock. | | LOCK_NON_REGULAR_OBJECT | 3 | [**2051**] Locking an object with a non-REGULAR type rejected. | | OBJECT_ALREADY_REMOVED | 4 | [**2052**] Object has been marked deleted. | | OUT_OF_RANGE | 5 | [**2053**] Invalid range has been requested for an object. | ### Section Section identifiers. | Name | Number | Description | | ---- | ------ | ----------- | | SECTION_SUCCESS | 0 | Successful return codes. | | SECTION_FAILURE_COMMON | 1 | Failure codes regardless of the operation. | | SECTION_OBJECT | 2 | Object service-specific errors. | | SECTION_CONTAINER | 3 | Container service-specific errors. | | SECTION_SESSION | 4 | Session service-specific errors. | | SECTION_APE_MANAGER | 5 | Session service-specific errors. | ### Session Section of statuses for session-related operations. | Name | Number | Description | | ---- | ------ | ----------- | | TOKEN_NOT_FOUND | 0 | [**4096**] Token not found. | | TOKEN_EXPIRED | 1 | [**4097**] Token has expired. | ### Success Section of FrostFS successful return codes. | Name | Number | Description | | ---- | ------ | ----------- | | OK | 0 | [**0**] Default success. Not detailed. If the server cannot match successful outcome to the code, it should use this code. | ## Scalar Value Types | .proto Type | Notes | C++ Type | Java Type | Python Type | | ----------- | ----- | -------- | --------- | ----------- | | double | | double | double | float | | float | | float | float | float | | int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | | int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | | uint32 | Uses variable-length encoding. | uint32 | int | int/long | | uint64 | Uses variable-length encoding. | uint64 | long | int/long | | sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | | sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | | fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | | fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | | sfixed32 | Always four bytes. | int32 | int | int | | sfixed64 | Always eight bytes. | int64 | long | int/long | | bool | | bool | boolean | boolean | | string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | | bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str |