Skip to content

Commit

Permalink
link: Create link object payload message
Browse files Browse the repository at this point in the history
It describes future protocol version's link object payload. Child objects list
will be moved from the header to the payload. This is done due to the header
size restrictions. Closes #263.

Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
  • Loading branch information
carpawell committed Feb 5, 2024
1 parent d5e1aad commit fa2080f
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

### Added
- Numeric operands for object search queries (#265)
- Link object payload message (#263)

### Changed

Expand Down
20 changes: 20 additions & 0 deletions link/types.proto
Original file line number Diff line number Diff line change
@@ -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"];
}
2 changes: 2 additions & 0 deletions object/types.proto
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ message Header {
// `header` field of the parent object. Used to reconstruct parent.
Header parent_header = 4 [json_name = "parentHeader"];

// DEPRECATED. Was used before creating the separate LINK object type. Keep
// child objects list in the LINK object's payload.
// List of identifiers of the objects generated by splitting current one.
repeated neo.fs.v2.refs.ObjectID children = 5 [json_name = "children"];

Expand Down
66 changes: 66 additions & 0 deletions proto-docs/link.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Protocol Documentation
<a name="top"></a>

## Table of Contents

- [link/types.proto](#link/types.proto)

- Messages
- [Link](#neo.fs.v2.link.Link)


- [Scalar Value Types](#scalar-value-types)



<a name="link/types.proto"></a>
<p align="right"><a href="#top">Top</a></p>

## link/types.proto


<!-- end services -->


<a name="neo.fs.v2.link.Link"></a>

### 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. |

<!-- end messages -->

<!-- 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 |

2 changes: 1 addition & 1 deletion proto-docs/object.md
Original file line number Diff line number Diff line change
Expand Up @@ -954,7 +954,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 | DEPRECATED. Was used before creating the separate LINK object type. Keep child objects list in the LINK object's payload. List of identifiers of the objects generated by splitting current one. |
| 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. |


Expand Down

0 comments on commit fa2080f

Please sign in to comment.