[#225] v2/object: Support more SplitInfo structures

- SplitInfo structure in object.HeadResponse
- SplitInfo structure in object.GetRangeResponse
- Raw flag in object.GetRangeRequest

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2020-12-07 18:59:01 +03:00 committed by Alex Vanin
parent 42cd897b25
commit ded06674ac
4 changed files with 223 additions and 28 deletions

View file

@ -76,6 +76,7 @@ const (
headRespBodyHeaderField = 1
headRespBodyShortHeaderField = 2
headRespBodySplitInfoField = 3
searchFilterMatchField = 1
searchFilterNameField = 2
@ -92,8 +93,10 @@ const (
getRangeReqBodyAddressField = 1
getRangeReqBodyRangeField = 2
getRangeReqBodyRawField = 3
getRangeRespChunkField = 1
getRangeRespChunkField = 1
getRangeRespSplitInfoField = 2
getRangeHashReqBodyAddressField = 1
getRangeHashReqBodyRangesField = 2
@ -1030,6 +1033,13 @@ func (r *HeadResponseBody) StableMarshal(buf []byte) ([]byte, error) {
return nil, err
}
}
case *SplitInfo:
if v != nil {
_, err := proto.NestedStructureMarshal(headRespBodySplitInfoField, buf, v)
if err != nil {
return nil, err
}
}
default:
panic("unknown one of object put request body type")
}
@ -1053,6 +1063,10 @@ func (r *HeadResponseBody) StableSize() (size int) {
if v != nil {
size += proto.NestedStructureSize(headRespBodyShortHeaderField, v)
}
case *SplitInfo:
if v != nil {
size += proto.NestedStructureSize(headRespBodySplitInfoField, v)
}
default:
panic("unknown one of object put request body type")
}
@ -1263,7 +1277,14 @@ func (r *GetRangeRequestBody) StableMarshal(buf []byte) ([]byte, error) {
offset += n
_, err = proto.NestedStructureMarshal(getRangeReqBodyRangeField, buf[offset:], r.rng)
n, err = proto.NestedStructureMarshal(getRangeReqBodyRangeField, buf[offset:], r.rng)
if err != nil {
return nil, err
}
offset += n
_, err = proto.BoolMarshal(getRangeReqBodyRawField, buf[offset:], r.raw)
if err != nil {
return nil, err
}
@ -1278,6 +1299,7 @@ func (r *GetRangeRequestBody) StableSize() (size int) {
size += proto.NestedStructureSize(getRangeReqBodyAddressField, r.addr)
size += proto.NestedStructureSize(getRangeReqBodyRangeField, r.rng)
size += proto.BoolSize(getRangeReqBodyRawField, r.raw)
return size
}
@ -1291,9 +1313,25 @@ func (r *GetRangeResponseBody) StableMarshal(buf []byte) ([]byte, error) {
buf = make([]byte, r.StableSize())
}
_, err := proto.BytesMarshal(getRangeRespChunkField, buf, r.chunk)
if err != nil {
return nil, err
if r.rngPart != nil {
switch v := r.rngPart.(type) {
case *GetRangePartChunk:
if v != nil {
_, err := proto.BytesMarshal(getRangeRespChunkField, buf, v.chunk)
if err != nil {
return nil, err
}
}
case *SplitInfo:
if v != nil {
_, err := proto.NestedStructureMarshal(getRangeRespSplitInfoField, buf, v)
if err != nil {
return nil, err
}
}
default:
panic("unknown one of object get range request body type")
}
}
return buf, nil
@ -1304,7 +1342,20 @@ func (r *GetRangeResponseBody) StableSize() (size int) {
return 0
}
size += proto.BytesSize(getRangeRespChunkField, r.chunk)
if r.rngPart != nil {
switch v := r.rngPart.(type) {
case *GetRangePartChunk:
if v != nil {
size += proto.BytesSize(getRangeRespChunkField, v.chunk)
}
case *SplitInfo:
if v != nil {
size = proto.NestedStructureSize(getRangeRespSplitInfoField, v)
}
default:
panic("unknown one of object get range request body type")
}
}
return size
}