From 67386fc52f6eb03940d968a6ea3071bb0e903456 Mon Sep 17 00:00:00 2001 From: Denis Kirillov Date: Thu, 11 Jul 2024 17:18:28 +0300 Subject: [PATCH] [#240] pool/tree: Update tree service client Update tree service to fix split tree problem. Tree intermediate nodes can be duplicated so we must handle this. Signed-off-by: Denis Kirillov --- go.mod | 2 +- pool/tree/pool.go | 44 ++++-------------------- pool/tree/pool_signature.go | 41 ++++++++++++++-------- pool/tree/service/service.pb.go | Bin 124265 -> 124402 bytes pool/tree/service/service_frostfs.pb.go | Bin 0 -> 59594 bytes pool/tree/service/service_grpc.pb.go | Bin 19139 -> 19865 bytes pool/tree/service/types.pb.go | Bin 9911 -> 9911 bytes pool/tree/service/types_frostfs.pb.go | Bin 0 -> 3111 bytes syncTree.sh | 13 +++---- 9 files changed, 39 insertions(+), 61 deletions(-) create mode 100644 pool/tree/service/service_frostfs.pb.go create mode 100644 pool/tree/service/types_frostfs.pb.go diff --git a/go.mod b/go.mod index 48c9453..c771411 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,6 @@ go 1.20 require ( git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.16.1-0.20240306101814-c1c7b344b9c0 git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230307110621-19a8ef2d02fb - git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 git.frostfs.info/TrueCloudLab/hrw v1.2.1 git.frostfs.info/TrueCloudLab/tzhash v1.8.0 github.com/antlr4-go/antlr/v4 v4.13.0 @@ -21,6 +20,7 @@ require ( ) require ( + git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 // indirect git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0 // indirect github.com/benbjohnson/clock v1.1.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/pool/tree/pool.go b/pool/tree/pool.go index 2c55351..b610909 100644 --- a/pool/tree/pool.go +++ b/pool/tree/pool.go @@ -126,7 +126,7 @@ type GetNodesParams struct { type GetSubTreeParams struct { CID cid.ID TreeID string - RootID uint64 + RootID []uint64 Depth uint32 BearerToken []byte Order SubTreeSort @@ -308,12 +308,7 @@ func (p *Pool) GetNodes(ctx context.Context, prm GetNodesParams) ([]*grpcService }, } - if err := p.signRequest(request.Body, func(key, sign []byte) { - request.Signature = &grpcService.Signature{ - Key: key, - Sign: sign, - } - }); err != nil { + if err := p.signRequest(request); err != nil { return nil, err } @@ -410,12 +405,7 @@ func (p *Pool) GetSubTree(ctx context.Context, prm GetSubTreeParams) (*SubTreeRe request.Body.OrderBy.Direction = grpcService.GetSubTreeRequest_Body_Order_None } - if err := p.signRequest(request.Body, func(key, sign []byte) { - request.Signature = &grpcService.Signature{ - Key: key, - Sign: sign, - } - }); err != nil { + if err := p.signRequest(request); err != nil { return nil, err } @@ -445,12 +435,7 @@ func (p *Pool) AddNode(ctx context.Context, prm AddNodeParams) (uint64, error) { BearerToken: prm.BearerToken, }, } - if err := p.signRequest(request.Body, func(key, sign []byte) { - request.Signature = &grpcService.Signature{ - Key: key, - Sign: sign, - } - }); err != nil { + if err := p.signRequest(request); err != nil { return 0, err } @@ -482,12 +467,7 @@ func (p *Pool) AddNodeByPath(ctx context.Context, prm AddNodeByPathParams) (uint }, } - if err := p.signRequest(request.Body, func(key, sign []byte) { - request.Signature = &grpcService.Signature{ - Key: key, - Sign: sign, - } - }); err != nil { + if err := p.signRequest(request); err != nil { return 0, err } @@ -527,12 +507,7 @@ func (p *Pool) MoveNode(ctx context.Context, prm MoveNodeParams) error { }, } - if err := p.signRequest(request.Body, func(key, sign []byte) { - request.Signature = &grpcService.Signature{ - Key: key, - Sign: sign, - } - }); err != nil { + if err := p.signRequest(request); err != nil { return err } @@ -558,12 +533,7 @@ func (p *Pool) RemoveNode(ctx context.Context, prm RemoveNodeParams) error { BearerToken: prm.BearerToken, }, } - if err := p.signRequest(request.Body, func(key, sign []byte) { - request.Signature = &grpcService.Signature{ - Key: key, - Sign: sign, - } - }); err != nil { + if err := p.signRequest(request); err != nil { return err } diff --git a/pool/tree/pool_signature.go b/pool/tree/pool_signature.go index 0b3a2f6..5a8def1 100644 --- a/pool/tree/pool_signature.go +++ b/pool/tree/pool_signature.go @@ -1,25 +1,38 @@ package tree import ( - crypto "git.frostfs.info/TrueCloudLab/frostfs-crypto" - "google.golang.org/protobuf/proto" + frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa" + tree "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool/tree/service" ) -func (p *Pool) signData(buf []byte, f func(key, sign []byte)) error { - sign, err := crypto.Sign(&p.key.PrivateKey, buf) +type message interface { + SignedDataSize() int + ReadSignedData([]byte) ([]byte, error) + GetSignature() *tree.Signature + SetSignature(*tree.Signature) +} + +// signMessage uses the pool key and signs any protobuf +// message that was generated for the TreeService by the +// protoc-gen-go-frostfs generator. Returns any errors directly. +func (p *Pool) signRequest(m message) error { + binBody, err := m.ReadSignedData(nil) if err != nil { return err } - f(p.key.PublicKey().Bytes(), sign) + keySDK := frostfsecdsa.Signer(p.key.PrivateKey) + data, err := keySDK.Sign(binBody) + if err != nil { + return err + } + + rawPub := make([]byte, keySDK.Public().MaxEncodedSize()) + rawPub = rawPub[:keySDK.Public().Encode(rawPub)] + m.SetSignature(&tree.Signature{ + Key: rawPub, + Sign: data, + }) + return nil } - -func (p *Pool) signRequest(requestBody proto.Message, f func(key, sign []byte)) error { - buf, err := proto.Marshal(requestBody) - if err != nil { - return err - } - - return p.signData(buf, f) -} diff --git a/pool/tree/service/service.pb.go b/pool/tree/service/service.pb.go index 63f3e714a2578d648309f46e53a12d3eda9f61f0..f439e3f282e9aceae47037733fe89220f60c4eb6 100644 GIT binary patch delta 2609 zcmai0YfO|!6wO7Jx4gs!L0}PiDZ)Nr*;T4wM3(vj5fqWa$}S2eF06o9k%v5mv_dxJ z#wJFZHjQml#h6Ok8YP<4wzi7>p-F3s{h_HgZO}hWtd^dc&m}cA?VkZ~Q(oaJy1YnbNOjs9&NWSa<>gUc!Cmtx-c@-!)K%FX>>9rn zb?%+pUwUIhhU!G9t9^Qx@*!%TSRQ(Nt!sSB)3y4p)*UAyU5?96*YtV+bG|hPmlZ0?cX^a_K&^AbKisRFLXVtUEsQs%kRjcP*HO2B8J^6E;no>D9oZ?u!hkPf#+d@&qcf!esX9_8w zHzZR?e1={*mg?uLZPjVzLjGnd8^%-(7Z*{!m)OtJa&|7obNvzu;2T9ipIlAR9Bm>! zf4qo7J^XyRGoBW5TPlU|YzF!9#ifYaVxsVQz~kFnDPIJ|7E?Iijiex6Urc81-$Vy^ zyo8o=AheRB797D{=jID&`Q^E=^1EK9G0E>*`L}Xbr)O(F zsa2T<^n!Cs$iR~wl%g`|#JZz`iul=f3gnMA)8e_pVz?rKk~wxaR8)F?Ky)RaB1V^^ zN5lJ3YxF+)*284wA`Of&R!wT*fdKAbfgYJHlrD{sIA;VQ_{)4Ch2oGrC^Ej2LaBz2 zC6i7FlWUu}`Q7Fx|!slYr|NGjg96V{2t zeICzH?sH=UggChdl1wK9<tMpl_`s(`Xl9uhk+HN@tEPgXM97+_lx$p*C#zO*Ggk zpLq6lGRRz7Tqa&wk6aafprp+P`48)9Lx3QnOaYyhA4Nj>>23tg5I@{Ug%jziw2`>4K~Z*WFHBu%q=3;Z@cXTS^n$RX5t5l2$)ePYxxoXC;4o4P z)WuGC5ff3xf7C+m${740w~sh@u@OYBJIOfl%OE8nG&=#IGhLu1#)b#_JZ#1s%Wem~ucJ}27@T~nUFmpb3ecz9 z6&+V`We1{w<;N+@fI8kmMv<{79pmt62W{XnJ>~FZKY8<8oj4g)f{d5U*hQ$>Kf?rX zD)XL0x~NP(j4wDXIFDXcDvUUSQ?qZNd3cCI85?o@+F{U!T~_kdBg!Sfs83{dH<<+u z-40qK4$HX_Q-?a?AiW^r#|Kj&o$TR;9(0I{0X$O$xUn8Q7Vc$&%#B%t7jTc5H7Pul zfP+)Ll&Fx^i))d_Klb7%1_Pe!5+KQn@3$lTL?5g#DL(E~D4umfh|GS<6BMyXQtG?f z|3ZDZV#~Q<2i~ZxbO3^6DBA{A7Olq5Z*$D_U!rnN(qjm5+VLv*F=Z=96|3jhEB delta 2589 zcmZuzYfO`86wYB#E+W*9n+0pVBA3#OP+%ghI-DYM5d^x37E(Y(Eq7N2a#K_$h-u_x z>K5FRZ7vfvZfV?)!Qu~>>1OATnQSU(;u4oQ+)n(0qAu?GC85Tzs>Z{4X})KmfZB=2EfmCais%g%HeU+M3w+kwJ;eeAuSh|Q2b(qPc@0O(=)}du~IrOhY~80E`~HV zme4{TFQHgi-7cYM9xtVNtlW%Tdo+k^=%zV*y%&`__fsNI<{|jI^4yWPJ%O=CD#+e=ea^&Mk%PUJ1pBT9vJ&W_Ky+SYIkjekw(67uqQ@AYJ6dE6PY6 zRAZKKHgZK7EfH15@aH|K+*hSP+nZ<+zn?>aeANY)*?W+mH-{2UZk3Q^rElwdDH zEbn>>WA7p~DP=AxB+PT6zP*AHL!pk2ONrEQWjn>O@&J+@s-)RGQ9%(rlqj40Q$e-> zi7Z^W1E8+0qHNF221b+*gz(DZgLq5M70O6|ee6f`Vi5r|$#AB(* z;Dnt%=0Yn@V;0Q0E1LFmSOaD7xD|}V7^t|VflQ(=hBVQaa}8vZx+L9{jVMJp=9aZ+ z>mEHINz#BbXnY9gY@{Ua(x86d>X8UNxeM7~0VIntR(L8_iXJ{_24G;7q!H6Xwqbk| z9f}f&=SU&VA_1)v4f^f5NE!!T(F*lC*|ew&d0%R!ET4TetM=0CytP&SZtMp|!#whas`+)FE@vGaJV$w>^;#DL|} zh-_$=L6QgNGu$|3DSWMoMR0ji#X4Nu0i=9<{(2tjip-;MF>3N^ywrhR@T?sW-0lEJ zW@skxWHB? zoRQD(dNJmDn2e|?&fg)hZ|y>yYb}`dkpxV^BZpW)-7vCuVD1idp}KGrmXQ=4WKe{s z$}jHot>qBxOyZ|2C_V_-AS+{~*ih313Fccpa!qrx5ML{vj#EAO8P5WKFFj+DY9>3^ z;*k=uxS$tq;WJ&LX4hsA;bbpmi6>9NpKPRZwscS+xcyQ@={3ZQvL7Qh+5@b&Rv{c3 zuHcjdAgWKcfHfW14+V#?DW=!mU@O+$*(IP;c^@s6cCJbGf3^>7LH-Jk-3@T89XLJi z0~7B!aFWJFdjH-&NK1L}kled72LZ6}Vrc>qrn`g45&sKAek1;uUK#P* izF&^egp0u3oGJL>Q~`6>t00x)2*s1uqd!8IZT|wvQut5+ diff --git a/pool/tree/service/service_frostfs.pb.go b/pool/tree/service/service_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..b2fbfb857cb8580d0f9baa18e32a9b1d4dc14107 GIT binary patch literal 59594 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 literal 0 HcmV?d00001 diff --git a/pool/tree/service/service_grpc.pb.go b/pool/tree/service/service_grpc.pb.go index 2c0828951aea66870e38f68316b12ef987686967..4c293a4c03d05def599ddd7bf8da398b18742e1b 100644 GIT binary patch delta 942 zcmX>+m2u{5#tB`FCKJ15*i7_{O!W*luFYa(G@C5JWWs2%*_Y`9w?ndjK}oTKm90Wz zK|yL>ibiy7dQm~Lo^xVO4p1gDKd&0h4=zb8$xQZ5Ey>7F(a@~bQOE~s)6>(_oNUb( z!<6hl`K>_QNFl^L{mCU#B9rf1vroP&!p`TMlbM=V5?oT0nwV>)u=$C|d?w1>-YA|1bGw^F zBIV{Sl}Lb@mm*nAxp|5rZj+^@G!fyUfF2H0q~=f|9Q0&!Aa*!yzAI}b%NLwlRF+x< i4{UMk_iSillf|tSCLfSwo%~;mZL*p!-)4KK77hTr1Wecf delta 240 zcmbO^oAK~e#tB`F#uK|`*o^gz4D~EGuFYa(G@dNMWWs2^*_Y`9_vCuMD8~HB0RnN8 zE%|dNzu->;^A1f85ln!JiwMO{-XatO*8bCnt!qO}-{8wK-dS2jk>a$rPwoO{v7m zXQbkwye{ctph3BCLlic1%g$k%{8By(EabF#x`LJL=KHqq*(Tq&Rhaz2nRPRx>kJM6 DO5IbY diff --git a/pool/tree/service/types.pb.go b/pool/tree/service/types.pb.go index b4d6981ef92d8434e0d3ffa6370d8cb860db9ce4..6464ccb776accfbcc4ad71c3630db3520dfae867 100644 GIT binary patch delta 41 rcmdn)yWMv}mz=S&o&lG>z5-`KQGQ8&vH}#8ndljr>KSZY!LJ4Y0<8;J delta 41 rcmdn)yWMv}mzz5-`KQGQ8&vH}#88S5Dt>RE1F!LJ4Y0`&`C diff --git a/pool/tree/service/types_frostfs.pb.go b/pool/tree/service/types_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..707fcc3ccdbbd65a8fef39ef75885f67673b8bc1 GIT binary patch literal 3111 zcmeH}O>f&U42I9quONDIw#MGNVTS>|tlc44yADgYOVNX3)3#7W3M4scR`kD@l58|~ zyH6BD4g~@@w)xUD`Mi>|432bxP@zJ@9TqU(z|v@^^9fy>RC-bxZCz;B{RLgZH3${Un>Qtt+AO$BNf)K2$w`71*22|M#}^2t zKv}?w%Z6^%d_^_;l>XLSC~h_(eagy4<&a#%i%+=u?xV+BnoC&3qaAdneXrP{*bW;y+cra+0!`PrX$jQL5)DXH6?INn`e%LTxuRO`XOfKf zLE*X!r#LR9&OJ9>vajvbxY__3qYa?Sb)y^_f@@uiyoN#)ptK9(HLQ(r)SfVuf;$em zUMwX#lpCKE&S+X@EiCT$kZ4OL9%52I(;%m+d`gF^tBLymuVi$H{gjP%5Q*pU;&M(? z9Jj|`KoSFQ2o(AeNM5{!QaGj2USSd=JrUbeAbLo+;)Xm?T6E+J$42e{0d`%1L>}e6 zh(Yf!?>QXG0*Rf9U>vFjXwvN-nV#X^pgg<(&$}nOI@PNuv+lR4a_`;-Uk2-b;RcnP z7QgfFDLVcjW-Hkn-~Xdp$Rgxw7msI~?~2U_7vVUv!mg1qT z|42f4xI{bvd&d@unWz-^p9)X4!{6`Tf4af@5@>;VHvW$7?+?)EoVA12@9or&I6r=8 Q4&B>RJ+i;|$&Aju16E2Dvj6}9 literal 0 HcmV?d00001 diff --git a/syncTree.sh b/syncTree.sh index 90eeba7..9921749 100755 --- a/syncTree.sh +++ b/syncTree.sh @@ -1,19 +1,14 @@ #!/bin/bash -REVISION="b3695411d907c3c65485bab04f9ff8479a72906b" +REVISION="fd6fed909c515e2cc148307ac2932d05e5557d94" echo "tree service revision ${REVISION}" # regexp below find all link to source code files which end with ".pb.go" and retrieve the file names # we use `[^.]*` as non greedy workaround for `.*` -FILES=$(curl -s https://git.frostfs.info/TrueCloudLab/frostfs-node/src/commit/${REVISION}/pkg/services/tree | sed -n "s,.*\"/TrueCloudLab/frostfs-node/src/commit/${REVISION}/pkg/services/tree/\([^.]*\.pb\.go\)\".*,\1,p") +FILES=$(curl -s https://git.frostfs.info/fyrchik/frostfs-node/src/commit/${REVISION}/pkg/services/tree | sed -n "s,.*\"/fyrchik/frostfs-node/src/commit/${REVISION}/pkg/services/tree/\([^.]*\.pb\.go\)\".*,\1,p") for file in $FILES; do - if [[ $file == *"frostfs"* ]]; then - echo "skip '$file'" - continue - else - echo "sync '$file' in tree service" - fi - curl -s "https://git.frostfs.info/TrueCloudLab/frostfs-node/raw/commit/${REVISION}/pkg/services/tree/${file}" -o "./pool/tree/service/${file}" + echo "sync '$file' in tree service" + curl -s "https://git.frostfs.info/fyrchik/frostfs-node/raw/commit/${REVISION}/pkg/services/tree/${file}" -o "./pool/tree/service/${file}" done