From 1772b921826b876ca0b26cd137d52fbd73d1e613 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Tue, 19 Mar 2024 09:55:23 +0300 Subject: [PATCH] [#69] object: Initial EC implementation Signed-off-by: Evgenii Stratonikov --- accounting/grpc/service.pb.go | Bin 18993 -> 18996 bytes accounting/grpc/service_grpc.pb.go | Bin 4321 -> 4321 bytes accounting/grpc/types.pb.go | Bin 6048 -> 6048 bytes acl/grpc/types.pb.go | Bin 39444 -> 39448 bytes audit/grpc/types.pb.go | Bin 12413 -> 12413 bytes container/grpc/service.pb.go | Bin 112809 -> 112813 bytes container/grpc/service_grpc.pb.go | Bin 18225 -> 18225 bytes container/grpc/types.pb.go | Bin 13484 -> 13491 bytes lock/grpc/types.pb.go | Bin 5767 -> 5770 bytes netmap/convert.go | 4 ++ netmap/grpc/service.pb.go | Bin 46017 -> 46017 bytes netmap/grpc/service_grpc.pb.go | Bin 9124 -> 9132 bytes netmap/grpc/types.pb.go | Bin 46333 -> 47580 bytes netmap/marshal.go | 12 +++- netmap/types.go | 27 ++++++++ object/convert.go | 106 +++++++++++++++++++++++++++++ object/grpc/service.pb.go | Bin 145626 -> 148314 bytes object/grpc/service_grpc.pb.go | Bin 38241 -> 38241 bytes object/grpc/types.pb.go | Bin 40987 -> 49981 bytes object/marshal.go | 46 +++++++++++++ object/message_test.go | 1 + object/test/generate.go | 25 +++++++ object/types.go | 32 +++++++++ refs/grpc/types.pb.go | Bin 27235 -> 27241 bytes session/grpc/service.pb.go | Bin 18263 -> 18263 bytes session/grpc/service_grpc.pb.go | Bin 4108 -> 4108 bytes session/grpc/types.pb.go | Bin 57088 -> 57088 bytes status/grpc/types.pb.go | Bin 21744 -> 21744 bytes tombstone/grpc/types.pb.go | Bin 7272 -> 7276 bytes util/proto/test/test.pb.go | Bin 13851 -> 13851 bytes 30 files changed, 250 insertions(+), 3 deletions(-) diff --git a/accounting/grpc/service.pb.go b/accounting/grpc/service.pb.go index 51b9fe359b396cb220a0b23d200daf9d5ed92faa..fe193cd3367cf3161c0f465ed0d12698ff4e1bb2 100644 GIT binary patch delta 51 zcmdlug>lOi#t9*^#(D-^`uYl-1x5KK`N;}UP-dcMWU6Ppv5-xQ87RHETxyp-0CwjM A!~g&Q delta 47 xcmdlog>mB)#t9*^26_fu`uYl-1x5KK`N;}UP-dcMWUObhv5-w_bCuLCeE>%O4OjpG diff --git a/accounting/grpc/service_grpc.pb.go b/accounting/grpc/service_grpc.pb.go index 1aadfc04bce75a5a231a3f0b627896b55e8e71c6..cd1b2e917d841874a94f9c9b94cf44ba60e40054 100644 GIT binary patch delta 14 VcmaE;_)u{|9kZ#P@y5mk0RSw+1x^3} delta 14 VcmaE;_)u{|9ka2X$;QS60RSwz1x)|| diff --git a/accounting/grpc/types.pb.go b/accounting/grpc/types.pb.go index ae09338f62229d9ea5d1b3ddb8475cbe98dfbd65..592aa8b381d8df366b5a5f727420a84343a90252 100644 GIT binary patch delta 40 qcmZ3Wzd(ONh^(=m0hhkM0%t){eo20^0u+>)=oy*n8E-7q7Y6{~#0p^m delta 40 qcmZ3Wzd(ONh^&F00hhkM0%t){eo20^0u+>)=ouO7nQSc77Y6{~SPESL diff --git a/acl/grpc/types.pb.go b/acl/grpc/types.pb.go index e2451691486d8daf031ee486b3db1aa5e79ccac2..1b57b1aa3784e503be276b1bfbbeeaba15c7d314 100644 GIT binary patch delta 102 zcmbQTg=xkXrU@ak#(D-^`uYl-1x5KK`N;}UP-dcMWU6PpvG6uC3m2!p{$?MROWK?u tg{8%rdFh+g4US6ig1E`~c_oRNd8tL4e|oH9)=oy*n8E-6P)=ouO7nQSa%Pf3p4liplrH zBqz`7WuJUzp}^z~@*I9tTcRY0Sq%KnpK9C{F`FSNpiOD7E#hb5gdc(yA5=$)E Je0=YtUjSFVDX9Pe delta 86 zcmZ4ck!|Hiwh1A!26_fu`uYl-1x5KK`N;}UP-dcMWUObhu~4XU^1bSo$rI!`CeQ8V j*(~3+Mq{#eBPXkRF;Lg$o15Nnu_+{$fY_(^KKca!-RB<& diff --git a/container/grpc/service_grpc.pb.go b/container/grpc/service_grpc.pb.go index 754665f0118978df04b0a8f5408f2025133e9563..79b0533fd3ecbe5d4bdff56a6aed7556e20f1390 100644 GIT binary patch delta 154 zcmdnk$GEYNaY7xlsh;u1#ymDYE>3-Yh2;FalElos)S}6XoW+|9*cUURiEmcqJix*M zR-0IqI*Gk>a~xkkKbj(t=E()@*_&_5NuV15lzY7SkwPsqvLTb>_=+Y6s0(h6SG}YN E0DAQ>V*mgE delta 154 zcmdnk$GEYNaY7xlv7X7s#ymDYh2;FalElos)FLiUef`OboW+|9*cUURiEmcqJix-C zkXV!oQZ)=oy*n8E-5MVCDcxXCxM9Y(B~Sfr*EU z6Ua?3$}cS_*4ccNEti80B%hzQ*@C}@i5rDdj<7A2Ns=I2eGEo=%m?t-xF<}boK6abx+ BHiiHI delta 192 zcmdm-xh8W$h^&F00hhkM0%t){eo20^0u+>)=ouO7nQSZ!VCGQBNG#3(s@Z&!`2!P= zLV8htX+g0L7bj5UC|fQEn?imXPcMGbqgNy`%$qxmUCvyuu=2s{# zDay=C*Mo`w6>=0%NX{?KNl{2jg$eoz+lvAP^U^ZYON$aqGV}9bGK+*wC*Kp6g&Di~ Ix9|=H0J~Q=HUIzs diff --git a/lock/grpc/types.pb.go b/lock/grpc/types.pb.go index 100d6486e2ff91615258663abb568a9fcacb069f..c2d66f1869da227ad8813ca414c4c30bd9d337b2 100644 GIT binary patch delta 61 zcmZqI?b4kPB5SN?z@@LRz*$g~Uy`4!00m_xdPb&t#v2P?FfjwACr2_HPwr=y2C+A< IV!kT`0P*G!SpWb4 delta 57 zcmeCuZP%R;B5R;$z@@LRz*$g~Uy`4!00m_xdPc^2CL0T1FinnOHf9DYncUATy?HJ3 GT_FIw3J>rA diff --git a/netmap/convert.go b/netmap/convert.go index 0e259496..fad73803 100644 --- a/netmap/convert.go +++ b/netmap/convert.go @@ -142,6 +142,8 @@ func (r *Replica) ToGRPCMessage() grpc.Message { m.SetSelector(r.selector) m.SetCount(r.count) + m.EcDataCount = r.ecDataCount + m.EcParityCount = r.ecParityCount } return m @@ -155,6 +157,8 @@ func (r *Replica) FromGRPCMessage(m grpc.Message) error { r.selector = v.GetSelector() r.count = v.GetCount() + r.ecDataCount = v.GetEcDataCount() + r.ecParityCount = v.GetEcParityCount() return nil } diff --git a/netmap/grpc/service.pb.go b/netmap/grpc/service.pb.go index 711a3c9ea72289aeadc5846932ee76a96390d25f..7694f3f37f782ea59e4d93a592d92571597d961c 100644 GIT binary patch delta 42 scmX^3oax|mrU@ak#(D-^`uYl-1x5KK`N;}UP-dcMWU6Ppu`pmW04MVd)Bpeg delta 42 scmX^3oax|mrU@ak26_fu`uYl-1x5KK`N;}UP-dcMWUObhu`pmW04IkG&;S4c diff --git a/netmap/grpc/service_grpc.pb.go b/netmap/grpc/service_grpc.pb.go index dec7d7f33a53b47a81112175e36dbc1506b41ff9..00cb8de72fd4fec22ecc1bad10b1ee638e10ce83 100644 GIT binary patch delta 166 zcmZ4DzQ%n*9kZ#P@y5nT79K86eSL+JjQrB{44ui(SeyjG0(to_{`ef`NR`JDt6^72zsfkcTyWoijn^bfzC wfI?ELLTPboib7g`5m?Ymz+rNqz_H1*xY8#3aj>Hq)$ diff --git a/netmap/grpc/types.pb.go b/netmap/grpc/types.pb.go index f4991a93a10f6e29ad6096e93b1d5b57079669b3..385713d4867ccda6d2a4b4066556fd7c53af6af6 100644 GIT binary patch delta 2431 zcmah}TTD}T7|#@IThP`DR62o!8evee_ZEYQL*fHDsKG5UaY!v?LxDm$#iBr4E^;fh z@BZaxv$?GrdTsoC` zeSNNqN%puUx6t{5+uztJczl62Nv*2(a3Qq$`IQc%uU#^>xm&$Ey`CeDOnihu#$%nn zHYVc0DsE+@xYkVqSM1o71fw=TJ9od^-z;_iBZw^KVQQR@g=r`JJmp}a_?+Uu1P6?K%9C=#FNOG=d0o&l;s(qq6SY7oucg4lRVGiXF(=@jRT7|Yi>rt;?@HGjX^dxspKEF_1CA7D= zJ>FJtn4%be>Ir8uw#JmKhGQI7)W`I?q!}-SzHPV|%+<>zxa7b|LKs=^^oW@Z z>L4hiQZ{3Xyj~HXPv~HY>M_&nLgkDOh!#Q7SI7&RY@bd+NqbQVJwhQ1J_;+Q!zzuLJ2M5XGS6;24DZHmNe5GO z99P1H46-&6yNrNN#7`KZkL01IOUK*4n>D5(;y`KlaV($Qf*mIcP#ekCQo`mW^9*>i z--xsQ1u4~#(rM>Of7mbL+R!GH59}g-Qo77&<<_xnSRN4I8&IX&l3FJJaX>_7lrlLm zC^JI6brQE!9bOw0VTh{LB(j*eJ0WbqwjnD{MRk~qXb}tNVR5Jc+XghNEMAUyZ`g&< z@M_!~6nL3m4jZulv=xiP3Y4A9z)zieTt4l>$1)4%p-eoSQ6Su%gXO4^TO1mubj&n% zHX0q1n|pq1Si~za9e#_Yqh3<5{i=W}P9^k=h&UG4;j_RxJQ}IsR3tVaCHIO^a%@YE z6$7!=WR5S4inu?^9ZipkI6sz)V`F>JFs4?^&7iq?e@wO}mdqyF4BC{<<05VZRJc1X zV1C?%iYZFzTPE)7mB+{I##de0Xoym?7QO83P6; ztmtL6?uf0!y@?9!3$xMc+>7=}C0Z9Wcsp*Gp521mlbP5UBdc}&PeK{9AQn^Mxyb4? zqO3M1!Y+~iz(^Ku#auW%lA+}E*m&jII2DzcRCxd#T+tC{M1TxGi5l=IZpDQujgnm< zS_fR4%45YAXL~pgiG7sKiL5oF23(!8(n!k7PbbUa%mh<9dA-2qJMSDQ8mgk6h8(n_Ze!ayQm2h^u&O%5Z!#7yHI_OOp$}oWB5#2lWd8 delta 1611 zcmZ8hT}+!*7>-59Ps`6(p<4m>ArT@e^y}BJUyBf!I$RtnlOR(Q9VrL~$I{Vt&;o+c zG8k)V=~D_Ve@k54-HhpWH8Xc-Tr`^(Uifptyz>f;-e`jHocFMW*o)?z^Zq^W^Stl( z%b&Wv-*oY}s^mtwz-pE9FZ#TGZ@;wv8&w+>d!zcr$iGJn(%{grf52CFiTPzGjCYRU z)+qy88}hT~UwV*}-D~*aIP`9P_OZJ&H%}V&T=FwVID1~zOWl62&-38`zlVEn=SdeX z3*(8i?ZuME@AnP$UG@)%%*nH1Q&#bo73=JMI5YJcIwub43i6SedKaII+F0ikKd%pMhmJ<0)>W?>gup?{A>!p4l-$PHQ(f70yy-^tF{n{o3J zcN4Yn%{K9)XSoKCW?K$%cZY()*=D#yl87FlIF)kPSoBPYqNl^v_#@O>#6z41t!7x) za&a!KU?+4qhrz*(u$wZ=c6^n10mtSJ)GSAIuGT^NPM=3x4zF~xWz9Uccz{+;aTk!3C1GmK%B~&c5@uM6q z!>7r5tS{{MN4%(g)SrWeJzSvv{)*QT$z4}1f(K?}oszeWceQ-gO}LpRoOj+^4GI?( z98I4>NyH5OLWxcpz-HuSoQvd^FiDsSj6vdyA-TV3f%Tf5gF5kX9d^g`NL?eiCFo!o zj0gDFNL+1@)pbRLtTsxhen8c^-suPdUmmMKPV^*Cdp}Tv;b;p#RtIbFU9{!@h)t}= zR;r^u9URsS=V5Az(tVj}gCQpI9FwsM+}$*wC+0$HO#h66%u*%p#F|6`BFH8SHdq2( zoDyuuYhX<^qC5T~zK);9d$T5(=X{u6l#3jqsDlPr!zYU->@K$>m~KR0f|z+fX~tBr z5cd);4#7I-z`bBT&IFF*jq9bztdwCA)L~b$7CUId&BWmxPDewM%KsdxLUXi$Y3@QV zqxkg+6ZVoc3Y*a?Mo%$5TCrmYCfr^*ZQ|3T9T<5Bqny29DfK)8@%m@`8B{!8u^^fv ze9fy8eoeIz1B#dgS_a-39IHYqMUX;*$^FcbT79|^BV(q-+DRcb4Iv*cIiNDZ@y?pN zlmH3!#U4Ac%Vhm&&BFQkKIlO2b~$!tpJRmPqBosK3*dCJ@bhrtX1bd7){LA?tuSz0 z;edp$%)V@tRi!pn);P8@``BbuuUDaHy;Ur)LRasTt4h~LPp%qWZ5v{k_NRdOpk)bd zkQhHs*5U6BQu0RT?MlIyht!t^ZDJewcjmKAK^_Oi_#lIWIU#pTES}g!r;3Nca*S>X z4fu+%1*2Kixc4_(B8`(Y5Z^+DEe-0og+XIfu?S+FJK@^4AV3?$(Q)?i*={2O)FyPM OD{*nOG<)H?_t<~oqwfd+ diff --git a/netmap/marshal.go b/netmap/marshal.go index 4f2c1ce5..95430dab 100644 --- a/netmap/marshal.go +++ b/netmap/marshal.go @@ -19,8 +19,10 @@ const ( attributeSelectorField = 4 filterSelectorField = 5 - countReplicaField = 1 - selectorReplicaField = 2 + countReplicaField = 1 + selectorReplicaField = 2 + ecDataCountReplicaField = 3 + ecParityCountReplicaField = 4 replicasPolicyField = 1 backupPolicyField = 2 @@ -134,7 +136,9 @@ func (r *Replica) StableMarshal(buf []byte) []byte { var offset int offset += protoutil.UInt32Marshal(countReplicaField, buf[offset:], r.count) - protoutil.StringMarshal(selectorReplicaField, buf[offset:], r.selector) + offset += protoutil.StringMarshal(selectorReplicaField, buf[offset:], r.selector) + offset += protoutil.UInt32Marshal(ecDataCountReplicaField, buf[offset:], r.ecDataCount) + protoutil.UInt32Marshal(ecParityCountReplicaField, buf[offset:], r.ecParityCount) return buf } @@ -146,6 +150,8 @@ func (r *Replica) StableSize() (size int) { size += protoutil.UInt32Size(countReplicaField, r.count) size += protoutil.StringSize(selectorReplicaField, r.selector) + size += protoutil.UInt32Size(ecDataCountReplicaField, r.ecDataCount) + size += protoutil.UInt32Size(ecParityCountReplicaField, r.ecParityCount) return size } diff --git a/netmap/types.go b/netmap/types.go index bda9ec65..dd5db68d 100644 --- a/netmap/types.go +++ b/netmap/types.go @@ -50,6 +50,9 @@ type Selector struct { type Replica struct { count uint32 selector string + + ecDataCount uint32 + ecParityCount uint32 } type Operation uint32 @@ -259,6 +262,30 @@ func (r *Replica) SetCount(count uint32) { r.count = count } +func (r *Replica) GetECDataCount() uint32 { + if r != nil { + return r.ecDataCount + } + + return 0 +} + +func (r *Replica) SetECDataCount(count uint32) { + r.ecDataCount = count +} + +func (r *Replica) GetECParityCount() uint32 { + if r != nil { + return r.ecParityCount + } + + return 0 +} + +func (r *Replica) SetECParityCount(count uint32) { + r.ecParityCount = count +} + func (p *PlacementPolicy) GetUnique() bool { if p != nil { return p.unique diff --git a/object/convert.go b/object/convert.go index 07bf89ce..8d6c73f1 100644 --- a/object/convert.go +++ b/object/convert.go @@ -262,6 +262,51 @@ func (h *SplitHeader) FromGRPCMessage(m grpc.Message) error { return nil } +func (h *ECHeader) ToGRPCMessage() grpc.Message { + var m *object.Header_EC + + if h != nil { + m = new(object.Header_EC) + + m.Parent = h.Parent.ToGRPCMessage().(*refsGRPC.ObjectID) + m.Index = h.Index + m.Total = h.Total + m.Header = h.Header + m.HeaderLength = h.HeaderLength + } + + return m +} + +func (h *ECHeader) FromGRPCMessage(m grpc.Message) error { + v, ok := m.(*object.Header_EC) + if !ok { + return message.NewUnexpectedMessageType(m, v) + } + + var err error + + par := v.GetParent() + if par == nil { + h.Parent = nil + } else { + if h.Parent == nil { + h.Parent = new(refs.ObjectID) + } + + err = h.Parent.FromGRPCMessage(par) + if err != nil { + return err + } + } + + h.Index = v.GetIndex() + h.Total = v.GetTotal() + h.Header = v.GetHeader() + h.HeaderLength = v.GetHeaderLength() + return nil +} + func (h *Header) ToGRPCMessage() grpc.Message { var m *object.Header @@ -275,6 +320,7 @@ func (h *Header) ToGRPCMessage() grpc.Message { m.SetContainerId(h.cid.ToGRPCMessage().(*refsGRPC.ContainerID)) m.SetSessionToken(h.sessionToken.ToGRPCMessage().(*sessionGRPC.SessionToken)) m.SetSplit(h.split.ToGRPCMessage().(*object.Header_Split)) + m.Ec = h.ec.ToGRPCMessage().(*object.Header_EC) m.SetAttributes(AttributesToGRPC(h.attr)) m.SetPayloadLength(h.payloadLen) m.SetCreationEpoch(h.creatEpoch) @@ -313,6 +359,9 @@ func (h *Header) FromGRPCMessage(m grpc.Message) error { if err := h.fillSplitHeader(v); err != nil { return err } + if err := h.fillECHeader(v); err != nil { + return err + } h.attr, err = AttributesFromGRPC(v.GetAttributes()) if err != nil { @@ -417,6 +466,19 @@ func (h *Header) fillSplitHeader(v *object.Header) error { return h.split.FromGRPCMessage(split) } +func (h *Header) fillECHeader(v *object.Header) error { + ec := v.GetEc() + if ec == nil { + h.ec = nil + return nil + } + + if h.ec == nil { + h.ec = new(ECHeader) + } + return h.ec.FromGRPCMessage(ec) +} + func (h *HeaderWithSignature) ToGRPCMessage() grpc.Message { var m *object.HeaderWithSignature @@ -591,6 +653,50 @@ func (s *SplitInfo) FromGRPCMessage(m grpc.Message) error { return nil } +func (s *ECInfo) ToGRPCMessage() grpc.Message { + var m *object.ECInfo + + if s != nil { + m = new(object.ECInfo) + + if s.Chunks != nil { + chunks := make([]*object.ECInfo_Chunk, len(s.Chunks)) + for i := range chunks { + chunks[i] = &object.ECInfo_Chunk{ + Id: s.Chunks[i].ID.ToGRPCMessage().(*refsGRPC.ObjectID), + Index: s.Chunks[i].Index, + Total: s.Chunks[i].Total, + } + } + m.Chunks = chunks + } + } + + return m +} + +func (s *ECInfo) FromGRPCMessage(m grpc.Message) error { + v, ok := m.(*object.ECInfo) + if !ok { + return message.NewUnexpectedMessageType(m, v) + } + + chunks := v.GetChunks() + if chunks == nil { + s.Chunks = nil + } else { + s.Chunks = make([]ECChunk, len(chunks)) + for i := range chunks { + if err := s.Chunks[i].ID.FromGRPCMessage(chunks[i].Id); err != nil { + return err + } + s.Chunks[i].Index = chunks[i].Index + s.Chunks[i].Total = chunks[i].Total + } + } + return nil +} + func (r *GetRequestBody) ToGRPCMessage() grpc.Message { var m *object.GetRequest_Body diff --git a/object/grpc/service.pb.go b/object/grpc/service.pb.go index d339aefca5515cb80b87159d2dad0bc79fc7003b..2bfb50bc985ef472d9736ae98b1a7eae5cdcf766 100644 GIT binary patch delta 5902 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 UWQ(c&9A=S%#h2A&i?mJp7sWwKiU0rr delta 4779 zcmdT|dsLKl8b0q21{kgbA{qh?ilm4z+-3$47)Vhx1@p2J$_#>(rZQt_-oa|)nzDiO zS}34prKRDL&aRn&Y!_V)*s0ETIcv05=dA2WtJB%mQ?bwQ`^2=p{IKZL@BJ_Op_>qds=CZykY`(=8y-+EWyEX z^C*>duc@2u^C+8}igD=yBTeJ>b+F;RpM2SnNgLUgPvKm3mXcJHZs- z-kDF4eBGi(5|9o5I~Ky~a6Sd|$g_BC?W6H*d5&hfmq>i83lMDoEZhb_b$qP=f!Xha z>(+;H0uiTh^=ts}_6HQ=Y=NnZi@;vN3L5KUOpetXwx~4u=YoxUH{oz$EJGlV_`+hcaMf%`;N43! z=?=b>oak7AV1HbRKstX98Pr-Sgae%9$zdxgnss(4r7;OoLaGF@eHjIEe2SVaTK;kX zZ2Y1h5F-WrIe!q5L2VISP%ObaN)awsG97ed{VLGww;j*B&6Gr3T?$#O>&MOwZ4ls% zQc#8MkoHYe9z56v7`poaXGaZON^Ym=yu2Te{@Y-*yB!zcgfH-OcF0Ap>$iv8A8h;w}j1Q+!N@(@b*kXv`Y0gx>wTvNOs zhwP`xEO))CE0aPplqi3brCcJ{0Kt;As_IU-Xfiid;_~iRpjKx``r2m#SY&3Ho;|%O;%N|0XT>F`92;gXj`kk<7ML2q$MH#c{PAiU1H1 z+_?efQ9w|jODR@HzB?6|y>cA)etDKb2gG$Ba2WHpKJngFK&d3nTu6+Mq5WLZ-5y8ZR^l+Y$Z1g*GjblDr@aQqEPY_)+A(B@?J*S6`DGL()d7Vs zpbUO|Ig-V42n3*gxU=Z*|YQg$y0fcX}q0KF-flAsRpe*MS=-tqc?e|!5 z1)S9@1ig$5`%ewZQ%Q-k1YU5QQmC9qHbU!)cZQiTy>2_K6-xp93jvSgqZ{FIW-h2c zbOaiy+d;8l+_gi^kN0Yo? zivQhCoVB=sRKYG}<@SXT%Bo#tc2+}l8PB73K|3Klu#09m6X0U!AS64d3eb=*Rv+w(DbzbLQ4(Fg3I+L|-6-HmN$A9P6wT?fRA$PypTZSK(84bd!rjrH{8N>b zMU1Hq)(T`~NYbd=>Y07z&+A!+OhY9BdXB+n&;4MpzZ~Tv<`gU;cVk&^20CjBk*5W( z10BOJ0qRrRp|49FC=v@!Lp`IZ9H}t;4Bk|ogW-<#*_0^a1K_OdbAA%YySEbrd{0F;&-6h=Fovl}W`L14ZExZ9-?#Yt^ zX#g2jbwCaZi;|j{%AYnMU2G=-MMNVEe%}B*?r$Uo!@Ul$8~!A0b~dVo?T?LsgA3sl zUMrcD`6NwtmjQFdqv%5G+Ti+s(fwu}0f~rn#{anc{goq|f&I8M7z0)|Lvc;rh~lSa zi~cs7&n!~fGV59tKvP;&d>we?Keqs$LoH-b*hop_-Ex4GZ>0>3DLf=+>GAt0)K?vF zmHKaHM>)WB zwI7Al@3P~u!wfNCJPK2qsQBHr=F`cm#tT!%7Gi;;Otd=!n`OS-G8BCp5#SRNK4m3ywCdJejY0Djk9#CxU0>hbY!G;r@VC}x^QWMFtt z_!_EuR3j{0t`TAU%GYrEbB&nE=QXgk*F&JjUO~8x8WHCOMJQKD41W)k~$5 z%Jv}Edg8Jx9s*x?o+4SEkycII`x)Sj^MX~Q>S(o>SnBi=aqOlQGjDolf_I<6qweqE z#~Q6jhl_#V<3*2FAg`)@L?{mp;e}-cnt9(>qzY3iNBWCM zPVf^ZY*BvK%ijs=?<;;Fj3i-u{e?g0_yhL`{b1^#zhqMWvIYn*b`QXU3X(>c~6 LHoGobM3eYCT~f%f diff --git a/object/grpc/service_grpc.pb.go b/object/grpc/service_grpc.pb.go index 985b991e2e4afe98ed72eb3d96caec407d7f2fe7..1edf6473eaf38aa9de1db9c218a8acf408a8e399 100644 GIT binary patch delta 16 YcmaF3is|7hrU`Y-rh3L38y`#o06+8xXaE2J delta 16 YcmaF3is|7hrU`Y-#(E|j8y`#o06*&oX8-^I diff --git a/object/grpc/types.pb.go b/object/grpc/types.pb.go index c6f2c7a1e6f333c0bfcecffdd6b740e60aed5a8d..8f4f383cbac718b637f7954ac5a0bbc06faa5532 100644 GIT binary patch delta 4863 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 diff --git a/object/marshal.go b/object/marshal.go index ddd57462..989dd434 100644 --- a/object/marshal.go +++ b/object/marshal.go @@ -26,6 +26,12 @@ const ( splitHdrChildrenField = 5 splitHdrSplitIDField = 6 + ecHdrParentField = 1 + ecHdrIndexField = 2 + ecHdrTotalField = 3 + ecHdrHeaderLengthField = 4 + ecHdrHeaderField = 5 + hdrVersionField = 1 hdrContainerIDField = 2 hdrOwnerIDField = 3 @@ -37,6 +43,7 @@ const ( hdrSessionTokenField = 9 hdrAttributesField = 10 hdrSplitField = 11 + hdrECField = 12 hdrWithSigHeaderField = 1 hdrWithSigSignatureField = 2 @@ -229,6 +236,43 @@ func (h *SplitHeader) Unmarshal(data []byte) error { return message.Unmarshal(h, data, new(object.Header_Split)) } +func (h *ECHeader) StableMarshal(buf []byte) []byte { + if h == nil { + return []byte{} + } + + if buf == nil { + buf = make([]byte, h.StableSize()) + } + + var offset int + + offset += proto.NestedStructureMarshal(ecHdrParentField, buf[offset:], h.Parent) + offset += proto.UInt32Marshal(ecHdrIndexField, buf[offset:], h.Index) + offset += proto.UInt32Marshal(ecHdrTotalField, buf[offset:], h.Total) + offset += proto.UInt32Marshal(ecHdrHeaderLengthField, buf[offset:], h.HeaderLength) + proto.BytesMarshal(ecHdrHeaderField, buf[offset:], h.Header) + return buf +} + +func (h *ECHeader) StableSize() (size int) { + if h == nil { + return 0 + } + + size += proto.NestedStructureSize(ecHdrParentField, h.Parent) + size += proto.UInt32Size(ecHdrIndexField, h.Index) + size += proto.UInt32Size(ecHdrTotalField, h.Total) + size += proto.UInt32Size(ecHdrHeaderLengthField, h.HeaderLength) + size += proto.BytesSize(ecHdrHeaderField, h.Header) + + return size +} + +func (h *ECHeader) Unmarshal(data []byte) error { + return message.Unmarshal(h, data, new(object.Header_EC)) +} + func (h *Header) StableMarshal(buf []byte) []byte { if h == nil { return []byte{} @@ -255,6 +299,7 @@ func (h *Header) StableMarshal(buf []byte) []byte { } proto.NestedStructureMarshal(hdrSplitField, buf[offset:], h.split) + proto.NestedStructureMarshal(hdrECField, buf[offset:], h.ec) return buf } @@ -277,6 +322,7 @@ func (h *Header) StableSize() (size int) { size += proto.NestedStructureSize(hdrAttributesField, &h.attr[i]) } size += proto.NestedStructureSize(hdrSplitField, h.split) + size += proto.NestedStructureSize(hdrECField, h.ec) return size } diff --git a/object/message_test.go b/object/message_test.go index a111c608..e675f498 100644 --- a/object/message_test.go +++ b/object/message_test.go @@ -16,6 +16,7 @@ func TestMessageConvert(t *testing.T) { func(empty bool) message.Message { return objecttest.GenerateHeader(empty) }, func(empty bool) message.Message { return objecttest.GenerateObject(empty) }, func(empty bool) message.Message { return objecttest.GenerateSplitInfo(empty) }, + func(empty bool) message.Message { return objecttest.GenerateECInfo(empty) }, func(empty bool) message.Message { return objecttest.GenerateGetRequestBody(empty) }, func(empty bool) message.Message { return objecttest.GenerateGetRequest(empty) }, func(empty bool) message.Message { return objecttest.GenerateGetObjectPartInit(empty) }, diff --git a/object/test/generate.go b/object/test/generate.go index 085880c0..b107023f 100644 --- a/object/test/generate.go +++ b/object/test/generate.go @@ -137,6 +137,31 @@ func GenerateSplitInfo(empty bool) *object.SplitInfo { return m } +func GenerateECInfo(empty bool) *object.ECInfo { + m := new(object.ECInfo) + + if !empty { + m.Chunks = make([]object.ECChunk, 2) + for i := range m.Chunks { + m.Chunks[i] = *GenerateECChunk(false) + } + } + + return m +} + +func GenerateECChunk(empty bool) *object.ECChunk { + m := new(object.ECChunk) + + if !empty { + m.ID = *refstest.GenerateObjectID(false) + m.Index = 4 + m.Total = 7 + } + + return m +} + func GenerateGetRequestBody(empty bool) *object.GetRequestBody { m := new(object.GetRequestBody) diff --git a/object/types.go b/object/types.go index f9e2ed62..3af08b60 100644 --- a/object/types.go +++ b/object/types.go @@ -39,6 +39,15 @@ type SplitHeader struct { splitID []byte } +type ECHeader struct { + Parent *refs.ObjectID + Index uint32 + Total uint32 + Header []byte + HeaderLength uint32 + Signature []byte +} + type Header struct { version *refs.Version @@ -59,6 +68,8 @@ type Header struct { attr []Attribute split *SplitHeader + + ec *ECHeader } type HeaderWithSignature struct { @@ -88,6 +99,16 @@ type SplitInfo struct { link *refs.ObjectID } +type ECChunk struct { + ID refs.ObjectID + Index uint32 + Total uint32 +} + +type ECInfo struct { + Chunks []ECChunk +} + type GetRequestBody struct { addr *refs.Address @@ -655,6 +676,17 @@ func (h *Header) SetSplit(v *SplitHeader) { h.split = v } +func (h *Header) GetEC() *ECHeader { + if h != nil { + return h.ec + } + return nil +} + +func (h *Header) SetEC(v *ECHeader) { + h.ec = v +} + func (h *HeaderWithSignature) GetHeader() *Header { if h != nil { return h.header diff --git a/refs/grpc/types.pb.go b/refs/grpc/types.pb.go index cfb51eaeb3215e1b4b016010215c99591e55abd8..681bb0dbfb5b6f7a9f4f72d6b47de1550c0569c7 100644 GIT binary patch delta 78 zcmaESh4JMT#t9*^#(D-^`uYl-1x5KK`N;}UP-dcMWU6Ppu~31D87RGZBGWM;9+0~H Wq^#8B67}NE$)aVVV5ys0UG@N$sutq_ delta 70 zcmaEPh4Jwf#t9*^26_fu`uYl-1x5KK`N;}UP-dcMWUObhu~30&^Ax6ILOcrjNm;4M UCF;dM#hcSa%S1Qd*Xptd01Vz16#xJL diff --git a/session/grpc/service.pb.go b/session/grpc/service.pb.go index c01bfa8879660f9611c3244ea1984b320109f10d..a6fa50403851d62ca0e9738868e605d416978bc5 100644 GIT binary patch delta 42 scmccK$9TPuaYBf!v7P~!zP(+AOi3*&1}d9; yMWdQcA-@R34At~xQ%Fh$F_&njP3F~-W(Kl1YiRW|aVwN$fFwYMZ9b%9w+R5Sj~=4{ diff --git a/status/grpc/types.pb.go b/status/grpc/types.pb.go index ddbaa6c1a77f47fa84d601b687bb1929360d2b25..0972805016126f3c1193b5fdb025a9a9abd69ba5 100644 GIT binary patch delta 42 scmeyclJUbz#t9*^#(D-^`uYl-1x5KK`N;}UP-dcMWU6Ppv9LY_03%`yga7~l delta 42 scmeyclJUbz#t9*^26_fu`uYl-1x5KK`N;}UP-dcMWUObhv9LY_03!AbfB*mh diff --git a/tombstone/grpc/types.pb.go b/tombstone/grpc/types.pb.go index 109a131ddf57d413567dbb294a3763baa7ba59af..6a064dc3ce1df58cabaee7c2c05fd7cf312ad5da 100644 GIT binary patch delta 95 zcmaE1@y238h^(=m0hhkM0%t){eo20^0u+>)=oy*n8E-6%VdmrF1j?7>=Oz`G)=ouO7nQSbKVdhgP$J)W dpM0CyS`;Cqke`&5np^^w(Pq)z9K#|Y0RY7e8iW7< diff --git a/util/proto/test/test.pb.go b/util/proto/test/test.pb.go index 2fa2d4ec13f2187e68e531a9b2cc4ccd33983f6d..0b9f43da25012dc2bc2edb5d807ad6c2a11999c3 100644 GIT binary patch delta 40 qcmbQ8GdpKOh^(=m0hhkM0%t){eo20^0u+>)=oy*n8E-6HWeNcDZVPGv delta 40 qcmbQ8GdpKOh^&F00hhkM0%t){eo20^0u+>)=ouO7nQSavWeNcD0t;pU