From 67c6f305b21fbe68ed0815563514fd597f6d2ae7 Mon Sep 17 00:00:00 2001 From: Anton Nikiforov Date: Sat, 27 Apr 2024 23:03:26 +0300 Subject: [PATCH] [#79] object: Implement `Range\RangeHash` requests for EC object Signed-off-by: Anton Nikiforov --- object/convert.go | 8 ++++++++ object/grpc/service.go | 7 +++++++ object/marshal.go | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/object/convert.go b/object/convert.go index 3a680ac..9b266ac 100644 --- a/object/convert.go +++ b/object/convert.go @@ -1962,6 +1962,8 @@ func (r *GetRangeResponseBody) ToGRPCMessage() grpc.Message { m.SetChunk(v.ToGRPCMessage().(*object.GetRangeResponse_Body_Chunk)) case *SplitInfo: m.SetSplitInfo(v.ToGRPCMessage().(*object.SplitInfo)) + case *ECInfo: + m.SetECInfo(v.ToGRPCMessage().(*object.ECInfo)) default: panic(fmt.Sprintf("unknown get range part %T", v)) } @@ -1994,6 +1996,12 @@ func (r *GetRangeResponseBody) FromGRPCMessage(m grpc.Message) error { r.rngPart = partSplit err = partSplit.FromGRPCMessage(pt.SplitInfo) } + case *object.GetRangeResponse_Body_EcInfo: + if pt != nil { + partEC := new(ECInfo) + r.rngPart = partEC + err = partEC.FromGRPCMessage(pt.EcInfo) + } default: err = fmt.Errorf("unknown get range part %T", pt) } diff --git a/object/grpc/service.go b/object/grpc/service.go index fa7cf45..49f160b 100644 --- a/object/grpc/service.go +++ b/object/grpc/service.go @@ -435,6 +435,13 @@ func (m *GetRangeResponse_Body) SetSplitInfo(v *SplitInfo) { } } +// SetECInfo sets meta info about the erasure-coded object. +func (m *GetRangeResponse_Body) SetECInfo(v *ECInfo) { + m.RangePart = &GetRangeResponse_Body_EcInfo{ + EcInfo: v, + } +} + // SetBody sets body of the response. func (m *GetRangeResponse) SetBody(v *GetRangeResponse_Body) { m.Body = v diff --git a/object/marshal.go b/object/marshal.go index c02ae83..a8d399c 100644 --- a/object/marshal.go +++ b/object/marshal.go @@ -117,6 +117,7 @@ const ( getRangeRespChunkField = 1 getRangeRespSplitInfoField = 2 + getRangeRespECInfoField = 3 getRangeHashReqBodyAddressField = 1 getRangeHashReqBodyRangesField = 2 @@ -1110,6 +1111,10 @@ func (r *GetRangeResponseBody) StableMarshal(buf []byte) []byte { if v != nil { proto.NestedStructureMarshal(getRangeRespSplitInfoField, buf, v) } + case *ECInfo: + if v != nil { + proto.NestedStructureMarshal(getRangeRespECInfoField, buf, v) + } default: panic("unknown one of object get range request body type") } @@ -1132,6 +1137,10 @@ func (r *GetRangeResponseBody) StableSize() (size int) { if v != nil { size = proto.NestedStructureSize(getRangeRespSplitInfoField, v) } + case *ECInfo: + if v != nil { + size = proto.NestedStructureSize(getRangeRespECInfoField, v) + } default: panic("unknown one of object get range request body type") }