2020-01-30 11:41:24 +00:00
# Protocol Documentation
< a name = "top" > < / a >
## Table of Contents
- [object/service.proto ](#object/service.proto )
2024-04-03 08:21:40 +00:00
- Services
- [ObjectService ](#neo.fs.v2.object.ObjectService )
2024-09-02 12:03:58 +00:00
2020-01-30 11:41:24 +00:00
- Messages
2024-04-03 08:21:40 +00:00
- [DeleteRequest ](#neo.fs.v2.object.DeleteRequest )
- [DeleteRequest.Body ](#neo.fs.v2.object.DeleteRequest.Body )
- [DeleteResponse ](#neo.fs.v2.object.DeleteResponse )
- [DeleteResponse.Body ](#neo.fs.v2.object.DeleteResponse.Body )
- [GetRangeHashRequest ](#neo.fs.v2.object.GetRangeHashRequest )
- [GetRangeHashRequest.Body ](#neo.fs.v2.object.GetRangeHashRequest.Body )
- [GetRangeHashResponse ](#neo.fs.v2.object.GetRangeHashResponse )
- [GetRangeHashResponse.Body ](#neo.fs.v2.object.GetRangeHashResponse.Body )
- [GetRangeRequest ](#neo.fs.v2.object.GetRangeRequest )
- [GetRangeRequest.Body ](#neo.fs.v2.object.GetRangeRequest.Body )
- [GetRangeResponse ](#neo.fs.v2.object.GetRangeResponse )
- [GetRangeResponse.Body ](#neo.fs.v2.object.GetRangeResponse.Body )
- [GetRequest ](#neo.fs.v2.object.GetRequest )
- [GetRequest.Body ](#neo.fs.v2.object.GetRequest.Body )
- [GetResponse ](#neo.fs.v2.object.GetResponse )
- [GetResponse.Body ](#neo.fs.v2.object.GetResponse.Body )
- [GetResponse.Body.Init ](#neo.fs.v2.object.GetResponse.Body.Init )
- [HeadRequest ](#neo.fs.v2.object.HeadRequest )
- [HeadRequest.Body ](#neo.fs.v2.object.HeadRequest.Body )
- [HeadResponse ](#neo.fs.v2.object.HeadResponse )
- [HeadResponse.Body ](#neo.fs.v2.object.HeadResponse.Body )
- [HeaderWithSignature ](#neo.fs.v2.object.HeaderWithSignature )
2024-07-23 11:12:49 +00:00
- [PatchRequest ](#neo.fs.v2.object.PatchRequest )
- [PatchRequest.Body ](#neo.fs.v2.object.PatchRequest.Body )
- [PatchRequest.Body.Patch ](#neo.fs.v2.object.PatchRequest.Body.Patch )
- [PatchResponse ](#neo.fs.v2.object.PatchResponse )
- [PatchResponse.Body ](#neo.fs.v2.object.PatchResponse.Body )
2024-04-03 08:21:40 +00:00
- [PutRequest ](#neo.fs.v2.object.PutRequest )
- [PutRequest.Body ](#neo.fs.v2.object.PutRequest.Body )
- [PutRequest.Body.Init ](#neo.fs.v2.object.PutRequest.Body.Init )
- [PutResponse ](#neo.fs.v2.object.PutResponse )
- [PutResponse.Body ](#neo.fs.v2.object.PutResponse.Body )
- [PutSingleRequest ](#neo.fs.v2.object.PutSingleRequest )
- [PutSingleRequest.Body ](#neo.fs.v2.object.PutSingleRequest.Body )
- [PutSingleResponse ](#neo.fs.v2.object.PutSingleResponse )
- [PutSingleResponse.Body ](#neo.fs.v2.object.PutSingleResponse.Body )
- [Range ](#neo.fs.v2.object.Range )
- [SearchRequest ](#neo.fs.v2.object.SearchRequest )
- [SearchRequest.Body ](#neo.fs.v2.object.SearchRequest.Body )
- [SearchRequest.Body.Filter ](#neo.fs.v2.object.SearchRequest.Body.Filter )
- [SearchResponse ](#neo.fs.v2.object.SearchResponse )
- [SearchResponse.Body ](#neo.fs.v2.object.SearchResponse.Body )
2024-09-02 12:03:58 +00:00
2020-01-30 11:41:24 +00:00
- [object/types.proto ](#object/types.proto )
- Messages
2024-04-03 08:21:40 +00:00
- [ECInfo ](#neo.fs.v2.object.ECInfo )
- [ECInfo.Chunk ](#neo.fs.v2.object.ECInfo.Chunk )
- [Header ](#neo.fs.v2.object.Header )
- [Header.Attribute ](#neo.fs.v2.object.Header.Attribute )
- [Header.EC ](#neo.fs.v2.object.Header.EC )
- [Header.Split ](#neo.fs.v2.object.Header.Split )
- [Object ](#neo.fs.v2.object.Object )
- [ShortHeader ](#neo.fs.v2.object.ShortHeader )
- [SplitInfo ](#neo.fs.v2.object.SplitInfo )
2024-09-02 12:03:58 +00:00
2020-01-30 11:41:24 +00:00
- [Scalar Value Types ](#scalar-value-types )
< a name = "object/service.proto" > < / a >
< p align = "right" > < a href = "#top" > Top< / a > < / p >
## object/service.proto
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.ObjectService" > < / a >
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
### Service "neo.fs.v2.object.ObjectService"
2020-10-16 11:40:12 +00:00
`ObjectService` provides API for manipulating objects. Object operations do
2022-06-21 11:32:14 +00:00
not affect the sidechain and are only served by nodes in p2p style.
2020-01-30 11:41:24 +00:00
```
rpc Get(GetRequest) returns (stream GetResponse);
rpc Put(stream PutRequest) returns (PutResponse);
rpc Delete(DeleteRequest) returns (DeleteResponse);
rpc Head(HeadRequest) returns (HeadResponse);
2020-02-03 09:08:18 +00:00
rpc Search(SearchRequest) returns (stream SearchResponse);
2020-02-05 10:38:53 +00:00
rpc GetRange(GetRangeRequest) returns (stream GetRangeResponse);
2020-01-30 11:41:24 +00:00
rpc GetRangeHash(GetRangeHashRequest) returns (GetRangeHashResponse);
2024-03-05 09:36:58 +00:00
rpc PutSingle(PutSingleRequest) returns (PutSingleResponse);
2024-07-23 11:12:49 +00:00
rpc Patch(stream PatchRequest) returns (PatchResponse);
2020-01-30 11:41:24 +00:00
```
#### Method Get
2020-10-16 11:40:12 +00:00
Receive full object structure, including Headers and payload. Response uses
2024-03-05 09:36:58 +00:00
gRPC stream. First response message carries the object with the requested
address. Chunk messages are parts of the object's payload if it is needed.
All messages, except the first one, carry payload chunks. The requested
object can be restored by concatenation of object message payload and all
chunks keeping the receiving order.
2022-06-21 11:32:14 +00:00
Extended headers can change `Get` behaviour:
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
2022-06-21 11:32:14 +00:00
Will use the requsted version of Network Map for object placement
calculation.
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
(`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
2024-03-05 09:36:58 +00:00
Will try older versions (starting from `__SYSTEM__NETMAP_EPOCH`
(`__NEOFS__NETMAP_EPOCH` is deprecated) if specified or the latest one
otherwise) of Network Map to find an object until the depth limit is
reached.
2022-06-21 11:32:14 +00:00
Please refer to detailed `XHeader` description.
2020-01-30 11:41:24 +00:00
2021-11-12 16:10:39 +00:00
Statuses:
2022-02-21 16:00:08 +00:00
- **OK** (0, SECTION_SUCCESS): \
object has been successfully read;
- Common failures (SECTION_FAILURE_COMMON);
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
read access to the object is denied;
- **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
object not found in container;
- **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
2022-09-23 14:57:44 +00:00
the requested object has been marked as deleted;
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
object container not found;
2024-03-05 09:36:58 +00:00
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
2024-09-02 12:03:58 +00:00
access to container is denied;
2022-09-23 14:57:44 +00:00
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
2021-11-12 16:10:39 +00:00
2020-01-30 11:41:24 +00:00
| Name | Input | Output |
| ---- | ----- | ------ |
2020-08-13 16:18:53 +00:00
| Get | [GetRequest ](#neo.fs.v2.object.GetRequest ) | [GetResponse ](#neo.fs.v2.object.GetResponse ) |
2020-01-30 11:41:24 +00:00
#### Method Put
Put the object into container. Request uses gRPC stream. First message
2020-10-16 11:40:12 +00:00
SHOULD be of PutHeader type. `ContainerID` and `OwnerID` of an object
SHOULD be set. Session token SHOULD be obtained before `PUT` operation (see
session package). Chunk messages are considered by server as a part of an
object payload. All messages, except first one, SHOULD be payload chunks.
2022-06-21 11:32:14 +00:00
Chunk messages SHOULD be sent in the direct order of fragmentation.
Extended headers can change `Put` behaviour:
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_EPOCH \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
2022-06-21 11:32:14 +00:00
Will use the requsted version of Network Map for object placement
calculation.
Please refer to detailed `XHeader` description.
2020-01-30 11:41:24 +00:00
2021-11-12 16:10:39 +00:00
Statuses:
2022-02-21 16:00:08 +00:00
- **OK** (0, SECTION_SUCCESS): \
object has been successfully saved in the container;
- Common failures (SECTION_FAILURE_COMMON);
2022-09-23 14:57:44 +00:00
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
write access to the container is denied;
2022-02-21 16:00:08 +00:00
- **LOCKED** (2050, SECTION_OBJECT): \
2024-03-05 09:36:58 +00:00
placement of an object of type TOMBSTONE that includes at least one
locked object is prohibited;
2022-02-21 16:00:08 +00:00
- **LOCK_NON_REGULAR_OBJECT** (2051, SECTION_OBJECT): \
placement of an object of type LOCK that includes at least one object of
type other than REGULAR is prohibited;
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
object storage container not found;
2024-03-05 09:36:58 +00:00
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
access to container is denied;
2022-02-21 16:00:08 +00:00
- **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
2024-03-05 09:36:58 +00:00
(for trusted object preparation) session private key does not exist or
has
2022-02-21 16:00:08 +00:00
been deleted;
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
2021-11-12 16:10:39 +00:00
2020-01-30 11:41:24 +00:00
| Name | Input | Output |
| ---- | ----- | ------ |
2020-08-13 16:18:53 +00:00
| Put | [PutRequest ](#neo.fs.v2.object.PutRequest ) | [PutResponse ](#neo.fs.v2.object.PutResponse ) |
2020-01-30 11:41:24 +00:00
#### Method Delete
2020-10-16 11:40:12 +00:00
Delete the object from a container. There is no immediate removal
guarantee. Object will be marked for removal and deleted eventually.
2020-01-30 11:41:24 +00:00
2022-06-21 11:32:14 +00:00
Extended headers can change `Delete` behaviour:
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
2022-06-21 11:32:14 +00:00
calculation.
Please refer to detailed `XHeader` description.
2021-11-12 16:10:39 +00:00
Statuses:
2022-02-21 16:00:08 +00:00
- **OK** (0, SECTION_SUCCESS): \
object has been successfully marked to be removed from the container;
- Common failures (SECTION_FAILURE_COMMON);
2022-09-23 14:57:44 +00:00
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
delete access to the object is denied;
2024-03-05 09:36:58 +00:00
- **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
the object could not be deleted because it has not been \
found within the container;
2022-02-21 16:00:08 +00:00
- **LOCKED** (2050, SECTION_OBJECT): \
deleting a locked object is prohibited;
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
object container not found;
2024-03-05 09:36:58 +00:00
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
2024-09-02 12:03:58 +00:00
access to container is denied;
2022-02-21 16:00:08 +00:00
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
2021-11-12 16:10:39 +00:00
2020-01-30 11:41:24 +00:00
| Name | Input | Output |
| ---- | ----- | ------ |
2020-08-13 16:18:53 +00:00
| Delete | [DeleteRequest ](#neo.fs.v2.object.DeleteRequest ) | [DeleteResponse ](#neo.fs.v2.object.DeleteResponse ) |
2020-01-30 11:41:24 +00:00
#### Method Head
2020-10-16 11:40:12 +00:00
Returns the object Headers without data payload. By default full header is
returned. If `main_only` request field is set, the short header with only
2022-06-21 11:32:14 +00:00
the very minimal information will be returned instead.
Extended headers can change `Head` behaviour:
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
2022-06-21 11:32:14 +00:00
calculation.
Please refer to detailed `XHeader` description.
2020-01-30 11:41:24 +00:00
2021-11-12 16:10:39 +00:00
Statuses:
2022-02-21 16:00:08 +00:00
- **OK** (0, SECTION_SUCCESS): \
object header has been successfully read;
- Common failures (SECTION_FAILURE_COMMON);
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
access to operation HEAD of the object is denied;
- **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
object not found in container;
- **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
2022-09-23 14:57:44 +00:00
the requested object has been marked as deleted;
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
object container not found;
2024-03-05 09:36:58 +00:00
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
2024-09-02 12:03:58 +00:00
access to container is denied;
2022-09-23 14:57:44 +00:00
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
2021-11-12 16:10:39 +00:00
2020-01-30 11:41:24 +00:00
| Name | Input | Output |
| ---- | ----- | ------ |
2020-08-13 16:18:53 +00:00
| Head | [HeadRequest ](#neo.fs.v2.object.HeadRequest ) | [HeadResponse ](#neo.fs.v2.object.HeadResponse ) |
2020-01-30 11:41:24 +00:00
#### Method Search
2020-10-16 11:40:12 +00:00
Search objects in container. Search query allows to match by Object
2024-09-05 13:27:53 +00:00
Header's filed values. Please see the corresponding FrostFS Technical
2020-10-16 11:40:12 +00:00
Specification section for more details.
2020-01-30 11:41:24 +00:00
2022-06-21 11:32:14 +00:00
Extended headers can change `Search` behaviour:
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
2022-06-21 11:32:14 +00:00
calculation.
Please refer to detailed `XHeader` description.
2021-11-12 16:10:39 +00:00
Statuses:
2022-02-21 16:00:08 +00:00
- **OK** (0, SECTION_SUCCESS): \
objects have been successfully selected;
- Common failures (SECTION_FAILURE_COMMON);
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
access to operation SEARCH of the object is denied;
2022-09-23 14:57:44 +00:00
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
search container not found;
2024-03-05 09:36:58 +00:00
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
2024-09-02 12:03:58 +00:00
access to container is denied;
2022-02-21 16:00:08 +00:00
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
2021-11-12 16:10:39 +00:00
2020-01-30 11:41:24 +00:00
| Name | Input | Output |
| ---- | ----- | ------ |
2020-08-13 16:18:53 +00:00
| Search | [SearchRequest ](#neo.fs.v2.object.SearchRequest ) | [SearchResponse ](#neo.fs.v2.object.SearchResponse ) |
2020-01-30 11:41:24 +00:00
#### Method GetRange
2020-10-16 11:40:12 +00:00
Get byte range of data payload. Range is set as an (offset, length) tuple.
Like in `Get` method, the response uses gRPC stream. Requested range can be
2024-03-05 09:36:58 +00:00
restored by concatenation of all received payload chunks keeping the
receiving order.
2020-01-30 11:41:24 +00:00
2022-06-21 11:32:14 +00:00
Extended headers can change `GetRange` behaviour:
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
2022-06-21 11:32:14 +00:00
calculation.
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
(`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
2022-06-21 11:32:14 +00:00
Will try older versions of Network Map to find an object until the depth
limit is reached.
Please refer to detailed `XHeader` description.
2021-11-12 16:10:39 +00:00
Statuses:
2022-02-21 16:00:08 +00:00
- **OK** (0, SECTION_SUCCESS): \
data range of the object payload has been successfully read;
- Common failures (SECTION_FAILURE_COMMON);
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
access to operation RANGE of the object is denied;
- **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
object not found in container;
- **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
the requested object has been marked as deleted.
2022-06-21 11:32:14 +00:00
- **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
2022-09-23 14:57:44 +00:00
the requested range is out of bounds;
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
object container not found;
2024-03-05 09:36:58 +00:00
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
2024-09-02 12:03:58 +00:00
access to container is denied;
2022-09-23 14:57:44 +00:00
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
2021-11-12 16:10:39 +00:00
2020-01-30 11:41:24 +00:00
| Name | Input | Output |
| ---- | ----- | ------ |
2020-08-13 16:18:53 +00:00
| GetRange | [GetRangeRequest ](#neo.fs.v2.object.GetRangeRequest ) | [GetRangeResponse ](#neo.fs.v2.object.GetRangeResponse ) |
2020-01-30 11:41:24 +00:00
#### Method GetRangeHash
2020-10-16 11:40:12 +00:00
Returns homomorphic or regular hash of object's payload range after
applying XOR operation with the provided `salt` . Ranges are set of (offset,
2022-06-21 11:32:14 +00:00
length) tuples. Hashes order in response corresponds to the ranges order in
the request. Note that hash is calculated for XORed data.
Extended headers can change `GetRangeHash` behaviour:
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
2022-06-21 11:32:14 +00:00
calculation.
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
(`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
2022-06-21 11:32:14 +00:00
Will try older versions of Network Map to find an object until the depth
limit is reached.
Please refer to detailed `XHeader` description.
2020-01-30 11:41:24 +00:00
2021-11-12 16:10:39 +00:00
Statuses:
2022-02-21 16:00:08 +00:00
- **OK** (0, SECTION_SUCCESS): \
data range of the object payload has been successfully hashed;
- Common failures (SECTION_FAILURE_COMMON);
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
access to operation RANGEHASH of the object is denied;
- **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
object not found in container;
2022-06-21 11:32:14 +00:00
- **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
2022-09-23 14:57:44 +00:00
the requested range is out of bounds;
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
object container not found;
2024-03-05 09:36:58 +00:00
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
2024-09-02 12:03:58 +00:00
access to container is denied;
2022-02-21 16:00:08 +00:00
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
2021-11-12 16:10:39 +00:00
2020-01-30 11:41:24 +00:00
| Name | Input | Output |
| ---- | ----- | ------ |
2020-08-13 16:18:53 +00:00
| GetRangeHash | [GetRangeHashRequest ](#neo.fs.v2.object.GetRangeHashRequest ) | [GetRangeHashResponse ](#neo.fs.v2.object.GetRangeHashResponse ) |
2024-03-05 09:36:58 +00:00
#### Method PutSingle
Put the prepared object into container.
`ContainerID` , `ObjectID` , `OwnerID` , `PayloadHash` and `PayloadLength` of
an object MUST be set.
Extended headers can change `Put` behaviour:
* [ __SYSTEM__NETMAP_EPOCH \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
calculation.
Please refer to detailed `XHeader` description.
Statuses:
- **OK** (0, SECTION_SUCCESS): \
object has been successfully saved in the container;
- Common failures (SECTION_FAILURE_COMMON);
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
write access to the container is denied;
- **LOCKED** (2050, SECTION_OBJECT): \
placement of an object of type TOMBSTONE that includes at least one
locked object is prohibited;
- **LOCK_NON_REGULAR_OBJECT** (2051, SECTION_OBJECT): \
placement of an object of type LOCK that includes at least one object of
type other than REGULAR is prohibited;
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
object storage container not found;
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
2024-09-02 12:03:58 +00:00
access to container is denied;
2024-03-05 09:36:58 +00:00
- **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
(for trusted object preparation) session private key does not exist or
has
been deleted;
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
| Name | Input | Output |
| ---- | ----- | ------ |
| PutSingle | [PutSingleRequest ](#neo.fs.v2.object.PutSingleRequest ) | [PutSingleResponse ](#neo.fs.v2.object.PutSingleResponse ) |
2024-07-23 11:12:49 +00:00
#### Method Patch
Patch the object. Request uses gRPC stream. First message must set
2024-09-05 13:27:53 +00:00
the address of the object that is going to get patched. If the object's
attributes are patched, then these attrubutes must be set only within the
first stream message.
If the patch request is performed by NOT the object's owner but if the
actor has the permission to perform the patch, then `OwnerID` of the object
is changed. In this case the object's owner loses the object's ownership
after the patch request is successfully done.
As objects are content-addressable the patching causes new object ID
generation for the patched object. This object id is set witihn
`PatchResponse` . But the object id may remain unchanged in such cases:
1. The chunk of the applying patch contains the same value as the object's
payload within the same range;
2024-07-23 11:12:49 +00:00
2. The patch that reverts the changes applied by preceding patch;
3. The application of the same patches for the object a few times.
Extended headers can change `Patch` behaviour:
* [ __SYSTEM__NETMAP_EPOCH \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requsted version of Network Map for object placement
calculation.
Please refer to detailed `XHeader` description.
Statuses:
- **OK** (0, SECTION_SUCCESS): \
object has been successfully patched and saved in the container;
- Common failures (SECTION_FAILURE_COMMON);
- **ACCESS_DENIED** (2048, SECTION_OBJECT): \
write access to the container is denied;
- **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
object not found in container;
- **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
the requested object has been marked as deleted.
- **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
the requested range is out of bounds;
- **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
object storage container not found;
- **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
access to container is denied;
- **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
(for trusted object preparation) session private key does not exist or
has been deleted;
- **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
provided session token has expired.
| Name | Input | Output |
| ---- | ----- | ------ |
| Patch | [PatchRequest ](#neo.fs.v2.object.PatchRequest ) | [PatchResponse ](#neo.fs.v2.object.PatchResponse ) |
2020-01-30 11:41:24 +00:00
<!-- end services -->
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.DeleteRequest" > < / a >
2020-01-30 11:41:24 +00:00
### Message DeleteRequest
2020-10-16 11:40:12 +00:00
Object DELETE request
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [DeleteRequest.Body ](#neo.fs.v2.object.DeleteRequest.Body ) | | Body of delete object request message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.DeleteRequest.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message DeleteRequest.Body
2020-10-16 11:40:12 +00:00
Object DELETE request body
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| address | [neo.fs.v2.refs.Address ](#neo.fs.v2.refs.Address ) | | Address of the object to be deleted |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.DeleteResponse" > < / a >
2020-01-30 11:41:24 +00:00
### Message DeleteResponse
2020-10-16 11:40:12 +00:00
DeleteResponse body is empty because we cannot guarantee permanent object
removal in distributed system.
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [DeleteResponse.Body ](#neo.fs.v2.object.DeleteResponse.Body ) | | Body of delete object response message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.DeleteResponse.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message DeleteResponse.Body
2020-10-16 11:40:12 +00:00
Object DELETE Response has an empty body.
2020-08-11 15:49:56 +00:00
2020-12-11 07:20:21 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| tombstone | [neo.fs.v2.refs.Address ](#neo.fs.v2.refs.Address ) | | Address of the tombstone created for the deleted object |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRangeHashRequest" > < / a >
2020-01-30 11:41:24 +00:00
### Message GetRangeHashRequest
2020-08-13 16:18:53 +00:00
Get hash of object's payload part
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [GetRangeHashRequest.Body ](#neo.fs.v2.object.GetRangeHashRequest.Body ) | | Body of get range hash object request message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRangeHashRequest.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message GetRangeHashRequest.Body
2020-10-16 11:40:12 +00:00
Get hash of object's payload part request body.
2020-08-11 15:49:56 +00:00
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| address | [neo.fs.v2.refs.Address ](#neo.fs.v2.refs.Address ) | | Address of the object that containing the requested payload range |
| ranges | [Range ](#neo.fs.v2.object.Range ) | repeated | List of object's payload ranges to calculate homomorphic hash |
| salt | [bytes ](#bytes ) | | Binary salt to XOR object's payload ranges before hash calculation |
2020-08-18 15:41:25 +00:00
| type | [neo.fs.v2.refs.ChecksumType ](#neo.fs.v2.refs.ChecksumType ) | | Checksum algorithm type |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRangeHashResponse" > < / a >
2020-01-30 11:41:24 +00:00
### Message GetRangeHashResponse
2020-08-13 16:18:53 +00:00
Get hash of object's payload part
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [GetRangeHashResponse.Body ](#neo.fs.v2.object.GetRangeHashResponse.Body ) | | Body of get range hash object response message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRangeHashResponse.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message GetRangeHashResponse.Body
2020-10-16 11:40:12 +00:00
Get hash of object's payload part response body.
2020-08-11 15:49:56 +00:00
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-18 15:41:25 +00:00
| type | [neo.fs.v2.refs.ChecksumType ](#neo.fs.v2.refs.ChecksumType ) | | Checksum algorithm type |
2020-10-16 11:40:12 +00:00
| hash_list | [bytes ](#bytes ) | repeated | List of range hashes in a binary format |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRangeRequest" > < / a >
2020-01-30 11:41:24 +00:00
### Message GetRangeRequest
2020-10-16 11:40:12 +00:00
Request part of object's payload
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [GetRangeRequest.Body ](#neo.fs.v2.object.GetRangeRequest.Body ) | | Body of get range object request message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRangeRequest.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message GetRangeRequest.Body
2020-10-16 11:40:12 +00:00
Byte range of object's payload request body
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| address | [neo.fs.v2.refs.Address ](#neo.fs.v2.refs.Address ) | | Address of the object containing the requested payload range |
| range | [Range ](#neo.fs.v2.object.Range ) | | Requested payload range |
2020-12-11 07:20:21 +00:00
| raw | [bool ](#bool ) | | If `raw` flag is set, request will work only with objects that are physically stored on the peer node. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRangeResponse" > < / a >
2020-01-30 11:41:24 +00:00
### Message GetRangeResponse
2020-08-13 16:18:53 +00:00
Get part of object's payload
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [GetRangeResponse.Body ](#neo.fs.v2.object.GetRangeResponse.Body ) | | Body of get range object response message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRangeResponse.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message GetRangeResponse.Body
2020-10-16 11:40:12 +00:00
Get Range response body uses streams to transfer the response. Because
object payload considered a byte sequence, there is no need to have some
initial preamble message. The requested byte range is sent as a series
chunks.
2020-08-11 15:49:56 +00:00
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-12-11 07:20:21 +00:00
| chunk | [bytes ](#bytes ) | | Chunked object payload's range. |
| split_info | [SplitInfo ](#neo.fs.v2.object.SplitInfo ) | | Meta information of split hierarchy. |
2024-03-05 09:36:58 +00:00
| ec_info | [ECInfo ](#neo.fs.v2.object.ECInfo ) | | Meta information for EC object assembly. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRequest" > < / a >
2020-01-30 11:41:24 +00:00
### Message GetRequest
2020-10-16 11:40:12 +00:00
GET object request
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [GetRequest.Body ](#neo.fs.v2.object.GetRequest.Body ) | | Body of get object request message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetRequest.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message GetRequest.Body
2020-10-16 11:40:12 +00:00
GET Object request body
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| address | [neo.fs.v2.refs.Address ](#neo.fs.v2.refs.Address ) | | Address of the requested object |
| raw | [bool ](#bool ) | | If `raw` flag is set, request will work only with objects that are physically stored on the peer node |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetResponse" > < / a >
2020-01-30 11:41:24 +00:00
### Message GetResponse
2020-10-16 11:40:12 +00:00
GET object response
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [GetResponse.Body ](#neo.fs.v2.object.GetResponse.Body ) | | Body of get object response message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetResponse.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message GetResponse.Body
2020-10-16 11:40:12 +00:00
GET Object Response body
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| init | [GetResponse.Body.Init ](#neo.fs.v2.object.GetResponse.Body.Init ) | | Initial part of the object stream |
| chunk | [bytes ](#bytes ) | | Chunked object payload |
2020-12-11 07:20:21 +00:00
| split_info | [SplitInfo ](#neo.fs.v2.object.SplitInfo ) | | Meta information of split hierarchy for object assembly. |
2024-03-05 09:36:58 +00:00
| ec_info | [ECInfo ](#neo.fs.v2.object.ECInfo ) | | Meta information for EC object assembly. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.GetResponse.Body.Init" > < / a >
2020-08-11 15:49:56 +00:00
### Message GetResponse.Body.Init
2020-10-16 11:40:12 +00:00
Initial part of the `Object` structure stream. Technically it's a
set of all `Object` structure's fields except `payload` .
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| object_id | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | Object's unique identifier. |
| signature | [neo.fs.v2.refs.Signature ](#neo.fs.v2.refs.Signature ) | | Signed `ObjectID` |
| header | [Header ](#neo.fs.v2.object.Header ) | | Object metadata headers |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.HeadRequest" > < / a >
2020-01-30 11:41:24 +00:00
### Message HeadRequest
2020-10-16 11:40:12 +00:00
Object HEAD request
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [HeadRequest.Body ](#neo.fs.v2.object.HeadRequest.Body ) | | Body of head object request message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.HeadRequest.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message HeadRequest.Body
2020-10-16 11:40:12 +00:00
Object HEAD request body
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| address | [neo.fs.v2.refs.Address ](#neo.fs.v2.refs.Address ) | | Address of the object with the requested Header |
2020-08-11 15:49:56 +00:00
| main_only | [bool ](#bool ) | | Return only minimal header subset |
2020-10-16 11:40:12 +00:00
| raw | [bool ](#bool ) | | If `raw` flag is set, request will work only with objects that are physically stored on the peer node |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.HeadResponse" > < / a >
2020-01-30 11:41:24 +00:00
### Message HeadResponse
2020-10-16 11:40:12 +00:00
Object HEAD response
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [HeadResponse.Body ](#neo.fs.v2.object.HeadResponse.Body ) | | Body of head object response message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.HeadResponse.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message HeadResponse.Body
2020-10-16 11:40:12 +00:00
Object HEAD response body
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| header | [HeaderWithSignature ](#neo.fs.v2.object.HeaderWithSignature ) | | Full object's `Header` with `ObjectID` signature |
2020-08-14 19:04:56 +00:00
| short_header | [ShortHeader ](#neo.fs.v2.object.ShortHeader ) | | Short object header |
2020-12-11 07:20:21 +00:00
| split_info | [SplitInfo ](#neo.fs.v2.object.SplitInfo ) | | Meta information of split hierarchy. |
2024-03-05 09:36:58 +00:00
| ec_info | [ECInfo ](#neo.fs.v2.object.ECInfo ) | | Meta information for EC object assembly. |
2020-09-04 12:50:18 +00:00
< a name = "neo.fs.v2.object.HeaderWithSignature" > < / a >
### Message HeaderWithSignature
2022-06-21 11:32:14 +00:00
Tuple of a full object header and signature of an `ObjectID` . \
2020-10-16 11:40:12 +00:00
Signed `ObjectID` is present to verify full header's authenticity through the
following steps:
2022-06-21 11:32:14 +00:00
1. Calculate `SHA-256` of the marshalled `Header` structure
2. Check if the resulting hash matches `ObjectID`
2020-10-16 11:40:12 +00:00
3. Check if `ObjectID` signature in `signature` field is correct
2020-09-04 12:50:18 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| header | [Header ](#neo.fs.v2.object.Header ) | | Full object header |
2020-10-16 11:40:12 +00:00
| signature | [neo.fs.v2.refs.Signature ](#neo.fs.v2.refs.Signature ) | | Signed `ObjectID` to verify full header's authenticity |
2020-01-30 11:41:24 +00:00
2024-07-23 11:12:49 +00:00
< a name = "neo.fs.v2.object.PatchRequest" > < / a >
### Message PatchRequest
Object PATCH request
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| body | [PatchRequest.Body ](#neo.fs.v2.object.PatchRequest.Body ) | | Body for patch request message. |
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
< a name = "neo.fs.v2.object.PatchRequest.Body" > < / a >
### Message PatchRequest.Body
PATCH request body
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| address | [neo.fs.v2.refs.Address ](#neo.fs.v2.refs.Address ) | | The address of the object that is requested to get patched. |
| new_attributes | [Header.Attribute ](#neo.fs.v2.object.Header.Attribute ) | repeated | New attributes for the object. See `replace_attributes` flag usage to define how new attributes should be set. |
| replace_attributes | [bool ](#bool ) | | If this flag is set, then the object's attributes will be entirely replaced by `new_attributes` list. The empty `new_attributes` list with `replace_attributes = true` just resets attributes list for the object.
Default `false` value for this flag means the attributes will be just merged. If the incoming `new_attributes` list contains already existing key, then it just replaces it while merging the lists. |
| patch | [PatchRequest.Body.Patch ](#neo.fs.v2.object.PatchRequest.Body.Patch ) | | The patch that is applied for the object. |
< a name = "neo.fs.v2.object.PatchRequest.Body.Patch" > < / a >
### Message PatchRequest.Body.Patch
The patch for the object's payload.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| source_range | [Range ](#neo.fs.v2.object.Range ) | | The range of the source object for which the payload is replaced by the patch's chunk. If the range's `length = 0` , then the patch's chunk is just appended to the original payload starting from the `offest` without any replace. |
| chunk | [bytes ](#bytes ) | | The chunk that is being appended to or that replaces the original payload on the given range. |
< a name = "neo.fs.v2.object.PatchResponse" > < / a >
### Message PatchResponse
Object PATCH response
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| body | [PatchResponse.Body ](#neo.fs.v2.object.PatchResponse.Body ) | | Body for patch response message. |
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
< a name = "neo.fs.v2.object.PatchResponse.Body" > < / a >
### Message PatchResponse.Body
PATCH response body
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| object_id | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | The object ID of the saved patched object. |
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.PutRequest" > < / a >
2020-01-30 11:41:24 +00:00
### Message PutRequest
2020-10-16 11:40:12 +00:00
PUT object request
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [PutRequest.Body ](#neo.fs.v2.object.PutRequest.Body ) | | Body of put object request message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.PutRequest.Body" > < / a >
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
### Message PutRequest.Body
2020-10-16 11:40:12 +00:00
PUT request body
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| init | [PutRequest.Body.Init ](#neo.fs.v2.object.PutRequest.Body.Init ) | | Initial part of the object stream |
| chunk | [bytes ](#bytes ) | | Chunked object payload |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.PutRequest.Body.Init" > < / a >
2020-08-11 15:49:56 +00:00
### Message PutRequest.Body.Init
2020-10-16 11:40:12 +00:00
Newly created object structure parameters. If some optional parameters
are not set, they will be calculated by a peer node.
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| object_id | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | ObjectID if available. |
| signature | [neo.fs.v2.refs.Signature ](#neo.fs.v2.refs.Signature ) | | Object signature if available |
| header | [Header ](#neo.fs.v2.object.Header ) | | Object's Header |
2023-04-05 21:44:42 +00:00
| copies_number | [uint32 ](#uint32 ) | repeated | Number of copies of the object to store within the RPC call. By default, object is processed according to the container's placement policy. Can be one of: 1. A single number; applied to the whole request and is treated as a minimal number of nodes that must store an object to complete the request successfully. 2. An ordered array; every number is treated as a minimal number of nodes in a corresponding placement vector that must store an object to complete the request successfully. The length MUST equal the placement vectors number, otherwise request is considered malformed. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.PutResponse" > < / a >
2020-01-30 11:41:24 +00:00
### Message PutResponse
2020-10-16 11:40:12 +00:00
PUT Object response
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [PutResponse.Body ](#neo.fs.v2.object.PutResponse.Body ) | | Body of put object response message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.PutResponse.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message PutResponse.Body
2020-10-16 11:40:12 +00:00
PUT Object response body
2020-08-11 15:49:56 +00:00
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| object_id | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | Identifier of the saved object |
2020-01-30 11:41:24 +00:00
2024-03-05 09:36:58 +00:00
< a name = "neo.fs.v2.object.PutSingleRequest" > < / a >
### Message PutSingleRequest
Object PUT Single request
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| body | [PutSingleRequest.Body ](#neo.fs.v2.object.PutSingleRequest.Body ) | | Body of put single object request message. |
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
< a name = "neo.fs.v2.object.PutSingleRequest.Body" > < / a >
### Message PutSingleRequest.Body
PUT Single request body
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| object | [Object ](#neo.fs.v2.object.Object ) | | Prepared object with payload. |
| copies_number | [uint32 ](#uint32 ) | repeated | Number of copies of the object to store within the RPC call. By default, object is processed according to the container's placement policy. Every number is treated as a minimal number of nodes in a corresponding placement vector that must store an object to complete the request successfully. The length MUST equal the placement vectors number, otherwise request is considered malformed. |
< a name = "neo.fs.v2.object.PutSingleResponse" > < / a >
### Message PutSingleResponse
Object PUT Single response
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| body | [PutSingleResponse.Body ](#neo.fs.v2.object.PutSingleResponse.Body ) | | Body of put single object response message. |
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
< a name = "neo.fs.v2.object.PutSingleResponse.Body" > < / a >
### Message PutSingleResponse.Body
PUT Single Object response body
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.Range" > < / a >
2020-08-04 08:43:34 +00:00
### Message Range
2020-10-16 11:40:12 +00:00
Object payload range.Ranges of zero length SHOULD be considered as invalid.
2020-08-04 08:43:34 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| offset | [uint64 ](#uint64 ) | | Offset of the range from the object payload start |
| length | [uint64 ](#uint64 ) | | Length in bytes of the object payload range |
2020-08-04 08:43:34 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.SearchRequest" > < / a >
2020-01-30 11:41:24 +00:00
### Message SearchRequest
2020-10-16 11:40:12 +00:00
Object Search request
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [SearchRequest.Body ](#neo.fs.v2.object.SearchRequest.Body ) | | Body of search object request message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.RequestMetaHeader ](#neo.fs.v2.session.RequestMetaHeader ) | | Carries request meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.RequestVerificationHeader ](#neo.fs.v2.session.RequestVerificationHeader ) | | Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.SearchRequest.Body" > < / a >
2020-08-05 18:21:26 +00:00
2020-08-11 15:49:56 +00:00
### Message SearchRequest.Body
2020-10-16 11:40:12 +00:00
Object Search request body
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| container_id | [neo.fs.v2.refs.ContainerID ](#neo.fs.v2.refs.ContainerID ) | | Container identifier were to search |
2020-08-13 16:18:53 +00:00
| version | [uint32 ](#uint32 ) | | Version of the Query Language used |
| filters | [SearchRequest.Body.Filter ](#neo.fs.v2.object.SearchRequest.Body.Filter ) | repeated | List of search expressions |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.SearchRequest.Body.Filter" > < / a >
2020-08-05 18:21:26 +00:00
2020-08-13 16:18:53 +00:00
### Message SearchRequest.Body.Filter
2024-03-05 09:36:58 +00:00
Filter structure checks if the object header field or the attribute
content matches a value.
2020-10-23 12:40:32 +00:00
2022-06-21 11:32:14 +00:00
If no filters are set, search request will return all objects of the
2024-03-05 09:36:58 +00:00
container, including Regular object and Tombstone
2021-02-26 07:53:47 +00:00
objects. Most human users expect to get only object they can directly
2022-06-21 11:32:14 +00:00
work with. In that case, `$Object:ROOT` filter should be used.
2021-02-26 07:53:47 +00:00
2020-10-23 12:40:32 +00:00
By default `key` field refers to the corresponding object's `Attribute` .
Some Object's header fields can also be accessed by adding `$Object:`
prefix to the name. Here is the list of fields available via this prefix:
* $Object:version \
version
2020-12-11 07:20:21 +00:00
* $Object:objectID \
object_id
2020-10-23 12:40:32 +00:00
* $Object:containerID \
container_id
* $Object:ownerID \
owner_id
* $Object:creationEpoch \
creation_epoch
* $Object:payloadLength \
payload_length
* $Object:payloadHash \
payload_hash
* $Object:objectType \
object_type
* $Object:homomorphicHash \
homomorphic_hash
2020-10-23 14:50:04 +00:00
* $Object:split.parent \
object_id of parent
2020-12-11 07:20:21 +00:00
* $Object:split.splitID \
16 byte UUIDv4 used to identify the split object hierarchy parts
2024-05-03 09:08:33 +00:00
* $Object:ec.parent \
2024-09-05 13:27:53 +00:00
If the object is stored according to EC policy, then ec_parent
attribute is set to return an id list of all related EC chunks.
2020-10-23 12:40:32 +00:00
There are some well-known filter aliases to match objects by certain
properties:
* $Object:ROOT \
2024-03-05 09:36:58 +00:00
Returns only `REGULAR` type objects that are not split or that are the
top level root objects in a split hierarchy. This includes objects not
2020-12-11 07:20:21 +00:00
present physically, like large objects split into smaller objects
2022-06-21 11:32:14 +00:00
without a separate top-level root object. Objects of other types like
2024-03-05 09:36:58 +00:00
Locks and Tombstones will not be shown. This filter may be
2020-12-11 07:20:21 +00:00
useful for listing objects like `ls` command of some virtual file
system. This filter is activated if the `key` exists, disregarding the
value and matcher type.
* $Object:PHY \
Returns only objects physically stored in the system. This filter is
activated if the `key` exists, disregarding the value and matcher type.
2020-08-05 18:21:26 +00:00
2021-02-11 13:13:07 +00:00
Note: using filters with a key with prefix `$Object:` and match type
2024-03-05 09:36:58 +00:00
`NOT_PRESENT ` is not recommended since this is not a cross-version
approach. Behavior when processing this kind of filters is undefined.
2021-02-11 13:13:07 +00:00
2020-08-05 18:21:26 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-14 19:04:56 +00:00
| match_type | [MatchType ](#neo.fs.v2.object.MatchType ) | | Match type to use |
2020-10-23 12:40:32 +00:00
| key | [string ](#string ) | | Attribute or Header fields to match |
| value | [string ](#string ) | | Value to match |
2020-08-05 18:21:26 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.SearchResponse" > < / a >
2020-01-30 11:41:24 +00:00
### Message SearchResponse
2020-08-13 16:18:53 +00:00
Search response
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-13 16:18:53 +00:00
| body | [SearchResponse.Body ](#neo.fs.v2.object.SearchResponse.Body ) | | Body of search object response message. |
2020-08-19 14:00:23 +00:00
| meta_header | [neo.fs.v2.session.ResponseMetaHeader ](#neo.fs.v2.session.ResponseMetaHeader ) | | Carries response meta information. Header data is used only to regulate message transport and does not affect request execution. |
| verify_header | [neo.fs.v2.session.ResponseVerificationHeader ](#neo.fs.v2.session.ResponseVerificationHeader ) | | Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission. |
2020-08-11 15:49:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.SearchResponse.Body" > < / a >
2020-08-11 15:49:56 +00:00
### Message SearchResponse.Body
2020-10-16 11:40:12 +00:00
Object Search response body
2020-08-11 15:49:56 +00:00
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| id_list | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | repeated | List of `ObjectID` s that match the search query |
2020-01-30 11:41:24 +00:00
<!-- end messages -->
<!-- end enums -->
< a name = "object/types.proto" > < / a >
< p align = "right" > < a href = "#top" > Top< / a > < / p >
## object/types.proto
<!-- end services -->
2024-03-05 09:36:58 +00:00
< a name = "neo.fs.v2.object.ECInfo" > < / a >
### Message ECInfo
Meta information for the erasure-encoded object.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| chunks | [ECInfo.Chunk ](#neo.fs.v2.object.ECInfo.Chunk ) | repeated | Chunk stored on the node. |
< a name = "neo.fs.v2.object.ECInfo.Chunk" > < / a >
### Message ECInfo.Chunk
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| id | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | Object ID of the chunk. |
| index | [uint32 ](#uint32 ) | | Index of the chunk. |
| total | [uint32 ](#uint32 ) | | Total number of chunks in this split. |
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.Header" > < / a >
2020-08-04 20:43:33 +00:00
### Message Header
2020-10-16 11:40:12 +00:00
Object Header
2020-08-04 10:18:38 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2022-06-21 11:32:14 +00:00
| version | [neo.fs.v2.refs.Version ](#neo.fs.v2.refs.Version ) | | Object format version. Effectively, the version of API library used to create particular object |
2020-08-13 16:18:53 +00:00
| container_id | [neo.fs.v2.refs.ContainerID ](#neo.fs.v2.refs.ContainerID ) | | Object's container |
| owner_id | [neo.fs.v2.refs.OwnerID ](#neo.fs.v2.refs.OwnerID ) | | Object's owner |
2020-08-14 19:44:32 +00:00
| creation_epoch | [uint64 ](#uint64 ) | | Object creation Epoch |
2020-12-11 07:20:21 +00:00
| payload_length | [uint64 ](#uint64 ) | | Size of payload in bytes. `0xFFFFFFFFFFFFFFFF` means `payload_length` is unknown. |
2020-08-18 15:41:25 +00:00
| payload_hash | [neo.fs.v2.refs.Checksum ](#neo.fs.v2.refs.Checksum ) | | Hash of payload bytes |
2020-10-16 11:40:12 +00:00
| object_type | [ObjectType ](#neo.fs.v2.object.ObjectType ) | | Type of the object payload content |
2020-12-11 07:20:21 +00:00
| homomorphic_hash | [neo.fs.v2.refs.Checksum ](#neo.fs.v2.refs.Checksum ) | | Homomorphic hash of the object payload |
2020-08-18 13:51:28 +00:00
| session_token | [neo.fs.v2.session.SessionToken ](#neo.fs.v2.session.SessionToken ) | | Session token, if it was used during Object creation. Need it to verify integrity and authenticity out of Request scope. |
2020-08-13 16:18:53 +00:00
| attributes | [Header.Attribute ](#neo.fs.v2.object.Header.Attribute ) | repeated | User-defined object attributes |
2020-10-16 11:40:12 +00:00
| split | [Header.Split ](#neo.fs.v2.object.Header.Split ) | | Position of the object in the split hierarchy |
2024-03-05 09:36:58 +00:00
| ec | [Header.EC ](#neo.fs.v2.object.Header.EC ) | | Erasure code chunk information. |
2020-08-04 10:18:38 +00:00
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.Header.Attribute" > < / a >
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
### Message Header.Attribute
2022-06-21 11:32:14 +00:00
`Attribute` is a user-defined Key-Value metadata pair attached to an
2020-10-16 11:40:12 +00:00
object.
2022-06-21 11:32:14 +00:00
Key name must be an object-unique valid UTF-8 string. Value can't be empty.
2020-12-11 07:20:21 +00:00
Objects with duplicated attribute names or attributes with empty values
will be considered invalid.
2024-03-05 09:36:58 +00:00
There are some "well-known" attributes starting with `__SYSTEM__`
(`__NEOFS__` is deprecated) prefix that affect system behaviour:
2020-10-16 11:40:12 +00:00
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__UPLOAD_ID ] \
(`__NEOFS__UPLOAD_ID` is deprecated) \
2020-10-23 12:40:32 +00:00
Marks smaller parts of a split bigger object
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__EXPIRATION_EPOCH ] \
(`__NEOFS__EXPIRATION_EPOCH` is deprecated) \
2024-03-05 09:36:58 +00:00
The epoch after which object with no LOCKs on it becomes unavailable.
Locked object continues to be available until each of the LOCKs expire.
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__TICK_EPOCH ] \
(`__NEOFS__TICK_EPOCH` is deprecated) \
2022-02-14 16:31:20 +00:00
Decimal number that defines what epoch must produce
object notification with UTF-8 object address in a
body (`0` value produces notification right after
object put)
2023-03-14 07:24:35 +00:00
* [ __SYSTEM__TICK_TOPIC ] \
(`__NEOFS__TICK_TOPIC` is deprecated) \
2022-02-14 16:31:20 +00:00
UTF-8 string topic ID that is used for object notification
2020-10-23 12:40:32 +00:00
And some well-known attributes used by applications only:
* Name \
Human-friendly name
* FileName \
File name to be associated with the object on saving
2022-09-23 14:57:44 +00:00
* FilePath \
Full path to be associated with the object on saving. Should start with a
'/' and use '/' as a delimiting symbol. Trailing '/' should be
interpreted as a virtual directory marker. If an object has conflicting
FilePath and FileName, FilePath should have higher priority, because it
is used to construct the directory tree. FilePath with trailing '/' and
non-empty FileName attribute should not be used together.
2020-10-23 12:40:32 +00:00
* Timestamp \
User-defined local time of object creation in Unix Timestamp format
2021-03-12 19:25:00 +00:00
* Content-Type \
MIME Content Type of object's payload
2020-10-16 11:40:12 +00:00
For detailed description of each well-known attribute please see the
2024-09-05 13:27:53 +00:00
corresponding section in FrostFS Technical Specification.
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-08-11 15:49:56 +00:00
| key | [string ](#string ) | | string key to the object attribute |
| value | [string ](#string ) | | string value of the object attribute |
2020-01-30 11:41:24 +00:00
2024-03-05 09:36:58 +00:00
< a name = "neo.fs.v2.object.Header.EC" > < / a >
### Message Header.EC
Erasure code can be applied to any object.
Information about encoded object structure is stored in `EC` header.
All objects belonging to a single EC group have the same `parent` field.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| parent | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | Identifier of the origin object. Known to all chunks. |
| index | [uint32 ](#uint32 ) | | Index of this chunk. |
| total | [uint32 ](#uint32 ) | | Total number of chunks in this split. |
| header_length | [uint32 ](#uint32 ) | | Total length of a parent header. Used to trim padding zeroes. |
| header | [bytes ](#bytes ) | | Chunk of a parent header. |
2024-05-08 10:07:33 +00:00
| parent_split_id | [bytes ](#bytes ) | | As the origin object is EC-splitted its identifier is known to all chunks as parent. But parent itself can be a part of Split (does not relate to EC-split). In this case parent_split_id should be set. |
2024-05-28 12:51:02 +00:00
| parent_split_parent_id | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | EC-parent's parent ID. parent_split_parent_id is set if EC-parent, itself, is a part of Split and if an object ID of its parent is presented. The field allows to determine how EC-chunk is placed in Split hierarchy. |
2024-05-23 19:40:45 +00:00
| parent_attributes | [Header.Attribute ](#neo.fs.v2.object.Header.Attribute ) | repeated | EC parent's attributes. |
2024-03-05 09:36:58 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.Header.Split" > < / a >
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
### Message Header.Split
2020-10-16 11:40:12 +00:00
Bigger objects can be split into a chain of smaller objects. Information
about inter-dependencies between spawned objects and how to re-construct
the original one is in the `Split` headers. Parent and children objects
must be within the same container.
2020-08-04 20:36:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| parent | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | Identifier of the origin object. Known only to the minor child. |
| previous | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | Identifier of the left split neighbor |
2020-08-18 13:51:28 +00:00
| parent_signature | [neo.fs.v2.refs.Signature ](#neo.fs.v2.refs.Signature ) | | `signature` field of the parent object. Used to reconstruct parent. |
2020-08-13 16:18:53 +00:00
| parent_header | [Header ](#neo.fs.v2.object.Header ) | | `header` field of the parent object. Used to reconstruct parent. |
2020-10-16 11:40:12 +00:00
| children | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | repeated | List of identifiers of the objects generated by splitting current one. |
2020-12-11 07:20:21 +00:00
| split_id | [bytes ](#bytes ) | | 16 byte UUIDv4 used to identify the split object hierarchy parts. Must be unique inside container. All objects participating in the split must have the same `split_id` value. |
2020-01-30 11:41:24 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.Object" > < / a >
2020-01-30 11:41:24 +00:00
2020-08-11 15:49:56 +00:00
### Message Object
2020-10-16 11:40:12 +00:00
Object structure. Object is immutable and content-addressed. It means
2024-03-05 09:36:58 +00:00
`ObjectID` will change if the header or the payload changes. It's calculated
as a hash of header field which contains hash of the object's payload.
2020-08-04 20:36:24 +00:00
2022-02-21 16:00:08 +00:00
For non-regular object types payload format depends on object type specified
in the header.
2020-08-04 20:36:24 +00:00
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| object_id | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | Object's unique identifier. |
2020-08-18 13:51:28 +00:00
| signature | [neo.fs.v2.refs.Signature ](#neo.fs.v2.refs.Signature ) | | Signed object_id |
2020-08-13 16:18:53 +00:00
| header | [Header ](#neo.fs.v2.object.Header ) | | Object metadata headers |
2020-12-11 07:20:21 +00:00
| payload | [bytes ](#bytes ) | | Payload bytes |
2020-01-30 11:41:24 +00:00
2020-08-14 19:04:56 +00:00
< a name = "neo.fs.v2.object.ShortHeader" > < / a >
### Message ShortHeader
Short header fields
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2022-06-21 11:32:14 +00:00
| version | [neo.fs.v2.refs.Version ](#neo.fs.v2.refs.Version ) | | Object format version. Effectively, the version of API library used to create particular object. |
2020-08-14 19:04:56 +00:00
| creation_epoch | [uint64 ](#uint64 ) | | Epoch when the object was created |
| owner_id | [neo.fs.v2.refs.OwnerID ](#neo.fs.v2.refs.OwnerID ) | | Object's owner |
| object_type | [ObjectType ](#neo.fs.v2.object.ObjectType ) | | Type of the object payload content |
2020-10-16 11:40:12 +00:00
| payload_length | [uint64 ](#uint64 ) | | Size of payload in bytes. `0xFFFFFFFFFFFFFFFF` means `payload_length` is unknown |
2020-12-25 12:16:10 +00:00
| payload_hash | [neo.fs.v2.refs.Checksum ](#neo.fs.v2.refs.Checksum ) | | Hash of payload bytes |
| homomorphic_hash | [neo.fs.v2.refs.Checksum ](#neo.fs.v2.refs.Checksum ) | | Homomorphic hash of the object payload |
2020-08-14 19:04:56 +00:00
2020-12-11 07:20:21 +00:00
< a name = "neo.fs.v2.object.SplitInfo" > < / a >
### Message SplitInfo
2022-06-21 11:32:14 +00:00
Meta information of split hierarchy for object assembly. With the last part
one can traverse linked list of split hierarchy back to the first part and
2024-03-05 09:36:58 +00:00
assemble the original object. With a linking object one can assemble an
object right from the object parts.
2020-12-11 07:20:21 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| split_id | [bytes ](#bytes ) | | 16 byte UUID used to identify the split object hierarchy parts. |
2022-06-21 11:32:14 +00:00
| last_part | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | The identifier of the last object in split hierarchy parts. It contains split header with the original object header. |
| link | [neo.fs.v2.refs.ObjectID ](#neo.fs.v2.refs.ObjectID ) | | The identifier of a linking object for split hierarchy parts. It contains split header with the original object header and a sorted list of object parts. |
2020-12-11 07:20:21 +00:00
2020-08-11 15:49:56 +00:00
<!-- end messages -->
2020-01-30 11:41:24 +00:00
2020-08-04 20:36:24 +00:00
2020-08-14 19:04:56 +00:00
< a name = "neo.fs.v2.object.MatchType" > < / a >
### MatchType
Type of match expression
| Name | Number | Description |
| ---- | ------ | ----------- |
| MATCH_TYPE_UNSPECIFIED | 0 | Unknown. Not used |
| STRING_EQUAL | 1 | Full string match |
2021-02-11 13:13:07 +00:00
| STRING_NOT_EQUAL | 2 | Full string mismatch |
| NOT_PRESENT | 3 | Lack of key |
2021-08-16 09:08:35 +00:00
| COMMON_PREFIX | 4 | String prefix match |
2020-08-14 19:04:56 +00:00
2020-08-13 16:18:53 +00:00
< a name = "neo.fs.v2.object.ObjectType" > < / a >
2020-08-04 13:04:56 +00:00
2020-08-11 15:49:56 +00:00
### ObjectType
2020-12-11 07:20:21 +00:00
Type of the object payload content. Only `REGULAR` type objects can be split,
2024-03-05 09:36:58 +00:00
hence `TOMBSTONE` and `LOCK` payload is limited by the
maximum object size.
2020-12-11 07:20:21 +00:00
2021-08-26 13:40:34 +00:00
String presentation of object type is the same as definition:
* REGULAR
* TOMBSTONE
2022-02-21 16:00:08 +00:00
* LOCK
2020-08-04 13:04:56 +00:00
2020-08-11 15:49:56 +00:00
| Name | Number | Description |
| ---- | ------ | ----------- |
| REGULAR | 0 | Just a normal object |
| TOMBSTONE | 1 | Used internally to identify deleted objects |
2022-02-21 16:00:08 +00:00
| LOCK | 3 | Object lock |
2020-08-04 13:04:56 +00:00
2020-01-30 11:41:24 +00:00
<!-- end enums -->
## Scalar Value Types
| .proto Type | Notes | C++ Type | Java Type | Python Type |
| ----------- | ----- | -------- | --------- | ----------- |
| < a name = "double" / > double | | double | double | float |
| < a name = "float" / > float | | float | float | float |
| < a name = "int32" / > 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 |
| < a name = "int64" / > 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 |
| < a name = "uint32" / > uint32 | Uses variable-length encoding. | uint32 | int | int/long |
| < a name = "uint64" / > uint64 | Uses variable-length encoding. | uint64 | long | int/long |
| < a name = "sint32" / > sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int |
| < a name = "sint64" / > sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long |
| < a name = "fixed32" / > fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int |
| < a name = "fixed64" / > fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long |
| < a name = "sfixed32" / > sfixed32 | Always four bytes. | int32 | int | int |
| < a name = "sfixed64" / > sfixed64 | Always eight bytes. | int64 | long | int/long |
| < a name = "bool" / > bool | | bool | boolean | boolean |
| < a name = "string" / > string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode |
| < a name = "bytes" / > bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str |