diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f4d862..26849c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Added - Well-known `Version` node attribute (#267) - `INIT` split chain object type (#283) +- Link object payload message (#263) ### Removed - Redundant object system attribute `__NEOFS__UPLOAD_ID` (#271) diff --git a/link/types.proto b/link/types.proto new file mode 100644 index 0000000..2bbd5e2 --- /dev/null +++ b/link/types.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; + +package neo.fs.v2.link; + +option go_package = "github.com/nspcc-dev/neofs-api-go/v2/link/grpc;link"; +option csharp_namespace = "Neo.FileStorage.API.Link"; + +import "refs/types.proto"; + +// Link is a payload of helper objects that contain the full list of the split +// chain objects' IDs. It is created only after the whole split chain is known +// and signed. This object is the only object that refers to every "child object" +// ID. It is NOT required for the original object assembling. It MUST have ALL +// the "child objects" IDs. IDs MUST be ordered according to the original payload +// split, meaning the first payload part holder MUST be placed at the first place +// in the corresponding link object. +message Link { + // Full list of the "child" object IDs. + repeated neo.fs.v2.refs.ObjectID children = 1 [json_name = "children"]; +} diff --git a/object/types.proto b/object/types.proto index e6f8501..3cb2997 100644 --- a/object/types.proto +++ b/object/types.proto @@ -178,6 +178,8 @@ message Header { Header parent_header = 4 [json_name = "parentHeader"]; // List of identifiers of the objects generated by splitting current one. + // Emtpy children list in a link object means that children's IDs + // are encoded in the link's payload. repeated neo.fs.v2.refs.ObjectID children = 5 [json_name = "children"]; // 16 byte UUIDv4 used to identify the split object hierarchy parts. Must be diff --git a/proto-docs/link.md b/proto-docs/link.md new file mode 100644 index 0000000..a1596a0 --- /dev/null +++ b/proto-docs/link.md @@ -0,0 +1,66 @@ +# Protocol Documentation + + +## Table of Contents + +- [link/types.proto](#link/types.proto) + + - Messages + - [Link](#neo.fs.v2.link.Link) + + +- [Scalar Value Types](#scalar-value-types) + + + + +

Top

+ +## link/types.proto + + + + + + + +### Message Link +Link is a payload of helper objects that contain the full list of the split +chain objects' IDs. It is created only after the whole split chain is known +and signed. This object is the only object that refers to every "child object" +ID. It is NOT required for the original object assembling. It MUST have ALL +the "child objects" IDs. IDs MUST be ordered according to the original payload +split, meaning the first payload part holder MUST be placed at the first place +in the corresponding link object. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| children | [neo.fs.v2.refs.ObjectID](#neo.fs.v2.refs.ObjectID) | repeated | Full list of the "child" object IDs. | + + + + + + + +## 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 | + diff --git a/proto-docs/object.md b/proto-docs/object.md index c08be90..b654002 100644 --- a/proto-docs/object.md +++ b/proto-docs/object.md @@ -951,7 +951,7 @@ must be within the same container. | previous | [neo.fs.v2.refs.ObjectID](#neo.fs.v2.refs.ObjectID) | | Identifier of the left split neighbor | | parent_signature | [neo.fs.v2.refs.Signature](#neo.fs.v2.refs.Signature) | | `signature` field of the parent object. Used to reconstruct parent. | | parent_header | [Header](#neo.fs.v2.object.Header) | | `header` field of the parent object. Used to reconstruct parent. | -| children | [neo.fs.v2.refs.ObjectID](#neo.fs.v2.refs.ObjectID) | repeated | List of identifiers of the objects generated by splitting current one. | +| children | [neo.fs.v2.refs.ObjectID](#neo.fs.v2.refs.ObjectID) | repeated | List of identifiers of the objects generated by splitting current one. Emtpy children list in a link object means that children's IDs are encoded in the link's payload. | | 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. | | init | [neo.fs.v2.refs.ObjectID](#neo.fs.v2.refs.ObjectID) | | Identifier of the initial part of the object split chain. Required for every split chain's objects (except the initial one). The initial object is the only original object's successor before the latest object part is uploaded to the network. |