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

View file

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