From 16101b7d84cebf35e855ba0e30ab6d7d552e2385 Mon Sep 17 00:00:00 2001 From: Evgeniy Kulikov Date: Thu, 21 Nov 2019 15:13:07 +0300 Subject: [PATCH 1/7] proto: add version of protocol into meta header --- service/meta.go | 12 +++++++++++- service/meta.proto | 5 +++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/service/meta.go b/service/meta.go index 52874c1..1e3fcc8 100644 --- a/service/meta.go +++ b/service/meta.go @@ -10,6 +10,7 @@ type ( // MetaHeader contains meta information of request. // It provides methods to get or set meta information meta header. // Also contains methods to reset and restore meta header. + // Also contains methods to get or set request protocol version MetaHeader interface { ResetMeta() RequestMetaHeader RestoreMeta(RequestMetaHeader) @@ -20,7 +21,16 @@ type ( // EpochRequest gives possibility to get or set epoch in RPC Requests. GetEpoch() uint64 - SetEpoch(v uint64) + SetEpoch(uint64) + + // VersionHeader allows get or set version of protocol request + VersionHeader + } + + // VersionHeader allows get or set version of protocol request + VersionHeader interface { + GetVersion() uint32 + SetVersion(uint32) } // TTLCondition is closure, that allows to validate request with ttl. diff --git a/service/meta.proto b/service/meta.proto index 4c09fb3..62866d2 100644 --- a/service/meta.proto +++ b/service/meta.proto @@ -7,6 +7,7 @@ import "github.com/gogo/protobuf/gogoproto/gogo.proto"; option (gogoproto.stable_marshaler_all) = true; message RequestMetaHeader { - uint32 TTL = 1; - uint64 Epoch = 2; + uint32 TTL = 1; + uint64 Epoch = 2; + uint32 Version = 3; } From cc3b4d9087a9499b5bde677209ebe8b997adbc77 Mon Sep 17 00:00:00 2001 From: Evgeniy Kulikov Date: Thu, 21 Nov 2019 15:17:54 +0300 Subject: [PATCH 2/7] proto: SearchRequest rename Version to QueryVersion --- object/service.proto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/object/service.proto b/object/service.proto index 6abe8ed..da54447 100644 --- a/object/service.proto +++ b/object/service.proto @@ -129,12 +129,12 @@ message HeadResponse { } message SearchRequest { - // Version of search query format - uint32 Version = 1; // ContainerID for searching the object - bytes ContainerID = 2 [(gogoproto.nullable) = false, (gogoproto.customtype) = "CID"]; + bytes ContainerID = 1 [(gogoproto.nullable) = false, (gogoproto.customtype) = "CID"]; // Query in the binary serialized format - bytes Query = 3; + bytes Query = 2; + // QueryVersion is a version of search query format + uint32 QueryVersion = 3; // RequestMetaHeader contains information about request meta headers (should be embedded into message) service.RequestMetaHeader Meta = 98 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) From b8f3641b591e2416fe7fa8222d2bda84a49833b5 Mon Sep 17 00:00:00 2001 From: Evgeniy Kulikov Date: Thu, 21 Nov 2019 15:20:49 +0300 Subject: [PATCH 3/7] service: add `SetVersion` to satisfy `MetaHeader` interface --- service/meta.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/service/meta.go b/service/meta.go index 1e3fcc8..6b5b8b7 100644 --- a/service/meta.go +++ b/service/meta.go @@ -56,6 +56,9 @@ const ( ErrIncorrectTTL = internal.Error("incorrect ttl") ) +// SetVersion sets protocol version to RequestMetaHeader. +func (m *RequestMetaHeader) SetVersion(v uint32) { m.Version = v } + // SetTTL sets TTL to RequestMetaHeader. func (m *RequestMetaHeader) SetTTL(v uint32) { m.TTL = v } From e2842ae2166ab0f2f6aebd5b5aa0ccb933ef9045 Mon Sep 17 00:00:00 2001 From: Evgeniy Kulikov Date: Thu, 21 Nov 2019 15:14:01 +0300 Subject: [PATCH 4/7] docs: add doc comments for meta and verify proto files --- service/meta.proto | 6 ++++++ service/verify.proto | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/service/meta.proto b/service/meta.proto index 62866d2..d3c3005 100644 --- a/service/meta.proto +++ b/service/meta.proto @@ -6,8 +6,14 @@ import "github.com/gogo/protobuf/gogoproto/gogo.proto"; option (gogoproto.stable_marshaler_all) = true; +// RequestMetaHeader contains information about request meta headers +// (should be embedded into message) message RequestMetaHeader { + // TTL must be larger than zero, it decreased in every NeoFS Node uint32 TTL = 1; + // Epoch for user can be empty, because node sets epoch to the actual value uint64 Epoch = 2; + // Version defines protocol version + // TODO: not used for now, should be implemented in future uint32 Version = 3; } diff --git a/service/verify.proto b/service/verify.proto index 7d83308..c70015b 100644 --- a/service/verify.proto +++ b/service/verify.proto @@ -6,15 +6,25 @@ import "github.com/gogo/protobuf/gogoproto/gogo.proto"; option (gogoproto.stable_marshaler_all) = true; +// RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request +// (should be embedded into message). message RequestVerificationHeader { message Sign { + // Sign is signature of the request or session key. bytes Sign = 1; + // Peer is compressed public key used for signature. bytes Peer = 2; } + message Signature { + // Sign is a signature and public key of the request. Sign Sign = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + // Origin used for requests, when trusted node changes it and re-sign with session key. + // If session key used for signature request, then Origin should contain + // public key of user and signed session key. Sign Origin = 2; } + // Signatures is a set of signatures of every passed NeoFS Node repeated Signature Signatures = 1; } From c35eefec3b5e4d0d33aff42f827f41ed8d72d440 Mon Sep 17 00:00:00 2001 From: Evgeniy Kulikov Date: Thu, 21 Nov 2019 15:27:17 +0300 Subject: [PATCH 5/7] docs: add doc comments for session and state requests --- session/service.proto | 2 ++ state/service.proto | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/session/service.proto b/session/service.proto index 9b0c65e..377e77e 100644 --- a/session/service.proto +++ b/session/service.proto @@ -36,7 +36,9 @@ message CreateRequest { // Signed Init message response (Unsigned) from server with user private key session.Token Signed = 2; } + // RequestMetaHeader contains information about request meta headers (should be embedded into message) service.RequestMetaHeader Meta = 98 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) service.RequestVerificationHeader Verify = 99 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; } diff --git a/state/service.proto b/state/service.proto index cb2698b..ed90e26 100644 --- a/state/service.proto +++ b/state/service.proto @@ -22,13 +22,17 @@ service Status { // NetmapRequest message to request current node netmap message NetmapRequest { + // RequestMetaHeader contains information about request meta headers (should be embedded into message) service.RequestMetaHeader Meta = 98 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) service.RequestVerificationHeader Verify = 99 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; } // MetricsRequest message to request node metrics message MetricsRequest { + // RequestMetaHeader contains information about request meta headers (should be embedded into message) service.RequestMetaHeader Meta = 98 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) service.RequestVerificationHeader Verify = 99 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; } @@ -41,7 +45,9 @@ message MetricsResponse { // HealthRequest message to check current state message HealthRequest { + // RequestMetaHeader contains information about request meta headers (should be embedded into message) service.RequestMetaHeader Meta = 98 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) service.RequestVerificationHeader Verify = 99 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; } From 0aa2d69dbd55afbd3e7e83758c45297958e46a3b Mon Sep 17 00:00:00 2001 From: Evgeniy Kulikov Date: Thu, 21 Nov 2019 15:28:15 +0300 Subject: [PATCH 6/7] docs: regenerate proto documentation --- docs/accounting.md | 15 +++-- docs/bootstrap.md | 3 +- docs/container.md | 12 ++-- docs/object.md | 30 ++++----- docs/service.md | 157 +++++++++++++++++++++++++++++++++++++++++++++ docs/session.md | 2 + docs/state.md | 15 +++++ 7 files changed, 209 insertions(+), 25 deletions(-) create mode 100644 docs/service.md diff --git a/docs/accounting.md b/docs/accounting.md index b4317ae..268a187 100644 --- a/docs/accounting.md +++ b/docs/accounting.md @@ -87,7 +87,8 @@ Balance returns current balance status of the NeoFS user | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | OwnerID | [bytes](#bytes) | | OwnerID is a wallet address | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -362,7 +363,8 @@ Delete allows user to remove unused cheque | OwnerID | [bytes](#bytes) | | OwnerID is a wallet address | | MessageID | [bytes](#bytes) | | MessageID is a nonce for uniq request (UUIDv4) | | Signature | [bytes](#bytes) | | Signature is a signature of the sent request | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -382,7 +384,8 @@ DeleteResponse is empty | ----- | ---- | ----- | ----------- | | ID | [bytes](#bytes) | | ID is cheque identifier | | OwnerID | [bytes](#bytes) | | OwnerID is a wallet address | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -420,7 +423,8 @@ DeleteResponse is empty | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | OwnerID | [bytes](#bytes) | | OwnerID is a wallet address | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -447,7 +451,8 @@ DeleteResponse is empty | Height | [uint64](#uint64) | | Height is the neo blockchain height until the cheque is valid | | MessageID | [bytes](#bytes) | | MessageID is a nonce for uniq request (UUIDv4) | | Signature | [bytes](#bytes) | | Signature is a signature of the sent request | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | diff --git a/docs/bootstrap.md b/docs/bootstrap.md index 19967bf..737e085 100644 --- a/docs/bootstrap.md +++ b/docs/bootstrap.md @@ -62,7 +62,8 @@ Process is method that allows to register node in the network and receive actual | ----- | ---- | ----- | ----------- | | type | [int32](#int32) | | Type is NodeType, can be InnerRingNode (type=1) or StorageNode (type=2) | | info | [NodeInfo](#bootstrap.NodeInfo) | | Info contains information about node | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | diff --git a/docs/container.md b/docs/container.md index 4f98a47..bc559ce 100644 --- a/docs/container.md +++ b/docs/container.md @@ -92,8 +92,9 @@ List returns all user's containers | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | CID | [bytes](#bytes) | | CID (container id) is a SHA256 hash of the container structure | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Signature | [bytes](#bytes) | | Signature of the container owner | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -113,7 +114,8 @@ via consensus in inner ring nodes | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | CID | [bytes](#bytes) | | CID (container id) is a SHA256 hash of the container structure | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -136,7 +138,8 @@ via consensus in inner ring nodes | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | OwnerID | [bytes](#bytes) | | OwnerID is a wallet address | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -163,7 +166,8 @@ via consensus in inner ring nodes | OwnerID | [bytes](#bytes) | | OwnerID is a wallet address | | rules | [netmap.PlacementRule](#netmap.PlacementRule) | | Rules define storage policy for the object inside the container. | | Signature | [bytes](#bytes) | | Signature of the user (owner id) | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | diff --git a/docs/object.md b/docs/object.md index 03e41c8..8407733 100644 --- a/docs/object.md +++ b/docs/object.md @@ -147,11 +147,11 @@ calculated for XORed data. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Epoch | [uint64](#uint64) | | Epoch is set by user to 0, node set epoch to the actual value Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Address | [refs.Address](#refs.Address) | | Address of object (container id + object id) | | OwnerID | [bytes](#bytes) | | OwnerID is a wallet address | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Token | [session.Token](#session.Token) | | Token with session public key and user's signature | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -170,11 +170,11 @@ in distributed system. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Epoch | [uint64](#uint64) | | Epoch is set by user to 0, node set epoch to the actual value Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Address | [refs.Address](#refs.Address) | | Address of object (container id + object id) | | Ranges | [Range](#object.Range) | repeated | Ranges of object's payload to calculate homomorphic hash | | Salt | [bytes](#bytes) | | Salt is used to XOR object's payload ranges before hashing, it can be nil | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -196,10 +196,10 @@ in distributed system. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Epoch | [uint64](#uint64) | | Epoch is set by user to 0, node set epoch to the actual value Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Address | [refs.Address](#refs.Address) | | Address of object (container id + object id) | | Ranges | [Range](#object.Range) | repeated | Ranges of object's payload to return | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -221,9 +221,9 @@ in distributed system. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Epoch | [uint64](#uint64) | | Epoch is set by user to 0, node set epoch to the actual value Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Address | [refs.Address](#refs.Address) | | Address of object (container id + object id) | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -246,10 +246,10 @@ in distributed system. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Epoch | [uint64](#uint64) | | Epoch should be empty on user side, node sets epoch to the actual value Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Address | [refs.Address](#refs.Address) | | Address of object (container id + object id) | | FullHeaders | [bool](#bool) | | FullHeaders can be set true for extended headers in the object | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -273,6 +273,8 @@ in distributed system. | ----- | ---- | ----- | ----------- | | Header | [PutRequest.PutHeader](#object.PutRequest.PutHeader) | | Header should be the first message in the stream | | Chunk | [bytes](#bytes) | | Chunk should be a remaining message in stream should be chunks | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | @@ -283,9 +285,7 @@ in distributed system. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Epoch | [uint64](#uint64) | | Epoch is set by user to 0, node set epoch to the actual value Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Object | [Object](#object.Object) | | Object with at least container id and owner id fields | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | | Token | [session.Token](#session.Token) | | Token with session public key and user's signature | @@ -308,11 +308,11 @@ in distributed system. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Epoch | [uint64](#uint64) | | Epoch is set by user to 0, node set epoch to the actual value Deprecated: will be replaced with RequestMetaHeader (see develop branch) | -| Version | [uint32](#uint32) | | Version of search query format | | ContainerID | [bytes](#bytes) | | ContainerID for searching the object | | Query | [bytes](#bytes) | | Query in the binary serialized format | -| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every neofs-node Deprecated: will be replaced with RequestMetaHeader (see develop branch) | +| QueryVersion | [uint32](#uint32) | | QueryVersion is a version of search query format | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | diff --git a/docs/service.md b/docs/service.md new file mode 100644 index 0000000..454fab4 --- /dev/null +++ b/docs/service.md @@ -0,0 +1,157 @@ +# Protocol Documentation + + +## Table of Contents + +- [service/meta.proto](#service/meta.proto) + + - Messages + - [RequestMetaHeader](#service.RequestMetaHeader) + + +- [service/verify.proto](#service/verify.proto) + + - Messages + - [RequestVerificationHeader](#service.RequestVerificationHeader) + - [RequestVerificationHeader.Sign](#service.RequestVerificationHeader.Sign) + - [RequestVerificationHeader.Signature](#service.RequestVerificationHeader.Signature) + + +- [service/verify_test.proto](#service/verify_test.proto) + + - Messages + - [TestRequest](#service.TestRequest) + + +- [Scalar Value Types](#scalar-value-types) + + + + +

Top

+ +## service/meta.proto + + + + + + + +### Message RequestMetaHeader +RequestMetaHeader contains information about request meta headers +(should be embedded into message) + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| TTL | [uint32](#uint32) | | TTL must be larger than zero, it decreased in every NeoFS Node | +| Epoch | [uint64](#uint64) | | Epoch for user can be empty, because node sets epoch to the actual value | +| Version | [uint32](#uint32) | | Version defines protocol version TODO: not used for now, should be implemented in future | + + + + + + + + +

Top

+ +## service/verify.proto + + + + + + + +### Message RequestVerificationHeader +RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request +(should be embedded into message). + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| Signatures | [RequestVerificationHeader.Signature](#service.RequestVerificationHeader.Signature) | repeated | Signatures is a set of signatures of every passed NeoFS Node | + + + + +### Message RequestVerificationHeader.Sign + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| Sign | [bytes](#bytes) | | Sign is signature of the request or session key. | +| Peer | [bytes](#bytes) | | Peer is compressed public key used for signature. | + + + + +### Message RequestVerificationHeader.Signature + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| Sign | [RequestVerificationHeader.Sign](#service.RequestVerificationHeader.Sign) | | Sign is a signature and public key of the request. | +| Origin | [RequestVerificationHeader.Sign](#service.RequestVerificationHeader.Sign) | | Origin used for requests, when trusted node changes it and re-sign with session key. If session key used for signature request, then Origin should contain public key of user and signed session key. | + + + + + + + + +

Top

+ +## service/verify_test.proto + + + + + + + +### Message TestRequest + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| IntField | [int32](#int32) | | | +| StringField | [string](#string) | | | +| BytesField | [bytes](#bytes) | | | +| CustomField | [bytes](#bytes) | | | +| Meta | [RequestMetaHeader](#service.RequestMetaHeader) | | | +| Header | [RequestVerificationHeader](#service.RequestVerificationHeader) | | | + + + + + + + +## 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/docs/session.md b/docs/session.md index cf4a1fd..e8633d3 100644 --- a/docs/session.md +++ b/docs/session.md @@ -70,6 +70,8 @@ session key. Session is established during 4-step handshake in one gRPC stream | ----- | ---- | ----- | ----------- | | Init | [Token](#session.Token) | | Init is a message to initialize session opening. Carry: owner of manipulation object; ID of manipulation object; token lifetime bounds. | | Signed | [Token](#session.Token) | | Signed Init message response (Unsigned) from server with user private key | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | diff --git a/docs/state.md b/docs/state.md index 6d240c1..e678be3 100644 --- a/docs/state.md +++ b/docs/state.md @@ -70,6 +70,11 @@ If node unhealthy field Status would contains detailed info. HealthRequest message to check current state +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | + @@ -89,6 +94,11 @@ HealthResponse message with current state MetricsRequest message to request node metrics +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | + @@ -109,6 +119,11 @@ from github.com/prometheus/client_model/metrics.proto NetmapRequest message to request current node netmap +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | +| Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) | + From 1a9a840d1789ab58e8453f9e3590c7fa05888a70 Mon Sep 17 00:00:00 2001 From: Evgeniy Kulikov Date: Thu, 21 Nov 2019 15:21:37 +0300 Subject: [PATCH 7/7] proto: regenerate proto files --- object/service.pb.go | 188 +++++++++++++++++++++--------------------- service/meta.pb.go | 60 ++++++++++++-- service/verify.pb.go | 19 +++-- session/service.pb.go | 6 +- state/service.pb.go | 12 ++- 5 files changed, 172 insertions(+), 113 deletions(-) diff --git a/object/service.pb.go b/object/service.pb.go index d58d391..4cad2f7 100644 --- a/object/service.pb.go +++ b/object/service.pb.go @@ -538,12 +538,12 @@ func (m *HeadResponse) GetObject() *Object { } type SearchRequest struct { - // Version of search query format - Version uint32 `protobuf:"varint,1,opt,name=Version,proto3" json:"Version,omitempty"` // ContainerID for searching the object - ContainerID CID `protobuf:"bytes,2,opt,name=ContainerID,proto3,customtype=CID" json:"ContainerID"` + ContainerID CID `protobuf:"bytes,1,opt,name=ContainerID,proto3,customtype=CID" json:"ContainerID"` // Query in the binary serialized format - Query []byte `protobuf:"bytes,3,opt,name=Query,proto3" json:"Query,omitempty"` + Query []byte `protobuf:"bytes,2,opt,name=Query,proto3" json:"Query,omitempty"` + // QueryVersion is a version of search query format + QueryVersion uint32 `protobuf:"varint,3,opt,name=QueryVersion,proto3" json:"QueryVersion,omitempty"` // RequestMetaHeader contains information about request meta headers (should be embedded into message) service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) @@ -582,13 +582,6 @@ func (m *SearchRequest) XXX_DiscardUnknown() { var xxx_messageInfo_SearchRequest proto.InternalMessageInfo -func (m *SearchRequest) GetVersion() uint32 { - if m != nil { - return m.Version - } - return 0 -} - func (m *SearchRequest) GetQuery() []byte { if m != nil { return m.Query @@ -596,6 +589,13 @@ func (m *SearchRequest) GetQuery() []byte { return nil } +func (m *SearchRequest) GetQueryVersion() uint32 { + if m != nil { + return m.QueryVersion + } + return 0 +} + type SearchResponse struct { // Addresses of found objects Addresses []refs.Address `protobuf:"bytes,1,rep,name=Addresses,proto3" json:"Addresses"` @@ -865,59 +865,59 @@ func init() { func init() { proto.RegisterFile("object/service.proto", fileDescriptor_dfcdf610ade6a9ce) } var fileDescriptor_dfcdf610ade6a9ce = []byte{ - // 827 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xcd, 0x4e, 0x1b, 0x49, - 0x10, 0xf6, 0xd8, 0x66, 0x0c, 0x65, 0x1b, 0x50, 0xe3, 0x65, 0xad, 0x59, 0x64, 0xd0, 0x08, 0xed, - 0x7a, 0xb5, 0xf2, 0x98, 0x25, 0x12, 0x70, 0x80, 0x43, 0x6c, 0x0b, 0xcc, 0x21, 0x82, 0x0c, 0x08, - 0x29, 0xb9, 0x8d, 0xc7, 0xed, 0x9f, 0x60, 0x66, 0x9c, 0xf9, 0x21, 0xe2, 0x01, 0x72, 0xce, 0x35, - 0x87, 0xbc, 0x49, 0xf2, 0x00, 0x1c, 0x39, 0x46, 0x39, 0xa0, 0xc8, 0x39, 0xe5, 0x90, 0x3c, 0x43, - 0x34, 0xdd, 0xd5, 0x9e, 0xb1, 0x09, 0x24, 0xe1, 0x10, 0x9f, 0xdc, 0xf5, 0xd5, 0x57, 0x55, 0x5d, - 0x5f, 0x57, 0xb7, 0x07, 0x72, 0x76, 0xe3, 0x19, 0x35, 0xbd, 0xb2, 0x4b, 0x9d, 0xf3, 0xae, 0x49, - 0xb5, 0xbe, 0x63, 0x7b, 0x36, 0x91, 0x39, 0xaa, 0xcc, 0x3b, 0xb4, 0xe5, 0x96, 0xbd, 0x8b, 0x3e, - 0x75, 0xb9, 0x47, 0x21, 0xc8, 0x8f, 0x62, 0x0b, 0x2e, 0x75, 0xdd, 0xae, 0x6d, 0x8d, 0x12, 0x31, - 0x63, 0xf9, 0x8c, 0x7a, 0x06, 0x62, 0x39, 0x81, 0x9d, 0x53, 0xa7, 0xdb, 0xba, 0x40, 0xb4, 0xd4, - 0xee, 0x7a, 0x1d, 0xbf, 0xa1, 0x99, 0xf6, 0x59, 0xb9, 0x6d, 0xb7, 0xed, 0x32, 0x83, 0x1b, 0x7e, - 0x8b, 0x59, 0xcc, 0x60, 0x2b, 0x4e, 0x57, 0xdf, 0x4a, 0x00, 0x7b, 0xd4, 0xd3, 0xe9, 0x73, 0x9f, - 0xba, 0x1e, 0x29, 0x41, 0xea, 0x61, 0xb3, 0xe9, 0x50, 0xd7, 0xcd, 0x4b, 0x2b, 0x52, 0x31, 0xbd, - 0x9e, 0xd5, 0x82, 0x4d, 0x6b, 0x08, 0x56, 0x92, 0x97, 0xd7, 0xcb, 0x31, 0x5d, 0x70, 0xc8, 0x16, - 0x24, 0x1f, 0x51, 0xcf, 0xc8, 0x37, 0x18, 0x57, 0xd1, 0x44, 0xdf, 0x98, 0x2e, 0xf0, 0xd5, 0xa9, - 0xd1, 0xa4, 0x4e, 0x65, 0x3a, 0x08, 0xbc, 0xba, 0x5e, 0x96, 0x74, 0x16, 0x41, 0x6a, 0x20, 0x9f, - 0xb0, 0x6d, 0xe7, 0x4d, 0x16, 0xab, 0x8e, 0xc7, 0x32, 0x6f, 0xd7, 0x34, 0xbc, 0xae, 0x6d, 0xdd, - 0xc8, 0x81, 0xb1, 0xea, 0x31, 0xa4, 0xd9, 0xe6, 0xdd, 0xbe, 0x6d, 0xb9, 0x94, 0x14, 0x01, 0xa5, - 0xc6, 0xcd, 0xcf, 0x6a, 0xdc, 0xd4, 0x0e, 0xd8, 0x4f, 0x3d, 0xa6, 0xa3, 0x9f, 0x2c, 0xc2, 0x54, - 0xb5, 0xe3, 0x5b, 0xa7, 0xf9, 0xf8, 0x8a, 0x54, 0xcc, 0xd4, 0x63, 0x3a, 0x37, 0x2b, 0x09, 0x90, - 0x74, 0xf5, 0x5d, 0x1c, 0xe0, 0xd0, 0x1f, 0x6a, 0xb2, 0x01, 0x32, 0xdf, 0x00, 0x66, 0x5d, 0x12, - 0x59, 0x43, 0x4e, 0xb0, 0xe4, 0x9c, 0xa0, 0x06, 0x5f, 0xdd, 0x56, 0x63, 0xd2, 0xa2, 0x29, 0x4f, - 0x60, 0x66, 0xb8, 0x5d, 0xf2, 0x37, 0xc8, 0x07, 0x77, 0x48, 0xa6, 0xa3, 0x97, 0xac, 0xc2, 0xd4, - 0xb1, 0x7d, 0x4a, 0x2d, 0xd6, 0x4c, 0x40, 0xc3, 0x29, 0xd5, 0x18, 0xaa, 0x73, 0x27, 0x97, 0x6f, - 0x1b, 0xd2, 0x4c, 0x19, 0x3c, 0x94, 0x5f, 0x1b, 0x29, 0xf5, 0x55, 0x1c, 0xb2, 0x35, 0xda, 0xa3, - 0x1e, 0xbd, 0xe7, 0x4c, 0xfe, 0x0b, 0xa9, 0x83, 0x17, 0x16, 0x75, 0xf6, 0x6b, 0x5c, 0xf8, 0xca, - 0x5c, 0xe0, 0xff, 0x70, 0xbd, 0x2c, 0x60, 0x5d, 0x2c, 0xc2, 0xa6, 0x12, 0x77, 0x34, 0x35, 0xf1, - 0x21, 0x9f, 0x87, 0x59, 0x21, 0x08, 0x97, 0x54, 0xfd, 0x2c, 0x41, 0x3a, 0xa0, 0x0b, 0x85, 0xb6, - 0x7e, 0xa0, 0xd0, 0x50, 0x01, 0x04, 0x42, 0xb1, 0x56, 0x20, 0xbd, 0xeb, 0xf7, 0x7a, 0xbc, 0xb6, - 0xcb, 0x04, 0x9b, 0xd6, 0xa3, 0xd0, 0xc4, 0xbb, 0xdf, 0x80, 0x0c, 0x6f, 0x15, 0xc7, 0xe9, 0x27, - 0x07, 0x56, 0xfd, 0x2a, 0x41, 0xf6, 0x88, 0x1a, 0x8e, 0xd9, 0x11, 0x2a, 0xe5, 0x21, 0x75, 0x42, - 0x9d, 0xe0, 0x7c, 0x59, 0x68, 0x56, 0x17, 0x26, 0x29, 0x41, 0xba, 0x6a, 0x5b, 0x9e, 0xd1, 0x8d, - 0x8e, 0x4d, 0x1a, 0x45, 0x4b, 0x54, 0xf7, 0x6b, 0x7a, 0xd4, 0x4f, 0x72, 0x30, 0xf5, 0xd8, 0xa7, - 0xce, 0x05, 0x1b, 0x9b, 0x8c, 0xce, 0x8d, 0x89, 0x0b, 0x55, 0x85, 0x59, 0xd1, 0x2f, 0x4a, 0xf5, - 0x3f, 0xcc, 0xe0, 0x39, 0xd3, 0x60, 0x30, 0x12, 0xb7, 0x5d, 0x9d, 0x90, 0xa5, 0x7e, 0x91, 0x60, - 0x2e, 0x78, 0x51, 0x0d, 0xab, 0x7d, 0xdf, 0xfb, 0xf7, 0x1f, 0xc8, 0x2c, 0x3c, 0x98, 0x26, 0x5e, - 0x12, 0x0f, 0x88, 0xa1, 0xc8, 0x46, 0xca, 0xc4, 0x45, 0x5b, 0x83, 0xf9, 0xb0, 0x5d, 0x94, 0x6d, - 0x09, 0x66, 0x76, 0x1d, 0xa3, 0x7d, 0x46, 0x2d, 0x8f, 0xcb, 0x96, 0xd1, 0x43, 0x40, 0x7d, 0x19, - 0x87, 0x05, 0x11, 0x52, 0x37, 0xdc, 0xce, 0xef, 0x50, 0x89, 0x40, 0xf2, 0xc8, 0xe8, 0x79, 0x38, - 0x6f, 0x6c, 0x3d, 0x71, 0xe5, 0xb6, 0x21, 0x37, 0x2a, 0x03, 0xaa, 0xb7, 0x0a, 0x72, 0x60, 0xe3, - 0xc4, 0x65, 0x2a, 0x19, 0xbc, 0x46, 0x49, 0xc6, 0x42, 0xdf, 0xfa, 0x9b, 0x04, 0xa4, 0x8e, 0x78, - 0x55, 0xb2, 0x06, 0x89, 0x3d, 0xea, 0x11, 0x22, 0x14, 0x08, 0x3f, 0x47, 0x94, 0x85, 0x11, 0x8c, - 0x57, 0x58, 0x93, 0x82, 0x88, 0x43, 0x3f, 0x12, 0x11, 0xfe, 0x11, 0x87, 0x11, 0x91, 0xbf, 0xa0, - 0xa2, 0x44, 0x36, 0x41, 0xe6, 0x6f, 0x28, 0xf9, 0x43, 0x10, 0x46, 0xfe, 0x64, 0x94, 0xc5, 0x71, - 0x78, 0x78, 0x87, 0x92, 0x81, 0x04, 0x64, 0x98, 0x37, 0xf2, 0xee, 0x2a, 0xb9, 0x51, 0x10, 0x43, - 0x36, 0x41, 0xe6, 0x17, 0x31, 0xac, 0x35, 0xf2, 0x10, 0x85, 0xb5, 0xc6, 0xee, 0xeb, 0x0e, 0x4c, - 0x0b, 0x49, 0xc9, 0x9f, 0xd1, 0xce, 0x23, 0xb7, 0x51, 0xc9, 0xdf, 0x74, 0x60, 0xf8, 0x3e, 0x64, - 0xa2, 0x27, 0x42, 0xfe, 0x1a, 0x67, 0x46, 0xc6, 0x55, 0x59, 0xfa, 0xbe, 0x93, 0xa7, 0xaa, 0xec, - 0x5c, 0x0e, 0x0a, 0xd2, 0xd5, 0xa0, 0x20, 0xbd, 0x1f, 0x14, 0xa4, 0x8f, 0x83, 0x82, 0xf4, 0xfa, - 0x53, 0x21, 0xf6, 0xf4, 0x9f, 0xc8, 0xa7, 0xa5, 0xe5, 0xf6, 0x4d, 0xb3, 0xd4, 0xa4, 0xe7, 0x65, - 0x8b, 0xda, 0x2d, 0xb7, 0xc4, 0x3f, 0x2c, 0x79, 0xce, 0x86, 0xcc, 0xac, 0x07, 0xdf, 0x02, 0x00, - 0x00, 0xff, 0xff, 0x96, 0xdf, 0x01, 0x74, 0x0f, 0x0b, 0x00, 0x00, + // 831 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xcf, 0x4f, 0xdb, 0x48, + 0x14, 0xce, 0x24, 0xc1, 0xc0, 0x8b, 0x03, 0x68, 0xc8, 0xb2, 0x91, 0x17, 0x05, 0x64, 0xa1, 0xdd, + 0xac, 0x56, 0x71, 0x58, 0x56, 0x02, 0x0e, 0x70, 0xd8, 0x24, 0x82, 0x70, 0x58, 0xc1, 0x1a, 0x84, + 0xd4, 0xde, 0x1c, 0x67, 0xf2, 0xa3, 0x04, 0x3b, 0xf5, 0xd8, 0x54, 0xfc, 0x01, 0x3d, 0xf7, 0xda, + 0x43, 0xff, 0x93, 0xf6, 0x0f, 0xe0, 0xc8, 0xb1, 0xea, 0x01, 0x55, 0xe9, 0xa9, 0x87, 0xde, 0x7b, + 0xac, 0xe6, 0x87, 0x63, 0x27, 0x14, 0xda, 0x72, 0x68, 0x4e, 0x99, 0xf9, 0xde, 0xf7, 0xde, 0x9b, + 0xf7, 0xf9, 0x1b, 0xc7, 0x90, 0x73, 0x1b, 0x4f, 0x88, 0xed, 0x97, 0x29, 0xf1, 0x2e, 0xba, 0x36, + 0x31, 0xfa, 0x9e, 0xeb, 0xbb, 0x58, 0x11, 0xa8, 0xb6, 0xe0, 0x91, 0x16, 0x2d, 0xfb, 0x97, 0x7d, + 0x42, 0x45, 0x44, 0xc3, 0x92, 0x1f, 0xc7, 0x16, 0x29, 0xa1, 0xb4, 0xeb, 0x3a, 0xa3, 0x44, 0x59, + 0xb1, 0x7c, 0x4e, 0x7c, 0x4b, 0x62, 0xb9, 0x10, 0xbb, 0x20, 0x5e, 0xb7, 0x75, 0x29, 0xd1, 0x52, + 0xbb, 0xeb, 0x77, 0x82, 0x86, 0x61, 0xbb, 0xe7, 0xe5, 0xb6, 0xdb, 0x76, 0xcb, 0x1c, 0x6e, 0x04, + 0x2d, 0xbe, 0xe3, 0x1b, 0xbe, 0x12, 0x74, 0xfd, 0x35, 0x02, 0xd8, 0x27, 0xbe, 0x49, 0x9e, 0x06, + 0x84, 0xfa, 0xb8, 0x04, 0xd3, 0xff, 0x36, 0x9b, 0x1e, 0xa1, 0x34, 0x8f, 0x56, 0x51, 0x31, 0xb3, + 0x91, 0x35, 0xd8, 0xa1, 0x0d, 0x09, 0x56, 0xd2, 0x57, 0x37, 0x2b, 0x09, 0x33, 0xe4, 0xe0, 0x6d, + 0x48, 0xff, 0x47, 0x7c, 0x2b, 0xdf, 0xe0, 0x5c, 0xcd, 0x08, 0xe7, 0x96, 0xe5, 0x58, 0xac, 0x4e, + 0xac, 0x26, 0xf1, 0x2a, 0x33, 0x2c, 0xf1, 0xfa, 0x66, 0x05, 0x99, 0x3c, 0x03, 0xd7, 0x40, 0x39, + 0xe5, 0xc7, 0xce, 0xdb, 0x3c, 0x57, 0x1f, 0xcf, 0xe5, 0xd1, 0xae, 0x6d, 0xf9, 0x5d, 0xd7, 0xb9, + 0x55, 0x43, 0xe6, 0xea, 0x27, 0x90, 0xe1, 0x87, 0xa7, 0x7d, 0xd7, 0xa1, 0x04, 0x17, 0x41, 0x4a, + 0x2d, 0x0f, 0x3f, 0x67, 0x88, 0xad, 0x71, 0xc8, 0x7f, 0xea, 0x09, 0x53, 0xc6, 0xf1, 0x12, 0x4c, + 0x55, 0x3b, 0x81, 0x73, 0x96, 0x4f, 0xae, 0xa2, 0xa2, 0x5a, 0x4f, 0x98, 0x62, 0x5b, 0x49, 0x01, + 0x32, 0xf5, 0x37, 0x49, 0x80, 0xa3, 0x60, 0xa8, 0xc9, 0x26, 0x28, 0xe2, 0x00, 0xb2, 0xea, 0x72, + 0x58, 0x35, 0xe2, 0xb0, 0xa5, 0xe0, 0xb0, 0x1e, 0x62, 0x75, 0x57, 0x8f, 0x49, 0x8b, 0xa6, 0x3d, + 0x82, 0xd9, 0xe1, 0x71, 0xf1, 0xef, 0xa0, 0x1c, 0xde, 0x23, 0x99, 0x29, 0xa3, 0x78, 0x0d, 0xa6, + 0x4e, 0xdc, 0x33, 0xe2, 0xf0, 0x61, 0x18, 0x4d, 0xba, 0xd4, 0xe0, 0xa8, 0x29, 0x82, 0x42, 0xbe, + 0x1d, 0xc8, 0x70, 0x65, 0xe4, 0x43, 0xf9, 0x31, 0x4b, 0xe9, 0x2f, 0x92, 0x90, 0xad, 0x91, 0x1e, + 0xf1, 0xc9, 0x03, 0x3d, 0xf9, 0x27, 0x4c, 0x1f, 0x3e, 0x73, 0x88, 0x77, 0x50, 0x13, 0xc2, 0x57, + 0xe6, 0x59, 0xfc, 0xdd, 0xcd, 0x4a, 0x08, 0x9b, 0xe1, 0x22, 0x1a, 0x2a, 0x75, 0xcf, 0x50, 0x13, + 0x37, 0xf9, 0x02, 0xcc, 0x85, 0x82, 0x08, 0x49, 0xf5, 0x8f, 0x08, 0x32, 0x8c, 0x1e, 0x2a, 0xb4, + 0xfd, 0x0d, 0x85, 0x86, 0x0a, 0x48, 0x20, 0x12, 0x6b, 0x15, 0x32, 0x7b, 0x41, 0xaf, 0x27, 0x7a, + 0x53, 0x2e, 0xd8, 0x8c, 0x19, 0x87, 0x26, 0x3e, 0xfd, 0x26, 0xa8, 0x62, 0x54, 0x69, 0xa7, 0xef, + 0x34, 0xac, 0xfe, 0x19, 0x41, 0xf6, 0x98, 0x58, 0x9e, 0xdd, 0x89, 0x7c, 0x94, 0xa9, 0xba, 0x8e, + 0x6f, 0x75, 0x85, 0x39, 0x10, 0x37, 0x47, 0x46, 0x4a, 0x93, 0xaa, 0x1e, 0xd4, 0xcc, 0x78, 0x1c, + 0xe7, 0x60, 0xea, 0xff, 0x80, 0x78, 0x97, 0xc2, 0x45, 0xa6, 0xd8, 0x60, 0x1d, 0x54, 0xbe, 0x38, + 0x25, 0x1e, 0x73, 0x0a, 0x77, 0x4e, 0xd6, 0x1c, 0xc1, 0x26, 0x2e, 0x59, 0x15, 0xe6, 0xc2, 0xc9, + 0xa5, 0x68, 0x7f, 0xc3, 0xac, 0x7c, 0xe2, 0x84, 0x59, 0x24, 0x75, 0xd7, 0x25, 0x8a, 0x58, 0xfa, + 0x27, 0x04, 0xf3, 0xec, 0xdd, 0x6a, 0x39, 0xed, 0x87, 0xde, 0xc4, 0xbf, 0x40, 0xe1, 0xe9, 0xcc, + 0x57, 0xa2, 0xa5, 0x7c, 0x54, 0x1c, 0x95, 0x6c, 0x49, 0x99, 0xb8, 0x68, 0xeb, 0xb0, 0x10, 0x8d, + 0x2b, 0x65, 0x5b, 0x86, 0xd9, 0x3d, 0xcf, 0x6a, 0x9f, 0x13, 0xc7, 0x17, 0xb2, 0xa9, 0x66, 0x04, + 0xe8, 0xcf, 0x93, 0xb0, 0x18, 0xa6, 0xd4, 0x2d, 0xda, 0xf9, 0x19, 0x2a, 0x61, 0x48, 0x1f, 0x5b, + 0x3d, 0x9f, 0xdb, 0x4e, 0x35, 0xf9, 0x7a, 0xe2, 0xca, 0xed, 0x40, 0x6e, 0x54, 0x06, 0xa9, 0xde, + 0x1a, 0x28, 0x6c, 0x2f, 0x1d, 0xa7, 0x56, 0x54, 0x79, 0xd5, 0xd2, 0x9c, 0x25, 0x63, 0x1b, 0xaf, + 0x52, 0x30, 0x7d, 0x2c, 0xba, 0xe2, 0x75, 0x48, 0xed, 0x13, 0x1f, 0xe3, 0x50, 0x81, 0xe8, 0xc3, + 0x44, 0x5b, 0x1c, 0xc1, 0x44, 0x87, 0x75, 0xc4, 0x32, 0x8e, 0x82, 0x58, 0x46, 0xf4, 0x97, 0x1c, + 0x65, 0xc4, 0xfe, 0x8c, 0x8a, 0x08, 0x6f, 0x81, 0x22, 0xde, 0xa6, 0xf8, 0x97, 0x90, 0x30, 0xf2, + 0x77, 0xa3, 0x2d, 0x8d, 0xc3, 0xc3, 0x3b, 0x94, 0x66, 0x12, 0xe0, 0x61, 0xdd, 0xd8, 0x1b, 0x58, + 0xcb, 0x8d, 0x82, 0x32, 0x65, 0x0b, 0x14, 0x71, 0x11, 0xa3, 0x5e, 0x23, 0xaf, 0xa4, 0xa8, 0xd7, + 0xd8, 0x7d, 0xdd, 0x85, 0x99, 0x50, 0x52, 0xfc, 0x6b, 0x7c, 0xf2, 0xd8, 0x6d, 0xd4, 0xf2, 0xb7, + 0x03, 0x32, 0xfd, 0x00, 0xd4, 0xf8, 0x13, 0xc1, 0xbf, 0x8d, 0x33, 0x63, 0x76, 0xd5, 0x96, 0xbf, + 0x1e, 0x14, 0xa5, 0x2a, 0xbb, 0x57, 0x83, 0x02, 0xba, 0x1e, 0x14, 0xd0, 0xdb, 0x41, 0x01, 0xbd, + 0x1f, 0x14, 0xd0, 0xcb, 0x0f, 0x85, 0xc4, 0xe3, 0x3f, 0x62, 0x1f, 0x99, 0x0e, 0xed, 0xdb, 0x76, + 0xa9, 0x49, 0x2e, 0xca, 0x0e, 0x71, 0x5b, 0xb4, 0x24, 0x3e, 0x31, 0x45, 0xcd, 0x86, 0xc2, 0x77, + 0xff, 0x7c, 0x09, 0x00, 0x00, 0xff, 0xff, 0x56, 0x6d, 0x00, 0xd5, 0x19, 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1913,12 +1913,17 @@ func (m *SearchRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x6 i-- dAtA[i] = 0x92 + if m.QueryVersion != 0 { + i = encodeVarintService(dAtA, i, uint64(m.QueryVersion)) + i-- + dAtA[i] = 0x18 + } if len(m.Query) > 0 { i -= len(m.Query) copy(dAtA[i:], m.Query) i = encodeVarintService(dAtA, i, uint64(len(m.Query))) i-- - dAtA[i] = 0x1a + dAtA[i] = 0x12 } { size := m.ContainerID.Size() @@ -1929,12 +1934,7 @@ func (m *SearchRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintService(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 - if m.Version != 0 { - i = encodeVarintService(dAtA, i, uint64(m.Version)) - i-- - dAtA[i] = 0x8 - } + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -2437,15 +2437,15 @@ func (m *SearchRequest) Size() (n int) { } var l int _ = l - if m.Version != 0 { - n += 1 + sovService(uint64(m.Version)) - } l = m.ContainerID.Size() n += 1 + l + sovService(uint64(l)) l = len(m.Query) if l > 0 { n += 1 + l + sovService(uint64(l)) } + if m.QueryVersion != 0 { + n += 1 + sovService(uint64(m.QueryVersion)) + } l = m.RequestMetaHeader.Size() n += 2 + l + sovService(uint64(l)) l = m.RequestVerificationHeader.Size() @@ -3813,25 +3813,6 @@ func (m *SearchRequest) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - m.Version = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Version |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) } @@ -3864,7 +3845,7 @@ func (m *SearchRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) } @@ -3898,6 +3879,25 @@ func (m *SearchRequest) Unmarshal(dAtA []byte) error { m.Query = []byte{} } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryVersion", wireType) + } + m.QueryVersion = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowService + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.QueryVersion |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } case 98: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field RequestMetaHeader", wireType) diff --git a/service/meta.pb.go b/service/meta.pb.go index 9fbd283..d5f58fd 100644 --- a/service/meta.pb.go +++ b/service/meta.pb.go @@ -23,9 +23,16 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// RequestMetaHeader contains information about request meta headers +// (should be embedded into message) type RequestMetaHeader struct { - TTL uint32 `protobuf:"varint,1,opt,name=TTL,proto3" json:"TTL,omitempty"` - Epoch uint64 `protobuf:"varint,2,opt,name=Epoch,proto3" json:"Epoch,omitempty"` + // TTL must be larger than zero, it decreased in every NeoFS Node + TTL uint32 `protobuf:"varint,1,opt,name=TTL,proto3" json:"TTL,omitempty"` + // Epoch for user can be empty, because node sets epoch to the actual value + Epoch uint64 `protobuf:"varint,2,opt,name=Epoch,proto3" json:"Epoch,omitempty"` + // Version defines protocol version + // TODO: not used for now, should be implemented in future + Version uint32 `protobuf:"varint,3,opt,name=Version,proto3" json:"Version,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -74,6 +81,13 @@ func (m *RequestMetaHeader) GetEpoch() uint64 { return 0 } +func (m *RequestMetaHeader) GetVersion() uint32 { + if m != nil { + return m.Version + } + return 0 +} + func init() { proto.RegisterType((*RequestMetaHeader)(nil), "service.RequestMetaHeader") } @@ -81,19 +95,20 @@ func init() { func init() { proto.RegisterFile("service/meta.proto", fileDescriptor_a638867e7b43457c) } var fileDescriptor_a638867e7b43457c = []byte{ - // 185 bytes of a gzipped FileDescriptorProto + // 202 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2a, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0xcf, 0x4d, 0x2d, 0x49, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x87, 0x8a, 0x49, 0xe9, 0xa6, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xa7, 0xe7, 0xa7, 0xe7, 0xeb, 0x83, 0xe5, 0x93, 0x4a, 0xd3, 0xc0, 0x3c, 0x30, 0x07, 0xcc, 0x82, 0xe8, - 0x53, 0xb2, 0xe6, 0x12, 0x0c, 0x4a, 0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0xf1, 0x4d, 0x2d, 0x49, 0xf4, + 0x53, 0x0a, 0xe5, 0x12, 0x0c, 0x4a, 0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0xf1, 0x4d, 0x2d, 0x49, 0xf4, 0x48, 0x4d, 0x4c, 0x49, 0x2d, 0x12, 0x12, 0xe0, 0x62, 0x0e, 0x09, 0xf1, 0x91, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0d, 0x02, 0x31, 0x85, 0x44, 0xb8, 0x58, 0x5d, 0x0b, 0xf2, 0x93, 0x33, 0x24, 0x98, - 0x14, 0x18, 0x35, 0x58, 0x82, 0x20, 0x1c, 0x27, 0xbb, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, - 0x63, 0xbc, 0xf1, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x19, 0x8f, 0xe5, 0x18, 0xa2, 0x34, - 0x90, 0x5c, 0x90, 0x57, 0x5c, 0x90, 0x9c, 0xac, 0x9b, 0x92, 0x5a, 0xa6, 0x9f, 0x97, 0x9a, 0x9f, - 0x56, 0xac, 0x0b, 0xb1, 0x1f, 0xea, 0xd6, 0x24, 0x36, 0x30, 0xd7, 0x18, 0x10, 0x00, 0x00, 0xff, - 0xff, 0x73, 0x6f, 0x01, 0x49, 0xd1, 0x00, 0x00, 0x00, + 0x14, 0x18, 0x35, 0x58, 0x82, 0x20, 0x1c, 0x21, 0x09, 0x2e, 0xf6, 0xb0, 0xd4, 0xa2, 0xe2, 0xcc, + 0xfc, 0x3c, 0x09, 0x66, 0xb0, 0x5a, 0x18, 0xd7, 0xc9, 0xee, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, + 0xe4, 0x18, 0x6f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc6, 0x63, 0x39, 0x86, 0x28, + 0x0d, 0x24, 0xb7, 0xe5, 0x15, 0x17, 0x24, 0x27, 0xeb, 0xa6, 0xa4, 0x96, 0xe9, 0xe7, 0xa5, 0xe6, + 0xa7, 0x15, 0xeb, 0x42, 0x5c, 0x06, 0xf5, 0x45, 0x12, 0x1b, 0x98, 0x6b, 0x0c, 0x08, 0x00, 0x00, + 0xff, 0xff, 0x6b, 0x83, 0x1d, 0xcf, 0xeb, 0x00, 0x00, 0x00, } func (m *RequestMetaHeader) Marshal() (dAtA []byte, err error) { @@ -120,6 +135,11 @@ func (m *RequestMetaHeader) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.Version != 0 { + i = encodeVarintMeta(dAtA, i, uint64(m.Version)) + i-- + dAtA[i] = 0x18 + } if m.Epoch != 0 { i = encodeVarintMeta(dAtA, i, uint64(m.Epoch)) i-- @@ -156,6 +176,9 @@ func (m *RequestMetaHeader) Size() (n int) { if m.Epoch != 0 { n += 1 + sovMeta(uint64(m.Epoch)) } + if m.Version != 0 { + n += 1 + sovMeta(uint64(m.Version)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -235,6 +258,25 @@ func (m *RequestMetaHeader) Unmarshal(dAtA []byte) error { break } } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + m.Version = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMeta + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Version |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipMeta(dAtA[iNdEx:]) diff --git a/service/verify.pb.go b/service/verify.pb.go index 3c0f357..95a9452 100644 --- a/service/verify.pb.go +++ b/service/verify.pb.go @@ -23,7 +23,10 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request +// (should be embedded into message). type RequestVerificationHeader struct { + // Signatures is a set of signatures of every passed NeoFS Node Signatures []*RequestVerificationHeader_Signature `protobuf:"bytes,1,rep,name=Signatures,proto3" json:"Signatures,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -67,7 +70,9 @@ func (m *RequestVerificationHeader) GetSignatures() []*RequestVerificationHeader } type RequestVerificationHeader_Sign struct { - Sign []byte `protobuf:"bytes,1,opt,name=Sign,proto3" json:"Sign,omitempty"` + // Sign is signature of the request or session key. + Sign []byte `protobuf:"bytes,1,opt,name=Sign,proto3" json:"Sign,omitempty"` + // Peer is compressed public key used for signature. Peer []byte `protobuf:"bytes,2,opt,name=Peer,proto3" json:"Peer,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -118,11 +123,15 @@ func (m *RequestVerificationHeader_Sign) GetPeer() []byte { } type RequestVerificationHeader_Signature struct { + // Sign is a signature and public key of the request. RequestVerificationHeader_Sign `protobuf:"bytes,1,opt,name=Sign,proto3,embedded=Sign" json:"Sign"` - Origin *RequestVerificationHeader_Sign `protobuf:"bytes,2,opt,name=Origin,proto3" json:"Origin,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Origin used for requests, when trusted node changes it and re-sign with session key. + // If session key used for signature request, then Origin should contain + // public key of user and signed session key. + Origin *RequestVerificationHeader_Sign `protobuf:"bytes,2,opt,name=Origin,proto3" json:"Origin,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RequestVerificationHeader_Signature) Reset() { *m = RequestVerificationHeader_Signature{} } diff --git a/session/service.pb.go b/session/service.pb.go index eef5819..8532523 100644 --- a/session/service.pb.go +++ b/session/service.pb.go @@ -34,8 +34,10 @@ type CreateRequest struct { // Types that are valid to be assigned to Message: // *CreateRequest_Init // *CreateRequest_Signed - Message isCreateRequest_Message `protobuf_oneof:"Message"` - service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` + Message isCreateRequest_Message `protobuf_oneof:"Message"` + // RequestMetaHeader contains information about request meta headers (should be embedded into message) + service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) service.RequestVerificationHeader `protobuf:"bytes,99,opt,name=Verify,proto3,embedded=Verify" json:"Verify"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` diff --git a/state/service.pb.go b/state/service.pb.go index 8e66a2f..520c8ce 100644 --- a/state/service.pb.go +++ b/state/service.pb.go @@ -31,7 +31,9 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // NetmapRequest message to request current node netmap type NetmapRequest struct { - service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` + // RequestMetaHeader contains information about request meta headers (should be embedded into message) + service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) service.RequestVerificationHeader `protobuf:"bytes,99,opt,name=Verify,proto3,embedded=Verify" json:"Verify"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -69,7 +71,9 @@ var xxx_messageInfo_NetmapRequest proto.InternalMessageInfo // MetricsRequest message to request node metrics type MetricsRequest struct { - service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` + // RequestMetaHeader contains information about request meta headers (should be embedded into message) + service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) service.RequestVerificationHeader `protobuf:"bytes,99,opt,name=Verify,proto3,embedded=Verify" json:"Verify"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -153,7 +157,9 @@ func (m *MetricsResponse) GetMetrics() [][]byte { // HealthRequest message to check current state type HealthRequest struct { - service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` + // RequestMetaHeader contains information about request meta headers (should be embedded into message) + service.RequestMetaHeader `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"` + // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) service.RequestVerificationHeader `protobuf:"bytes,99,opt,name=Verify,proto3,embedded=Verify" json:"Verify"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"`