Merge pull request #46 from nspcc-dev/object-GetRange-stream

make object.GetRange to be server-side streaming RPC
This commit is contained in:
Evgeniy Kulikov 2020-02-05 14:10:10 +03:00 committed by GitHub
commit 2057710f22
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 143 additions and 120 deletions

View file

@ -64,7 +64,7 @@ rpc Put(stream PutRequest) returns (PutResponse);
rpc Delete(DeleteRequest) returns (DeleteResponse); rpc Delete(DeleteRequest) returns (DeleteResponse);
rpc Head(HeadRequest) returns (HeadResponse); rpc Head(HeadRequest) returns (HeadResponse);
rpc Search(SearchRequest) returns (stream SearchResponse); rpc Search(SearchRequest) returns (stream SearchResponse);
rpc GetRange(GetRangeRequest) returns (GetRangeResponse); rpc GetRange(GetRangeRequest) returns (stream GetRangeResponse);
rpc GetRangeHash(GetRangeHashRequest) returns (GetRangeHashResponse); rpc GetRangeHash(GetRangeHashRequest) returns (GetRangeHashResponse);
``` ```
@ -119,8 +119,9 @@ package).
| Search | [SearchRequest](#object.SearchRequest) | [SearchResponse](#object.SearchResponse) | | Search | [SearchRequest](#object.SearchRequest) | [SearchResponse](#object.SearchResponse) |
#### Method GetRange #### Method GetRange
GetRange of data payload. Ranges are set of pairs (offset, length). GetRange of data payload. Range is a pair (offset, length).
Fragments order in response corresponds to ranges order in request. Requested range can be restored by concatenation of all chunks
keeping receiving order.
| Name | Input | Output | | Name | Input | Output |
| ---- | ----- | ------ | | ---- | ----- | ------ |
@ -196,7 +197,7 @@ in distributed system.
| Field | Type | Label | Description | | Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- | | ----- | ---- | ----- | ----------- |
| Address | [refs.Address](#refs.Address) | | Address of object (container id + object id) | | Address | [refs.Address](#refs.Address) | | Address of object (container id + object id) |
| Ranges | [Range](#object.Range) | repeated | Ranges of object's payload to return | | Range | [Range](#object.Range) | | Range of object's payload to return |
| Meta | [service.RequestMetaHeader](#service.RequestMetaHeader) | | RequestMetaHeader contains information about request meta headers (should be embedded into message) | | 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) | | Verify | [service.RequestVerificationHeader](#service.RequestVerificationHeader) | | RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message) |

View file

@ -661,8 +661,8 @@ func (m *SearchResponse) GetAddresses() []refs.Address {
type GetRangeRequest struct { type GetRangeRequest struct {
// Address of object (container id + object id) // Address of object (container id + object id)
Address refs.Address `protobuf:"bytes,1,opt,name=Address,proto3" json:"Address"` Address refs.Address `protobuf:"bytes,1,opt,name=Address,proto3" json:"Address"`
// Ranges of object's payload to return // Range of object's payload to return
Ranges []Range `protobuf:"bytes,2,rep,name=Ranges,proto3" json:"Ranges"` Range Range `protobuf:"bytes,2,opt,name=Range,proto3" json:"Range"`
// RequestMetaHeader contains information about request meta headers (should be embedded into 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"` 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) // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message)
@ -708,11 +708,11 @@ func (m *GetRangeRequest) GetAddress() refs.Address {
return refs.Address{} return refs.Address{}
} }
func (m *GetRangeRequest) GetRanges() []Range { func (m *GetRangeRequest) GetRange() Range {
if m != nil { if m != nil {
return m.Ranges return m.Range
} }
return nil return Range{}
} }
type GetRangeResponse struct { type GetRangeResponse struct {
@ -883,60 +883,61 @@ func init() {
func init() { proto.RegisterFile("object/service.proto", fileDescriptor_dfcdf610ade6a9ce) } func init() { proto.RegisterFile("object/service.proto", fileDescriptor_dfcdf610ade6a9ce) }
var fileDescriptor_dfcdf610ade6a9ce = []byte{ var fileDescriptor_dfcdf610ade6a9ce = []byte{
// 846 bytes of a gzipped FileDescriptorProto // 859 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0x4d, 0x4f, 0x33, 0x55, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcd, 0x6e, 0xeb, 0x44,
0x14, 0xee, 0xed, 0x94, 0x01, 0x4e, 0xa7, 0xbc, 0xcd, 0xa5, 0xbe, 0x36, 0x23, 0x29, 0x64, 0x82, 0x14, 0xce, 0xc4, 0x89, 0xdb, 0x9e, 0x38, 0xbd, 0xd1, 0x34, 0x5c, 0x22, 0x53, 0xa5, 0x95, 0x75,
0xa6, 0xc6, 0x74, 0x5a, 0x31, 0x41, 0x8c, 0xb8, 0xb0, 0x6d, 0xa0, 0x2c, 0x0c, 0x78, 0x21, 0x24, 0x41, 0x41, 0x28, 0x4e, 0xb8, 0x48, 0xa5, 0x88, 0x4a, 0x88, 0x24, 0x6a, 0xd3, 0x05, 0x6a, 0x99,
0xba, 0x9b, 0x4e, 0x6f, 0xdb, 0x91, 0x32, 0x53, 0xe7, 0x03, 0xc2, 0x0f, 0x70, 0xed, 0xd6, 0x95, 0x56, 0x95, 0x60, 0xe7, 0x38, 0x93, 0xc4, 0x34, 0xb5, 0x83, 0x7f, 0x5a, 0xf5, 0x01, 0x58, 0xb3,
0xbf, 0xc4, 0x1f, 0xc0, 0xc6, 0x84, 0xa5, 0x71, 0x41, 0x4c, 0x5d, 0xbb, 0x37, 0x71, 0x63, 0xee, 0x65, 0xc9, 0x83, 0xf0, 0x00, 0xdd, 0x20, 0x75, 0x89, 0x58, 0x54, 0x28, 0x2c, 0x79, 0x01, 0x24,
0xc7, 0x74, 0x66, 0x40, 0x50, 0x59, 0x58, 0x57, 0x3d, 0xf7, 0x39, 0x5f, 0x3d, 0xcf, 0x3c, 0xe7, 0x36, 0x68, 0x7e, 0x1c, 0xdb, 0x2d, 0x2d, 0xd0, 0x4d, 0xee, 0x2a, 0x33, 0xdf, 0xf9, 0xce, 0x99,
0xce, 0x40, 0xc5, 0xeb, 0x7f, 0x45, 0xed, 0xb0, 0x19, 0x50, 0xff, 0xca, 0xb1, 0xa9, 0x39, 0xf5, 0x9c, 0xcf, 0xdf, 0x19, 0x1b, 0xaa, 0xde, 0xe0, 0x1b, 0x6a, 0x87, 0xad, 0x80, 0xfa, 0x97, 0x8e,
0xbd, 0xd0, 0xc3, 0xaa, 0x40, 0xf5, 0xb2, 0x4f, 0x87, 0x41, 0x33, 0xbc, 0x99, 0xd2, 0x40, 0x78, 0x4d, 0xcd, 0x99, 0xef, 0x85, 0x1e, 0x56, 0x05, 0xaa, 0x57, 0x7c, 0x3a, 0x0a, 0x5a, 0xe1, 0xf5,
0x74, 0x2c, 0xe3, 0xd3, 0xd8, 0x7a, 0x40, 0x83, 0xc0, 0xf1, 0xdc, 0x6c, 0xa0, 0xac, 0xd8, 0xbc, 0x8c, 0x06, 0x22, 0xa2, 0x63, 0xc9, 0x4f, 0x63, 0x1b, 0x01, 0x0d, 0x02, 0xc7, 0x73, 0xb3, 0x44,
0xa4, 0xa1, 0x25, 0xb1, 0x4a, 0x8c, 0x5d, 0x51, 0xdf, 0x19, 0xde, 0x48, 0xb4, 0x31, 0x72, 0xc2, 0x59, 0xb1, 0x75, 0x41, 0x43, 0x4b, 0x62, 0xd5, 0x18, 0xbb, 0xa4, 0xbe, 0x33, 0xba, 0x96, 0x68,
0x71, 0xd4, 0x37, 0x6d, 0xef, 0xb2, 0x39, 0xf2, 0x46, 0x5e, 0x93, 0xc3, 0xfd, 0x68, 0xc8, 0x4f, 0x73, 0xec, 0x84, 0x93, 0x68, 0x60, 0xda, 0xde, 0x45, 0x6b, 0xec, 0x8d, 0xbd, 0x16, 0x87, 0x07,
0xfc, 0xc0, 0x2d, 0x11, 0x6e, 0xfc, 0x88, 0x00, 0x0e, 0x69, 0x48, 0xe8, 0xd7, 0x11, 0x0d, 0x42, 0xd1, 0x88, 0xef, 0xf8, 0x86, 0xaf, 0x04, 0xdd, 0xf8, 0x19, 0x01, 0x1c, 0xd0, 0x90, 0xd0, 0x6f,
0xdc, 0x80, 0xe5, 0x4f, 0x07, 0x03, 0x9f, 0x06, 0x41, 0x15, 0x6d, 0xa1, 0x7a, 0x71, 0xa7, 0x64, 0x23, 0x1a, 0x84, 0xb8, 0x09, 0x2b, 0x9f, 0x0f, 0x87, 0x3e, 0x0d, 0x82, 0x1a, 0xda, 0x46, 0x8d,
0xb2, 0x3f, 0x6d, 0x4a, 0xb0, 0x5d, 0xb8, 0xbd, 0xdf, 0xcc, 0x91, 0x38, 0x06, 0x97, 0x41, 0x21, 0xd2, 0xeb, 0xb2, 0xc9, 0xfe, 0xb4, 0x29, 0xc1, 0x4e, 0xe1, 0xe6, 0x6e, 0x2b, 0x47, 0x62, 0x0e,
0xd6, 0x75, 0x35, 0xbf, 0x85, 0xea, 0x2b, 0x84, 0x99, 0x78, 0x0f, 0x0a, 0x9f, 0xd1, 0xd0, 0xaa, 0xae, 0x80, 0x42, 0xac, 0xab, 0x5a, 0x7e, 0x1b, 0x35, 0x56, 0x09, 0x5b, 0xe2, 0x5d, 0x28, 0x7c,
0xf6, 0x79, 0xb6, 0x6e, 0xc6, 0x4c, 0xc8, 0x06, 0xcc, 0xd7, 0xa3, 0xd6, 0x80, 0xfa, 0xed, 0x15, 0x41, 0x43, 0xab, 0x36, 0xe0, 0xd9, 0xba, 0x19, 0x2b, 0x21, 0x0f, 0x60, 0xb1, 0x3e, 0xb5, 0x86,
0x56, 0xea, 0xee, 0x7e, 0x13, 0x11, 0x9e, 0x81, 0xbb, 0xa0, 0x9e, 0xf3, 0x41, 0xaa, 0x36, 0xcf, 0xd4, 0xef, 0xac, 0xb2, 0x52, 0xb7, 0x77, 0x5b, 0x88, 0xf0, 0x0c, 0xdc, 0x03, 0xf5, 0x8c, 0x37,
0x35, 0x1e, 0xe6, 0x72, 0xaf, 0x63, 0x5b, 0xa1, 0xe3, 0xb9, 0x8f, 0x6a, 0xc8, 0x5c, 0xe3, 0x0c, 0x52, 0xb3, 0x79, 0xae, 0x71, 0x3f, 0x97, 0x47, 0x1d, 0xdb, 0x0a, 0x1d, 0xcf, 0x7d, 0x50, 0x43,
0x8a, 0x7c, 0x9c, 0x60, 0xea, 0xb9, 0x01, 0xc5, 0x75, 0x90, 0xe4, 0xcb, 0x71, 0xd6, 0x4c, 0x71, 0xe6, 0x1a, 0xa7, 0x50, 0xe2, 0xed, 0x04, 0x33, 0xcf, 0x0d, 0x28, 0x6e, 0x80, 0x14, 0x5f, 0xb6,
0x34, 0x8f, 0xf9, 0x4f, 0x2f, 0x47, 0xa4, 0x1f, 0xbf, 0x86, 0xa5, 0xce, 0x38, 0x72, 0x2f, 0xf8, 0xb3, 0x6e, 0x8a, 0xad, 0x79, 0xc4, 0x7f, 0xfa, 0x39, 0x22, 0xe3, 0xf8, 0x25, 0x14, 0xbb, 0x93,
0x30, 0x5a, 0x2f, 0x47, 0xc4, 0xb1, 0xad, 0x00, 0x22, 0xc6, 0x0f, 0x79, 0x80, 0x93, 0x68, 0xce, 0xc8, 0x3d, 0xe7, 0xcd, 0x68, 0xfd, 0x1c, 0x11, 0xdb, 0x8e, 0x02, 0x88, 0x18, 0x3f, 0xe5, 0x01,
0xd2, 0x2e, 0xa8, 0xe2, 0x0f, 0xc8, 0xaa, 0x1b, 0x71, 0xd5, 0x24, 0x86, 0x99, 0x22, 0x86, 0xf5, 0x8e, 0xa3, 0x85, 0x4a, 0x3b, 0xa0, 0x8a, 0x3f, 0x20, 0xab, 0x6e, 0xc6, 0x55, 0x13, 0x0e, 0x5b,
0x10, 0xd6, 0x53, 0x3d, 0x16, 0x4d, 0x9a, 0xfe, 0x05, 0xac, 0xce, 0xff, 0x2e, 0x7e, 0x07, 0xd4, 0x0a, 0x0e, 0x3b, 0x43, 0xac, 0x1e, 0x3b, 0x63, 0xd9, 0xa2, 0xe9, 0x5f, 0xc1, 0xda, 0xe2, 0xef,
0xe3, 0x67, 0x28, 0x23, 0xd2, 0x8b, 0xb7, 0x61, 0xe9, 0xcc, 0xbb, 0xa0, 0x2e, 0x1f, 0x86, 0x85, 0xe2, 0xf7, 0x40, 0x3d, 0x7a, 0x42, 0x32, 0x22, 0xa3, 0xf8, 0x15, 0x14, 0x4f, 0xbd, 0x73, 0xea,
0x49, 0xdd, 0x9a, 0x1c, 0x25, 0xc2, 0x29, 0xe8, 0xdb, 0x87, 0x22, 0x67, 0x46, 0x3e, 0x94, 0x7f, 0xf2, 0x66, 0x18, 0x4d, 0xfa, 0xd6, 0xe4, 0x28, 0x11, 0x41, 0x21, 0xdf, 0x1e, 0x94, 0xb8, 0x32,
0x27, 0x32, 0xe3, 0xdb, 0x3c, 0x94, 0xba, 0x74, 0x42, 0x43, 0xfa, 0x42, 0x95, 0xbe, 0x0b, 0xcb, 0xf2, 0xa1, 0xfc, 0x3f, 0x93, 0x19, 0xdf, 0xe7, 0xa1, 0xdc, 0xa3, 0x53, 0x1a, 0xd2, 0x67, 0xba,
0xc7, 0xd7, 0x2e, 0xf5, 0x8f, 0xba, 0x82, 0xf8, 0xf6, 0x2b, 0xe6, 0xff, 0xf9, 0x7e, 0x33, 0x86, 0xf4, 0x7d, 0x58, 0x39, 0xba, 0x72, 0xa9, 0x7f, 0xd8, 0x13, 0xc2, 0x77, 0x5e, 0xb0, 0xf8, 0xaf,
0x49, 0x6c, 0x24, 0x43, 0x29, 0xcf, 0x0c, 0xb5, 0x70, 0x91, 0x97, 0x61, 0x2d, 0x26, 0x44, 0x50, 0x77, 0x5b, 0x31, 0x4c, 0xe2, 0x45, 0xd2, 0x94, 0xf2, 0x44, 0x53, 0x4b, 0x37, 0x79, 0x05, 0xd6,
0x6a, 0xfc, 0x81, 0xa0, 0xc8, 0xc2, 0x63, 0x86, 0xf6, 0xfe, 0x86, 0xa1, 0x39, 0x03, 0x12, 0x48, 0x63, 0x41, 0x84, 0xa4, 0xc6, 0x5f, 0x08, 0x4a, 0x8c, 0x1e, 0x2b, 0xb4, 0xfb, 0x2f, 0x0a, 0x2d,
0xc8, 0xda, 0x82, 0xe2, 0x41, 0x34, 0x99, 0x88, 0xde, 0x81, 0x5c, 0xed, 0x34, 0x14, 0x2f, 0xbd, 0x14, 0x90, 0x40, 0x22, 0xd6, 0x36, 0x94, 0xf6, 0xa3, 0xe9, 0x54, 0x9c, 0x1d, 0xc8, 0xd1, 0x4e,
0xf2, 0xff, 0x59, 0xfa, 0x5d, 0xd0, 0xc4, 0xf0, 0x52, 0x60, 0xff, 0x50, 0xc2, 0xc6, 0xef, 0x08, 0x43, 0xf1, 0xd0, 0x2b, 0x6f, 0xce, 0xd0, 0xef, 0x80, 0x26, 0x9a, 0x97, 0x06, 0xfb, 0x8f, 0x16,
0x4a, 0xa7, 0xd4, 0xf2, 0xed, 0x71, 0xa2, 0xac, 0x62, 0xc7, 0x73, 0x43, 0xcb, 0x11, 0x72, 0x41, 0x36, 0xfe, 0x44, 0x50, 0x3e, 0xa1, 0x96, 0x6f, 0x4f, 0x12, 0x67, 0x95, 0xba, 0x9e, 0x1b, 0x5a,
0x5c, 0x2e, 0x45, 0x49, 0x96, 0xd2, 0x39, 0xea, 0x92, 0xb4, 0x1f, 0x57, 0x60, 0xe9, 0xf3, 0x88, 0x8e, 0xb0, 0x0b, 0xe2, 0x76, 0x29, 0x49, 0xb1, 0x94, 0xee, 0x61, 0x8f, 0xa4, 0xe3, 0xb8, 0x0a,
0xfa, 0x37, 0x42, 0x57, 0x44, 0x1c, 0xb0, 0x01, 0x1a, 0x37, 0xce, 0xa9, 0xcf, 0xb4, 0xc3, 0x99, 0xc5, 0x2f, 0x23, 0xea, 0x5f, 0x0b, 0x5f, 0x11, 0xb1, 0xc1, 0x06, 0x68, 0x7c, 0x71, 0x46, 0x7d,
0x2a, 0x91, 0x0c, 0xb6, 0x70, 0xca, 0x3a, 0xb0, 0x16, 0x4f, 0x2e, 0x49, 0x7b, 0x1f, 0x56, 0xa5, 0xe6, 0x1d, 0xae, 0x54, 0x99, 0x64, 0xb0, 0xa5, 0x4b, 0xd6, 0x85, 0xf5, 0xb8, 0x73, 0x29, 0xda,
0x06, 0x28, 0x13, 0x8d, 0xf2, 0xd4, 0x5a, 0x25, 0x51, 0xc6, 0x6f, 0x08, 0x5e, 0xb1, 0xdb, 0xd6, 0x87, 0xb0, 0x26, 0x3d, 0x40, 0x99, 0x69, 0x94, 0xc7, 0xc6, 0x2a, 0x61, 0x19, 0x7f, 0x20, 0x78,
0x72, 0x47, 0x2f, 0xdd, 0xcd, 0xf7, 0x40, 0xe5, 0xe9, 0x4c, 0x69, 0xa2, 0xa5, 0x7c, 0x54, 0x1c, 0xc1, 0x6e, 0x5b, 0xcb, 0x1d, 0x3f, 0x7f, 0x36, 0x8b, 0x3c, 0x5d, 0xde, 0x22, 0xe5, 0xf8, 0x49,
0x95, 0xd1, 0x32, 0x64, 0xe1, 0xa4, 0xb5, 0xa0, 0x9c, 0x8c, 0x2b, 0x69, 0xdb, 0x80, 0xd5, 0x03, 0x71, 0x50, 0x92, 0x05, 0x63, 0xe9, 0x92, 0xb5, 0xa1, 0x92, 0x34, 0x2b, 0x45, 0xdb, 0x84, 0xb5,
0xdf, 0x1a, 0x5d, 0x52, 0x37, 0x14, 0xb4, 0x69, 0x24, 0x01, 0x8c, 0x6f, 0xf2, 0xb0, 0x1e, 0xa7, 0x7d, 0xdf, 0x1a, 0x5f, 0x50, 0x37, 0x14, 0xa2, 0x69, 0x24, 0x01, 0x8c, 0xef, 0xf2, 0xb0, 0x11,
0xf4, 0xac, 0x60, 0xfc, 0x5f, 0xb0, 0x84, 0xa1, 0x70, 0x6a, 0x4d, 0x42, 0x2e, 0x3b, 0x8d, 0x70, 0xa7, 0xf4, 0xad, 0x60, 0xf2, 0x4c, 0x8d, 0x3e, 0x00, 0x95, 0x97, 0x60, 0xd3, 0xa8, 0x3c, 0x26,
0x7b, 0xe1, 0xcc, 0xed, 0x43, 0x25, 0x4b, 0x83, 0x64, 0x6f, 0x1b, 0x54, 0x76, 0x96, 0x8a, 0xd3, 0x92, 0xa4, 0x60, 0x0c, 0x85, 0x13, 0x6b, 0x1a, 0x72, 0xd3, 0x69, 0x84, 0xaf, 0x97, 0xae, 0xdc,
0xda, 0x9a, 0x5c, 0xb5, 0x02, 0x8f, 0x92, 0xbe, 0x9d, 0xef, 0x15, 0x58, 0x3e, 0x15, 0x5d, 0x71, 0x1e, 0x54, 0xb3, 0x32, 0x48, 0xf5, 0x5e, 0x81, 0xca, 0xf6, 0xd2, 0x6f, 0x5a, 0x47, 0x93, 0x83,
0x0b, 0x94, 0x43, 0x1a, 0x62, 0x1c, 0x33, 0x90, 0x7c, 0xbc, 0xe8, 0xeb, 0x19, 0x4c, 0x74, 0x68, 0x56, 0xe0, 0x2c, 0x19, 0x7b, 0xfd, 0xa3, 0x02, 0x2b, 0x27, 0xe2, 0x54, 0xdc, 0x06, 0xe5, 0x80,
0x21, 0x96, 0x71, 0x12, 0xa5, 0x32, 0x92, 0x97, 0x74, 0x92, 0x91, 0x7a, 0x3d, 0xd5, 0x11, 0xfe, 0x86, 0x18, 0xc7, 0x0a, 0x24, 0x9f, 0x2e, 0xfa, 0x46, 0x06, 0x13, 0x27, 0xb4, 0x11, 0xcb, 0x38,
0x10, 0x54, 0x71, 0xbf, 0xe2, 0x37, 0xe2, 0x80, 0xcc, 0x0b, 0x48, 0x7f, 0xfd, 0x10, 0x9e, 0xef, 0x8e, 0x52, 0x19, 0xc9, 0x2b, 0x3a, 0xc9, 0x48, 0xbd, 0x9c, 0x1a, 0x08, 0x7f, 0x0c, 0xaa, 0xb8,
0x50, 0x81, 0x51, 0x80, 0xe7, 0x75, 0x53, 0x77, 0xb2, 0x5e, 0xc9, 0x82, 0x32, 0xe5, 0x23, 0x50, 0x5d, 0xf1, 0x5b, 0x31, 0x21, 0xf3, 0xfa, 0xd1, 0x5f, 0xde, 0x87, 0x17, 0x13, 0x54, 0x60, 0x12,
0xc5, 0x22, 0x26, 0xbd, 0x32, 0x57, 0x52, 0xd2, 0x2b, 0xbb, 0xaf, 0x2d, 0x84, 0x3f, 0x81, 0x95, 0xe0, 0x45, 0xdd, 0xd4, 0x8d, 0xac, 0x57, 0xb3, 0xa0, 0x4c, 0xf9, 0x04, 0x54, 0x31, 0x86, 0xc9,
0x98, 0x54, 0xfc, 0x66, 0x7a, 0xf6, 0xd4, 0x3e, 0xea, 0xd5, 0xc7, 0x0e, 0xd9, 0xf9, 0x08, 0xb4, 0x59, 0x99, 0x0b, 0x29, 0x39, 0x2b, 0x3b, 0xad, 0x6d, 0x84, 0x3f, 0x83, 0xd5, 0x58, 0x54, 0xfc,
0xf4, 0x33, 0xc1, 0x6f, 0x3d, 0x8c, 0x4c, 0x09, 0x56, 0xdf, 0xf8, 0x6b, 0xa7, 0x28, 0xd5, 0xfe, 0x76, 0xba, 0xf7, 0xd4, 0x34, 0xea, 0xb5, 0x87, 0x81, 0x45, 0x81, 0x43, 0xd0, 0xd2, 0x4f, 0x05,
0xf8, 0x76, 0x56, 0x43, 0x77, 0xb3, 0x1a, 0xfa, 0x69, 0x56, 0x43, 0xbf, 0xcc, 0x6a, 0xe8, 0xbb, 0xbf, 0x73, 0x9f, 0x9b, 0xb2, 0xac, 0xbe, 0xf9, 0xcf, 0x41, 0x51, 0xac, 0xf3, 0xe9, 0xcd, 0xbc,
0x5f, 0x6b, 0xb9, 0x2f, 0xdf, 0x4e, 0x7d, 0x8a, 0xba, 0xc1, 0xd4, 0xb6, 0x1b, 0x03, 0x7a, 0xd5, 0x8e, 0x6e, 0xe7, 0x75, 0xf4, 0xcb, 0xbc, 0x8e, 0x7e, 0x9b, 0xd7, 0xd1, 0x0f, 0xbf, 0xd7, 0x73,
0x74, 0xa9, 0x37, 0x0c, 0x1a, 0xd6, 0xd4, 0x69, 0x8a, 0x8a, 0x7d, 0x95, 0x7f, 0x89, 0x7e, 0xf0, 0x5f, 0xbf, 0x9b, 0xfa, 0x14, 0x75, 0x83, 0x99, 0x6d, 0x37, 0x87, 0xf4, 0xb2, 0xe5, 0x52, 0x6f,
0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xee, 0x6d, 0x9e, 0x41, 0x3d, 0x0b, 0x00, 0x00, 0x14, 0x34, 0xad, 0x99, 0xd3, 0x12, 0x15, 0x07, 0x2a, 0xff, 0x12, 0xfd, 0xe8, 0xef, 0x00, 0x00,
0x00, 0xff, 0xff, 0x46, 0xff, 0x20, 0xe9, 0x3d, 0x0b, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -974,9 +975,10 @@ type ServiceClient interface {
// set to 1. Search query represented in serialized format (see query // set to 1. Search query represented in serialized format (see query
// package). // package).
Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (Service_SearchClient, error) Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (Service_SearchClient, error)
// GetRange of data payload. Ranges are set of pairs (offset, length). // GetRange of data payload. Range is a pair (offset, length).
// Fragments order in response corresponds to ranges order in request. // Requested range can be restored by concatenation of all chunks
GetRange(ctx context.Context, in *GetRangeRequest, opts ...grpc.CallOption) (*GetRangeResponse, error) // keeping receiving order.
GetRange(ctx context.Context, in *GetRangeRequest, opts ...grpc.CallOption) (Service_GetRangeClient, error)
// GetRangeHash returns homomorphic hash of object payload range after XOR // GetRangeHash returns homomorphic hash of object payload range after XOR
// operation. Ranges are set of pairs (offset, length). Hashes order in // operation. Ranges are set of pairs (offset, length). Hashes order in
// response corresponds to ranges order in request. Homomorphic hash is // response corresponds to ranges order in request. Homomorphic hash is
@ -1108,13 +1110,36 @@ func (x *serviceSearchClient) Recv() (*SearchResponse, error) {
return m, nil return m, nil
} }
func (c *serviceClient) GetRange(ctx context.Context, in *GetRangeRequest, opts ...grpc.CallOption) (*GetRangeResponse, error) { func (c *serviceClient) GetRange(ctx context.Context, in *GetRangeRequest, opts ...grpc.CallOption) (Service_GetRangeClient, error) {
out := new(GetRangeResponse) stream, err := c.cc.NewStream(ctx, &_Service_serviceDesc.Streams[3], "/object.Service/GetRange", opts...)
err := c.cc.Invoke(ctx, "/object.Service/GetRange", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return out, nil x := &serviceGetRangeClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type Service_GetRangeClient interface {
Recv() (*GetRangeResponse, error)
grpc.ClientStream
}
type serviceGetRangeClient struct {
grpc.ClientStream
}
func (x *serviceGetRangeClient) Recv() (*GetRangeResponse, error) {
m := new(GetRangeResponse)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
} }
func (c *serviceClient) GetRangeHash(ctx context.Context, in *GetRangeHashRequest, opts ...grpc.CallOption) (*GetRangeHashResponse, error) { func (c *serviceClient) GetRangeHash(ctx context.Context, in *GetRangeHashRequest, opts ...grpc.CallOption) (*GetRangeHashResponse, error) {
@ -1151,9 +1176,10 @@ type ServiceServer interface {
// set to 1. Search query represented in serialized format (see query // set to 1. Search query represented in serialized format (see query
// package). // package).
Search(*SearchRequest, Service_SearchServer) error Search(*SearchRequest, Service_SearchServer) error
// GetRange of data payload. Ranges are set of pairs (offset, length). // GetRange of data payload. Range is a pair (offset, length).
// Fragments order in response corresponds to ranges order in request. // Requested range can be restored by concatenation of all chunks
GetRange(context.Context, *GetRangeRequest) (*GetRangeResponse, error) // keeping receiving order.
GetRange(*GetRangeRequest, Service_GetRangeServer) error
// GetRangeHash returns homomorphic hash of object payload range after XOR // GetRangeHash returns homomorphic hash of object payload range after XOR
// operation. Ranges are set of pairs (offset, length). Hashes order in // operation. Ranges are set of pairs (offset, length). Hashes order in
// response corresponds to ranges order in request. Homomorphic hash is // response corresponds to ranges order in request. Homomorphic hash is
@ -1180,8 +1206,8 @@ func (*UnimplementedServiceServer) Head(ctx context.Context, req *HeadRequest) (
func (*UnimplementedServiceServer) Search(req *SearchRequest, srv Service_SearchServer) error { func (*UnimplementedServiceServer) Search(req *SearchRequest, srv Service_SearchServer) error {
return status.Errorf(codes.Unimplemented, "method Search not implemented") return status.Errorf(codes.Unimplemented, "method Search not implemented")
} }
func (*UnimplementedServiceServer) GetRange(ctx context.Context, req *GetRangeRequest) (*GetRangeResponse, error) { func (*UnimplementedServiceServer) GetRange(req *GetRangeRequest, srv Service_GetRangeServer) error {
return nil, status.Errorf(codes.Unimplemented, "method GetRange not implemented") return status.Errorf(codes.Unimplemented, "method GetRange not implemented")
} }
func (*UnimplementedServiceServer) GetRangeHash(ctx context.Context, req *GetRangeHashRequest) (*GetRangeHashResponse, error) { func (*UnimplementedServiceServer) GetRangeHash(ctx context.Context, req *GetRangeHashRequest) (*GetRangeHashResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetRangeHash not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetRangeHash not implemented")
@ -1295,22 +1321,25 @@ func (x *serviceSearchServer) Send(m *SearchResponse) error {
return x.ServerStream.SendMsg(m) return x.ServerStream.SendMsg(m)
} }
func _Service_GetRange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Service_GetRange_Handler(srv interface{}, stream grpc.ServerStream) error {
in := new(GetRangeRequest) m := new(GetRangeRequest)
if err := dec(in); err != nil { if err := stream.RecvMsg(m); err != nil {
return nil, err return err
} }
if interceptor == nil { return srv.(ServiceServer).GetRange(m, &serviceGetRangeServer{stream})
return srv.(ServiceServer).GetRange(ctx, in) }
}
info := &grpc.UnaryServerInfo{ type Service_GetRangeServer interface {
Server: srv, Send(*GetRangeResponse) error
FullMethod: "/object.Service/GetRange", grpc.ServerStream
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ServiceServer).GetRange(ctx, req.(*GetRangeRequest)) type serviceGetRangeServer struct {
} grpc.ServerStream
return interceptor(ctx, in, info, handler) }
func (x *serviceGetRangeServer) Send(m *GetRangeResponse) error {
return x.ServerStream.SendMsg(m)
} }
func _Service_GetRangeHash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Service_GetRangeHash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
@ -1343,10 +1372,6 @@ var _Service_serviceDesc = grpc.ServiceDesc{
MethodName: "Head", MethodName: "Head",
Handler: _Service_Head_Handler, Handler: _Service_Head_Handler,
}, },
{
MethodName: "GetRange",
Handler: _Service_GetRange_Handler,
},
{ {
MethodName: "GetRangeHash", MethodName: "GetRangeHash",
Handler: _Service_GetRangeHash_Handler, Handler: _Service_GetRangeHash_Handler,
@ -1368,6 +1393,11 @@ var _Service_serviceDesc = grpc.ServiceDesc{
Handler: _Service_Search_Handler, Handler: _Service_Search_Handler,
ServerStreams: true, ServerStreams: true,
}, },
{
StreamName: "GetRange",
Handler: _Service_GetRange_Handler,
ServerStreams: true,
},
}, },
Metadata: "object/service.proto", Metadata: "object/service.proto",
} }
@ -2093,20 +2123,16 @@ func (m *GetRangeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
dAtA[i] = 0x6 dAtA[i] = 0x6
i-- i--
dAtA[i] = 0x92 dAtA[i] = 0x92
if len(m.Ranges) > 0 { {
for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { size, err := m.Range.MarshalToSizedBuffer(dAtA[:i])
{ if err != nil {
size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) return 0, err
if err != nil {
return 0, err
}
i -= size
i = encodeVarintService(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x12
} }
i -= size
i = encodeVarintService(dAtA, i, uint64(size))
} }
i--
dAtA[i] = 0x12
{ {
size, err := m.Address.MarshalToSizedBuffer(dAtA[:i]) size, err := m.Address.MarshalToSizedBuffer(dAtA[:i])
if err != nil { if err != nil {
@ -2554,12 +2580,8 @@ func (m *GetRangeRequest) Size() (n int) {
_ = l _ = l
l = m.Address.Size() l = m.Address.Size()
n += 1 + l + sovService(uint64(l)) n += 1 + l + sovService(uint64(l))
if len(m.Ranges) > 0 { l = m.Range.Size()
for _, e := range m.Ranges { n += 1 + l + sovService(uint64(l))
l = e.Size()
n += 1 + l + sovService(uint64(l))
}
}
l = m.RequestMetaHeader.Size() l = m.RequestMetaHeader.Size()
n += 2 + l + sovService(uint64(l)) n += 2 + l + sovService(uint64(l))
l = m.RequestVerificationHeader.Size() l = m.RequestVerificationHeader.Size()
@ -4253,7 +4275,7 @@ func (m *GetRangeRequest) Unmarshal(dAtA []byte) error {
iNdEx = postIndex iNdEx = postIndex
case 2: case 2:
if wireType != 2 { if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType)
} }
var msglen int var msglen int
for shift := uint(0); ; shift += 7 { for shift := uint(0); ; shift += 7 {
@ -4280,8 +4302,7 @@ func (m *GetRangeRequest) Unmarshal(dAtA []byte) error {
if postIndex > l { if postIndex > l {
return io.ErrUnexpectedEOF return io.ErrUnexpectedEOF
} }
m.Ranges = append(m.Ranges, Range{}) if err := m.Range.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err return err
} }
iNdEx = postIndex iNdEx = postIndex

View file

@ -42,9 +42,10 @@ service Service {
// package). // package).
rpc Search(SearchRequest) returns (stream SearchResponse); rpc Search(SearchRequest) returns (stream SearchResponse);
// GetRange of data payload. Ranges are set of pairs (offset, length). // GetRange of data payload. Range is a pair (offset, length).
// Fragments order in response corresponds to ranges order in request. // Requested range can be restored by concatenation of all chunks
rpc GetRange(GetRangeRequest) returns (GetRangeResponse); // keeping receiving order.
rpc GetRange(GetRangeRequest) returns (stream GetRangeResponse);
// GetRangeHash returns homomorphic hash of object payload range after XOR // GetRangeHash returns homomorphic hash of object payload range after XOR
// operation. Ranges are set of pairs (offset, length). Hashes order in // operation. Ranges are set of pairs (offset, length). Hashes order in
@ -153,8 +154,8 @@ message SearchResponse {
message GetRangeRequest { message GetRangeRequest {
// Address of object (container id + object id) // Address of object (container id + object id)
refs.Address Address = 1 [(gogoproto.nullable) = false]; refs.Address Address = 1 [(gogoproto.nullable) = false];
// Ranges of object's payload to return // Range of object's payload to return
repeated Range Ranges = 2 [(gogoproto.nullable) = false]; Range Range = 2 [(gogoproto.nullable) = false];
// RequestMetaHeader contains information about request meta headers (should be embedded into message) // RequestMetaHeader contains information about request meta headers (should be embedded into message)
service.RequestMetaHeader Meta = 98 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; 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) // RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message)