From 100b1b5128f83eff490406e44f8af2b5905e2281 Mon Sep 17 00:00:00 2001 From: Dmitrii Stepanov Date: Tue, 2 May 2023 18:40:54 +0300 Subject: [PATCH] [#329] node: Add async evacuate proto methods Signed-off-by: Dmitrii Stepanov --- pkg/services/control/server/evacuate_async.go | 20 ++++ pkg/services/control/service.pb.go | Bin 100123 -> 146242 bytes pkg/services/control/service.proto | 103 ++++++++++++++++++ pkg/services/control/service_frostfs.pb.go | Bin 47352 -> 65587 bytes pkg/services/control/service_grpc.pb.go | Bin 16653 -> 23469 bytes pkg/services/control/types.pb.go | Bin 29301 -> 29301 bytes 6 files changed, 123 insertions(+) create mode 100644 pkg/services/control/server/evacuate_async.go diff --git a/pkg/services/control/server/evacuate_async.go b/pkg/services/control/server/evacuate_async.go new file mode 100644 index 000000000..94ddc73d1 --- /dev/null +++ b/pkg/services/control/server/evacuate_async.go @@ -0,0 +1,20 @@ +package control + +import ( + "context" + "fmt" + + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control" +) + +func (s *Server) StartShardEvacuation(context.Context, *control.StartShardEvacuationRequest) (*control.StartShardEvacuationResponse, error) { + return nil, fmt.Errorf("not implemented") +} + +func (s *Server) GetShardEvacuationStatus(context.Context, *control.GetShardEvacuationStatusRequest) (*control.GetShardEvacuationStatusResponse, error) { + return nil, fmt.Errorf("not implemented") +} + +func (s *Server) StopShardEvacuation(context.Context, *control.StopShardEvacuationRequest) (*control.StopShardEvacuationResponse, error) { + return nil, fmt.Errorf("not implemented") +} diff --git a/pkg/services/control/service.pb.go b/pkg/services/control/service.pb.go index a126ce16d0c5a115340e39b37b8ab6427d7e989a..b1bebb1e27bb465a1bb508cb59b5814ec4a87ca5 100644 GIT binary patch literal 146242 zcmeHwZFAg4lICafS77vEPV~t%-$dEE&_!rP$yUTjc9_z{#wi?}W)mcP)a>Rq&=R!{ z{rAhvrvPLDRY0K$Ky-5_V!aelmGAjvRsn_n;fLtO{49$~XX(d&2Hn?L*zeTo;!WIjut@;^4L!O^GP?Y+b89d#!%|NFGR zy|=sl6W>YZ%f&c;8eM<9_#ufGpC;ot`C&YtrHlDAyRa>EH#e_GPNpM@?16`SJJI**?wiTX+}YaP zC^24?)wl&)F|5e*W^`jXk|29KTdX=Ue)(xMUXuJ#l8(}462-IS)%IrkO*V^9{$qajO9Q^pLN{PLgAU%Y?*?&ZnxFVBBJIyrv# z{N4NGllO0rUcP$$_T^DK5uQamn;T(#e}Dh>?d!KcX8~XN|6x>&>d&IxP`)pIee>Ht zUcMvE-2ZFIcQ11yIW77$nl9t$YIL1M6nU*ox4rpkwBS5#!~bM9x{4{}iQ@r(bZiUS4ip`xhE=6rkyVda~|Hb^2%29lKlE`EBdaDTOv~RI(qsnn#G?VwwXvk z^xZZ2^M*k)T`p$P_2$=AB|nx>Alcyr7Ahmk6-yB5KM5n3R~Y&0`NNy-qc|BaCfDhF z@o?)Az|x?$jC{MiI*k_(Z??7yxmqb0X$DpL#a$)t`D7ZOQ1v^>s^5tzZ`p+tf!Gtq z&3A;F$%makEJaq8m5Gu4gu1o@Usv+|eH8%~B=zY?z-Y64O=}FRfbhd4htX)WO2o{bfgFpQ6$LW_eeiVIRVripmZ;9;y}rIF z%?a1}Xnr1DI%JNnz?k|U8TMUOdg&9Qe~A>-<2`-A_Dvq`KAK;rkGP0DJ0%8>58avf)XN8c5HRygeyobt&fcExqgQ^B7@ zudRqWp*W?OA-{ZgL(o~({ZA@jlXJ_w$>=)<@TN-i>-;mHY4 zE*$)y+iz4L5ULipew$M~8~o&n+s6d7u^IlFy48nQ6RH6cpjo+cY8{5{xg6XRFuW_& zc9Q*#3xk=(Hf=J#jQ<^LiZW0dGHl=5n777rfB$=Q6a9^<>|_cruIdQlLB9CMd~~K= zu@yZlX#1VT{ZUp}uM%mOOqso!WRZ~D-T}GQfZf(+twC9*3x@zwAZTrXQUzcvqM&d{ z2{fX>Aj4Z8G={s`=DFIGU`O79cbaPimScCbNEq3! z>Z*iVPOev(fMN}G0)u)i6uW;6T_`fWyRH-&-QZGTP3W&yu!Zket$<-yD;AkkhNu?1 zHSJ6$hp$}Ve#iAfG0oAxvx0FPr?l)(X-6j8&a+n*bpNf~#?IBGrf7A!ZeTMmaMZR~2b+_l_(~60i8p1xB|5mF=a!*hZGeO93SY zR_L+D?0=IQ1GV}oG8yewRmPgsUzuTR-@h^gTEN>bIRlOp0GTUS54h_VOAywcENCop=w3-_U+3= zm1a+?k?bwBh)P5Tw}I6HmFtcyOHeM1Nae>QmNj)H|En)T9Evqm3~1kD$#^_?$$(1T z*NlvAaM7?P^j9_5!uP9cz_6>8jm#-SEHob1)QwCIU*W+0jw^>^+Uw$CI-z&JN7HGP z@SDyFzvaY$Je!}<>qRNQYWEKsA+JFvf1PDUMdtNbWmMFvmW;}f9t+0d5Cx;6P$%WW zLA9<}_=fjaD%iGbUn(kQ4K5UwnZqnE4(&4GkU|xS%H7+ShziM`))oaHT3VnKIjR9} z{1uiFg+AG;Y5fX9)-jad$*t<%V@Y^2bV<-kn#Oh1vc-!stT~{ zN@XE)$q>tjC;qySiQy>>xZQ1KP%L|0JMaVLD_SUIiw0Rj6pzAX(eQ@u->r26OD&Q@ z_H65{yz@j)iOUMCN6m03R$WFo2K87qejK7|I8^FnDdD7BS2z3<`YRl4;k7Ru4#Ngl z4#(VKmJ~nQrNb$QsvVB|w=W(JqCG7vG^g^?Lf^~U^gFV+NXj(>CARW-+oi%fR*kH~ zD6chK`uA8jej2`RWSV!d-f$VKe#KEUqrcL@M!sjI15RGCc4QGU#Jc0By5f-u;;kMS z&~^DxY`b559MeZ@E*J9|9piqti1YW1vPFk|_in8_7IeU!&KsMxhj-cGRAEhOh*LMm z;=?(v$2zjRGe{wEs@2UJ#6!Av8B#Z=zj7kBUjKUHG;VlBaZVp*L9$yqU|xb;1FEt< z$PSsihjdU_JZ7MZHbiMbCG*u5+`S_UlyY$~!c{i4$_B-_H7zetE}*_(V4nqMkR#}o zG|UXp#bU)BISuQT+DSdun0s*^-Q(`ni%b?SL#$kOO9#_E%G8$`2;4)R$t=-Jp~=2D zDUTPjS9eX7vF_c0^$S;cd~EAGmuMXoj=Y%b@5bcc_%eS~-uUh0t5z>HzR2iz@%<7{wWIaLonTOLgeHMp74v9Op>Z3YjW^GX( ztSLR#hkJ28-0A353q%?T>9ZINa?ZP=Q747KLA9<3_=fjb0Pe*p?}}Z6!M`$d zprt|Skhen&wJxaKy*=PpNcOZMDEO3@1I3*?wic)gHW=Rbv9;vltU(_kRC zW)0N4mrhWZL{NRZb?5fTZISD#Uk8tJuby#6z4(^z3#mPOTc|;ByQlu#*2It8Fn^!W zJ;>STvbr7gBHRNvfSuQfHqds;iVIF?rut}%CP|G!SeZ%})B zT65HC8Cre%UylrPI@+18S&!Di>ZIP*b!(M?nLX}1-H&6_HQv8v3CcofkQ!7zM_r>< zKoNrIeN~~%FukmQm?(b;*1Re;na?PT(q&Rw1NnyCt#wd?l;5Hr(aNZw^-zPZ)vDAm zp~rR6-XN!~8}#dBZPdu4t~`ZJ?yo|L8`l0Hc7v6Ji&O)hVV<7sm5ydN3Pl65GujPf zZ(pq%81%Gm@^LM%oqXf&*!rnS%x_e)1}|D!lT$uy(PW=K%hn)gxSJI0xo%~4U#)Oi zvwN&u_u_bWQzUdyx-x$avBugf9r$ii&st|S4eqmgWkzBdCKoeW4K3pCey}{9UzZkK zrKQ$!b;R9TW%&ghzF76Mw(@IOT~_(W_F0++IWO*4t&^fuN4~BcHO}j?5Z#Ltoc@hUG<)W5^v_AJs@We6{ImRaB#6V7)=h z(r3XL1F0`Y14t#`Dl()Nyuwb7MLCIGcZ-y_&>R`mMua$a{T# z^Xum3`EoXn9^ORXd4#J1v1eePAUw#~Z;xJ`wESM$b^U(*q#l9yUYrK^ST`7SJ@bcY z^LHLactY~S4-o{(Q3nVou!Em9wFJf8Zwxz|8zi=Q+-`n`HK9X*1aR_mtkGl^y;{tZ z^wn`Ri__2Z#mDGsbiKW~@itEB4>QyHhuRPMG+In%=_B<4CL%)9P8eL5$)kTK^Vu_8 z0;NX+kNc0}+4Abycs@%P^Xayx{vhHxPaoKH=2w$6zPe7oJouL=Wc&aw{7X@mPNVDV z>0~@g=|uxl1Y?aN)<3F>sIPfkN`bKy!KE5SH1$jon~qk*TM<;?G?WB2vd@|@$l-7p z&s1!sSocN2A|6~7sleawBTs|0rgx*6mm>5w{%qGB zqlCAllFF~SREesSBzp7w_1kwZ-#&l);^m|K2h!18B+=)~n0_;TLDiTlY&;vy#&I-B zgfacH`uuZz#-G>>}BYUeBWOD3PB~qigrNvberSoVyACIP%Agn{Y9le_ine+LAgsY5t6fH@H zf63hwrN+Oa^Xce$~Wb)|Mm- z4T;D=(P;K1nv1_7G+E~rTlJ0d{^@)^b=XJsEEQ9u0h7y$k}+V`p;TvSi|H<nodDy>VcNW6n5Sly;? z!3^CRXrOoY1bHLXBuyC`NiIRhx<0BrM@x1-nkF&#OrEX;O_N&aR|HgT6%~~`u*X;@ zVE|YwefmV}K|XI#Z;CFS`ILK9Wxa-nKFu?G1nhh9A%r^bua4N3hlf~g?q`rq5S6{F z#m_qo+R*!B=E=v=Vt)PW>A&M~n%tqq(my6i%DwSiB#TC8XAA0oBx!5$M=VbwFRPedK$`v4xjI_Z7AwCnob`bj-P=)L$RfXBMQ z=;@h1Os{*80cYM_dc~nWSAh#Pl{viBHI{0M?kQ;_&vca8`ybLj*5kD*D|e%fv}~oM zYrr}+vQMxZ`yV+d za7Q{tz1QfLtqMEtaXo_0{vaof-D-8xVEIVb0Z#3l{@_Mzz4ph6-Np?D8~5~KnyW(# zYJha^Hb+aT5b@h}IkMDbsd!l`&(Y>*@&8Jqgg;f0@Z%}@gL=U4l*h*WRGWQK3*d5yQdwrBatDs;8sV8(jUs%`e z+sP~%jXgX07yaX!-_+jE9$x2TG{VYLezFC@`Y6rb4yP9;=v@ZdYfNI^MPyq=$Lu5d zOUYs0J5bNnuV}2{Yrnae&(Fk>k!4X{(d!OTLdSe3=U?arjr`S)c(I^I|Ks_RUhr5@ z-I*_^XGTC4b%&&+t%Epy$>Uy_VV<`D_8-l!Q*3wA#;QH1WU}ggEwJvveQ{MSPri|T z)~8|4r+QMWlTO@cwZ>;gdEDu2@4rOdkCUk$j|bN%zgLGSQa@ITlwTfxuFnWa7#q6T znT>Z;sk|!IGGw$RW_bkHzGTRQHK%;m$?-4Ge?K~T^Xt(|&r6TBLR4UtBx-ztpfX8I zrr#i-f!FgHz5C{TK4%N2nwW356!K%f60ZsL)zCgsf0#p}76vHIdVqb4dfm#z8#w&~ z|NS@~>T~*v$Zt7z2Rny!Ol6PD$jp8kE#}}c%4kt{wv6p6@Y+l-5!;ipxa;bvO_Rmpf0gAkXy$RV>P!253KV|HO`Zr zIN&ESGYDG83}ZF3ouIckDl(|*e@7boawsSX18`oA?i1(-Ici$xtbUMQS+6D3S7-K! z_4ne~X`T012Ybs;gP?tW{rz@}U5=DQ{j- zUc{rbNH*yCiEy?vPkZ?Dh4kdF^BJ5-5}!c6+q1Z}+;j ziss&-eM0#lC-JJTp4Yy?@a?5A%xg2d)dP4n67{rAU(Znk zT*&UY9h>aJ zsK(M_E28FQpjXpnaw(rI{GV3;U)Da6+cH(Cb&u;4W(PU6=T@r|i1m@KYm#f{^a!o@ z;>4cYxWTaMo<2}-Ts^So6Q|q8Shi76LELX{Xfaf!`F7o@ev0Q2t{&Z#7Jb6oAjkB) z2I$~Taxd*rfK!I<|80$XaYoPMl9eFN^3EV_WAG8ZqxqOV*LsIKxwp%!Q+iuj&dl&8 zseB=hKlDc5XOLqw^Xqt#eS4Lj7LJ#TMLZjS30y+w<0}j4;*MTU^Q+#nl}j&7C-G=8 zzKr781-(Qf@|-R4C0Kf!0$;?S53QX=(|GiWuFR(N%{3Z0o?p{f!|7FP{shHQHX~$L z7hkP7$+?&h-r{mWsiaDEmR3k(de!+=IIoWB5y=k*Ir~^usgowvMYayVz2p09PQ|`! zf8Mcb*kIJIP93Nz%?~=}>wK3ec%veNywFvCj%<~+eiO4YW`%6jmgi`u;hVLY_NsK= zjXu~Rm>)Ei^nIe{ASWrEig(caI_ZYsrZR5tJ@3K2I6dibMQh}=yfR3yn;)BOdQU;# zkd>Dd%pNLzwD=BnzORqu>%Q{NuAJ>0_CVub|AmDn|5kCjX-1!*J7%Xshk4^FYICj_&3Bf?$?5{yk-*FDHLBrzIeAnj@Lm2D#7ed--J$|(o+U+P+ zpYKLP-6&=#Y%9(B#O+}Y2s%SbY1kuhTU_cI@c_@s^d6!6ejFTZ3Wi%^x8?9bz&rRP zVfF;BXxJ&}=$F6lM%%9UQbQ!IB3a0+KEZ5|b8jI^c7kVNjOrk*1%)0_?Oq&-3o&&t zu!RsCW+!(qKP1=qyx%XhLga7Pq{$hIck`5fn<;y`MGwK^PowdYf7w=EJ*D4hq9exi z^F~Yl^{9w`8F4Ycnb3FC>35!zV(?k?zoYZfWJ=#idiIRIJ;XF=_-vj=7t7INL?0-k zTcdOSPSJQyzmgl9A6Eo>@5yBKcB~LBJqg1#{q&0;=VdR@o#kplmCcRfj+di4s-0P) zd=|X8UgrD?CdjOru{D>yJk|MY7_p?Lxme~V%l?RVmBRLs4vG)jC+4FqD}5Nt7?JkY zA_|5v|7KMpHJio2FLDJ1{)rh}J@@js_!bo?8++K_&T7LX`@EJRSGJ@>rL$%J5c7<3&k?}C0FN{14JZc7IeTrqED2ilPmg7w$T;;@ai!xKTkvDeLtJr zyvqpaSJWZ&lR{|2@nmFv2EqLMdHF{W)VPWs^35`mmVYBVqDPe`n>d^h=cIxhYBIm0 z&G_j2sKSqhTyiYx#1KVL%OyjiWMg}@7BH;eQ{dgE;ZxK4?Dz&b02`DDJ-2+yp7k4$ zfx`B^l)V>cV}oqnLDy$Fe~2aRUVd6Of2JO!t87Y2mt&sh(-&Ck-r1L-dOuL!*v_X4cqoXbxLMrwVLIRfrJZ5CgYaqc^WRI-Tl;wniKCvR^8-~ zxB(wB(KECR_?!u?d{~#F7sRs7{Hj-w4Nq)ikVwmM%5arXaL4$@75$gm{&YT}Rou2| zusBlbJBtZ@4@?dY$;e{Vadv%kV>$acn}43Yn#5Cj^RpQ8USHqb-1sL}oSqL>sb!%o zO-l_PuHCA!vn{b=n`aa0v*{b;sQd~cG+Ya4+q#2>&`GezJ;8f%@P365>b6-ddv&nZ zG5fS)yH2hwF4<3zk?I9L=2us*WTdVW+40Y;=JF4~Coz56kbkZs{c;@#_AdGSZ&)CX zA-6Gu+G%n8>N|#(iiAh+q$Fa^D>C zCkAewU?iVjy*cE!I&Tj3UHKcc=sGhv6cUH@dJs+KFR>UB=K7egv}LmgYCFOJ5`i2T z;BWaP;?0ieVPp&tWf%4kOOQQ8gYFE%=CXxg23mtdZ4j7CtZaM(AHd3)5lSZ2HXy$; zgCB*^4nMIp4u^3L_)LXy?4jHRdqYC*9>BeNB(8{69)p324I%MFWHeV~D9C~3K12~K z@5tYW5>du1O5dhi!_9Z}(ygNUM22bD?7}@@Q!0cfLE2IxG2+SVk17+*R^kEIcvPT$%!-J&H6J&z|ZD00~mds!uL-F4; zDKfw!$OwSLb>OAI*<*=4c*2w*+(jH>F1m`mIFRCw7#C)!4ZAWek8v7bs=#bIJH%N7 z6KWw+BZr}rOI~7Na7;W(t&sSj-V^~uO+l@iI;5fn+L~l{RtPZ>>hSGsO$>~wg&Nuh zDp_J8v6pT}kOwufQMR>Bl(^2Ux6v9ZV;AfQ1yr9{V7q@q&H#BoNGaNiH4Yj$Zb!Tn{q+iZFF5 zNU>~;BVCh09kstS#7$sHZ_>Tz<@kgLYS3)NF}f^2N)%gV09JR zbmEnLtkHBHtPIPffk9>QT#m|OqTu%Z4w=X_0A?!z8Ytjh8JyYG@IJfGU-TOorVb0Qd`d&7=y^Pl7b;5Xbix4N5DhJB-KY1Mal9kjJFkm(iOAJ^tT3wjR0UxtCHJu0i5fG+17D$+O zVG7d2xlJexMEzSr0x@tRg5-fX%5-YMN!QRcX1L1?I)MaswM#hB0Li8Dc?C#dA1DfW z5oHEC_2nys*ZiLH@{+8FcW>(o>%^CpRTay%FfH31zWCDPvdzT~Q5=iix~tX_GO+ z06C0^u13_Vt25U79B3L)#8+6I5d*RZYd{ZW3p=(dq*a^g0(@3J%0ipX!MY*HZDa( z31f35lZ$<(imTbEQZ*6aVVrD`1i>mqEo>16214YncBVI15ZpnpJpfx^G@w>iZ&?py zkFM$h8_4GjD!MQQF>_i%oD7&1SxQL4(;%Zbe+3}9b)v!6Vj^ehWd@zaz6%A!L@)w8 z0e8vY#vn3n#ol5hdGG|=HtLa3jwB@?AXs;Wr3qFskzw!364n6w%*bIZeVnL5%<{!4 z{cZFU;TjlNq~Wg0-W6?gvo@7nZCHljL0xA~_L-;#Nl0q*&Vo+^Xe`+auj~SHvS5)Y zQf&)T|3F2Q0W~oW{x^|KxRN?fgPy&GUH598O|)pMdNiRQ6rXU zAl$;`GRrApZ!M=JpGr_KVG0wuTtt%Ad&mNI*Omk`z#xP8)c}RNRDhZXi%J8BdG$IO zDg#H`?n#skLK>H9U*QA5@+}QQ3}BBO_QgaM^;f`sBJJ$2gaOJS62yb74UmvooY<6F z9;HD)4J0$@1ozoQl?Wu*R~o3=i@1taZX28t5{MH7tMzP90#`!|-4zC?S=o+1$?_P? zGQgrMhz;m!k}IT-GFYT)Sz{wb%xcn#?}~7FRw)w&J2}uethaevvs2^bDaH)U3P-uO z!xUo%#>xGpn9?BF`fYb6$sX)vCx$>l{%^g0;=jj;LlupAXC+ajd|;47h?>?4t9TS8 zz@pOF?AD`clxXTaI0x;hi71GASyL&j6L!3=y)1uQrdo0d8T z4p8_;$Qeu%pXCjMFaSovzACGY9br19lQE-8u{~kq#56Gxh-x+}#a1v2nRD!d&x(cMNrH&a;{s z>||+8HtjsCnSpt%Q|&$hg3u3UL^#ObfmzKAeCw0d-t-!apn2^R6G=J5lVsywM7_w4 zD~K^j-MIMX5Qo{ZZ>llJyRr<gkBGs45U)+mk(M>K`%Z4p)R7H zb+YqD7(hWO_mAao9alAdXJHDo3a3aPP5tSG7pl1^~!;9^U?3MolBycd%GN2g5 zB$^V-yuEMEC%2J^8H+)l=w*n+p%cx-$r9s`%YrjFzqZCX3KZZ3z+Qb47+&bHkjg=g zG;?BFp@G%7w*@u7uEIcKqZ4Q&Jxa*N49u#kWyx%ay=*6g8FUD3>U|TKo?;@G zb6A^};NeV9VbF5Nt7bEw#j?%I3~H9qJV8YlCbwEeGXrdY8wGE-nNI@kph{=v6%zsf zRN+K`ntlSoDsDIBUX4U7)j+psp!$YeZswB)5CV(|BALNY2u-oI!AME>8jK`Dfq5<_ z64JVx(+`GBup*SjnDCYbi2lxl85pFL$+|Y&emS*=XE-Y(C0iVztwI@Basw77G7%yZ zZdqiAac)3nP`^pjh?hjJ1}>Ek#8Jivk|u$8$%gX7B{S%Je}Y&VAAGZ2N9Svi>^fwF z!b`L>KOw|*s>;X%95OK;muY!;F*y}{z|j?=OTrZSi4IxEH6#Vt$z3al!Cvm>LCFr6 zSxDXkeT2Iv)M#4xx&a^X$&*(!P&fnr8kVhf18N_13NtA)Fl$Otxdr5fnN&1@M71_u zIiE!X$y7ZC;lB(V1|!oH#eg$`(6hLf($p!!VTB${|dCmo7ULv=$TLRMKH zE%cF-q1KxSFd(1>JB|KgRX7=aLxZcebYX0mfiZ$eWY|Dzji!)P%L@h)AOK2BM9CzB zrdI2yWeg_@frO=TzO0%kg~dejk7}FcU9O4{rVc_9)kB2@ z_9r*l1RKGpP`>I3lgfDT%waPi%m_OTqOr(B|mfxXoW&#Uebmc80ml{VpHQ@m<|?K z1=W-qx!$Om_(0r?-@OSZjkPga8>6Kdxl~q}0b)GwWS|=T7q4q$GG6-xoIDmn$Pc`; ziI*jC1xac~;(;}I;`b%YAkhgH2byAxnJlix-ym)7iWvG&f8Q>9tC~(*Z=8|yMs7VEnV#!!p z*st(Jff?vEFzV`RMbv3DW`G;{i2;(jL!&7ZWmY2wRii;CUu$e&&SgesV4h)%i&lQ> zTIem=V=xL}=cr1m)kPkx>=iK)x>D38lpUB$RJOW2kYFyXb_wM zd43Xu!1OFkWJL%ZUhA8{jYDA|)^C-cY$BP}n4Wb$zz$0+?nT#RvKlP`@<3&eX@6|J znSsezC6ReH0EDR|6dD}EOmd>;C$+>xQlQPT7ZhuREJzCpU~1`&WDegD4NNi7qy@0B zri9|CclAP8S(25n!pVC5g?-+@mkkR&6bj@<69%`J7g*o|#6kmD86Br_pxD<60m%>g zAt06-K>^gn`VM9hHaU(J8u)tb#^Y3+6Lx6Q75J6d6dHg*E9qDdNR7;gPGYXy;mn}^ z%k^+LkY|O`&kSy9<$67oiTshkBt(4#f+LeF;D}C}ntNdY7fB}pLi*KzUeU?Lp=AhI-q zFllKpSO5;?Q^TbRee(-%$VRvkwzIQQJB~G z%kQpScH=FP*LX_|RYimh?6Ng2n?f1N_ia0qbgH}{F`b?h6QQoE2~Js9gO;L@ZG-`w z23O19UN=f%DY=mu`@P5vFrh=Kb8k`LG6UqWWkF~dj`z`fQ419Wo z=eGFL`xYQCZYv9aX~Nsh=?SR zFz`s!*5SJ%VkvNiK|iu{5c>*_C3~=wfvIpZw)c&RP-;wS9w%0IfYS<=O!Xt z?iDeSa&mp}t)P==5Q3&F=|nLp8o*s4K`Cr<_1Roa+A{-8SV4Va&A0C0u|Hh-2v*td0Zz5%+5lN-O)!eV8D78*Dt z6`exXKlJ;sMAUdo427rA6q$tvruHJOBr4!){0Mnt#C!#)JUa}%*X#4=Kg5As%sHPG8I_=y@^ zF%y8Ml8pKXZ1#jrzStuln4FieHrwdt?Hn0uZUZ(XS52si!$Hol2QXlk_8erFD>#iq z{hjgwtSS6K&IG9Js^IvAxh^D3EfZ$G2O4IjZ=}OC*f;AeS#c#V8cXazn)flK0_rh3 z-09n7n_o9KKaCdA!_AHJ$uvH>{&;bc#EVapah#lt=d*M%pJo?Mt{3xkezF*SK8lm^ zud{I+C0}OaZT_qE^rKNaik?L+nQm@vZk{h^|7#g1>DI&9 zWNL9Jcv*iDl=t9d*9gkCTdAJJf4&w2+;87*SDp*&;#W&;+J>(1V|1n7rzpbTb@t+j* zD}-2jeX*VJO#MeU^+I^^yyV`S`B~i3_(cAvg1m!}i62G3l>$V6SLL?NKxsf#?{YDp zP5wK6w}@LQ!5mZ)A3G_D7UetPiZBnA$rT=jA_o3qu~$1^FcX!|E=sIM>3X;ll4!ds zo1K)H#jEKuxqLAiU$%0DAS)}OlDR^uOumiyfQns}%$j`RgQNL4oiExMUxbH+R5DwX zSoG{dOR)_M?W#<+DKTxr|3$fm1}ec;*JFi`wc*0-G8!H5JQfb{l ziPiECX;h7wsr+uD1S8I`OASw;vl!C%RH7fJK1yCbjS6MCxTn(H$*1sDwfm8lEu`0B zg;dg4DM`!5+E};1JCqAEQK|2slyh-+LP3m}ivj>QB|oEZm6(x&g9;;1$~js6k0ei! zItF<56gX5VxtWBkVwmhJV6d2!RME{)J54xq_7x~pDCL^yJM9z^9tsPplyW9^Gt){H zRzyQUwSn_+X{8Kv(Ewm^DS4&R(}e58Y*hNYDHZy-+pv&uW=0AEDvU}hmHL}-g`^MI zS1{nBlq*!a*~UYxkOBcGrJRp$cG~Dd>B)Q)1XL(Fd9+akJPs5BXdWfMWUWt2B@E0Q zC;+f1npKITlcVKA zw$d`*9HN}e2MRR81js0PTgpb~=DZb)S|twLEri6$jp=G|D{=3UJc8a6UY zL^j_CYAY?-i7l+)Atyzf=KR1Uba(qKzJ7gn!#n1(3BA8Z+s}N)o5-tZvDOC&$y3@l zewxy5`^ju{6-VFy-+as2F_<@*H#Z*B<5Qxm;=(aB$%4*JTt(6zJ@O)QDjqCyCYS@| zv_jtqT8RgSrI}vEHJP+J)|OM{SaoO%Dd{mYTU4c(Cf8_C$6#Adm0OOnEd-_K11h+OnzaDUE9(9Lklo zQRv+FXfk5WE|1wq$eM1ILv@o{=zub&_XgdB8_iui%{IQuui9BH)IfRD+k*bxiY9k7 z&9s!!n}kghTj+zzcc3!TPrT7JjZRmn8z5q+HJ(G9EP7-;!&b{Ga?=kUF z05*_HZ!hsnd6lk~IOY;S(7S!KKLW|EZ94ZlUW9KUH4sqm$T=1)EwS_`ve*T~Xi=ft!VFb?1 z#@8=bndlX_Q$%Q-B)!YVBI0ueL=zwAF~5E;&c!Rsc|< zTV$4pY%w6GN_B&&9;z+Z5>=gD9=du+PI(u7@1fdsEmOAFfWe!jLnX6F5M_mmmC{r~O%KpqPfW$|*7*WvWFNd?p44QljU!(2_Atc(t;`dDrdn9yqi+o=sPktv*fw=p=|CJ`&^XXZ z@iMmZXQmHCd`kJoE1t%B{=9WyiI1IQXu*k(C$c5|IbFbtk3lg)(M6N?#Glayc|1PJ zpeI8JJ_k#3emMN`>5n^qM3W>+FX`Oa^7Q*D9b$;i=ZoknPA}(Yks?U#1=RcS`0(lB zkG0c^mdKj*_|QEozDeU*LI-}L{Ml;Dc|zeVE_&(@J5PPw&L{EoOmU*qc5-}eGMl7) zjx6{wvYGI;-RZZC&F04BJbD#&zAyUQvxp8P$r(2sEu&**bqD6yj)^%N2!_J$Z^hBD z_p@Yl9>1K8PN(r%tHX2I*{}~ge{8?Jxt>%1z2H-Wd<^eXqz-jGiYENeEqzTmZ6u#3 z>G(4G6g_;KSXKGL@_9wjk7mghgSV|9Q3v`u|~O5QfNcPqE)7>FD{ z$cOBehb(6wXY3Ty&hSoD0;U3t@Hoq}n%yN0`Br}YY`?z-;Mw$fUKQ+G{w$x7=LOx^X|di!gw zBB{HcTbpRT!l=8RJKOPGs}Sn0;m*vnUg6VWx9xn0u~xy?(uUU%)c|9RCq zh1XtpeYoFX>lI?%HRR4`lxr1T-L>UTTdh}Mb=RD$H&V=7G5A=)dOWM!>#jw&425V~ zD@%3PsJkE8t(CF5YuhWvTEo!lu8FTczFVuX>aKye47GkCwclOyUU`(aP7$@=UC*xV zw1xrIVXIy}*uGXF)nTJi!W36Fmb=R(!o?@+EV0G85 zmrS*WVbxu$t{-WwUrcq^scSo}UqBsn*QjR?xYjP14!Ud7GaId8Aa&TFJ0EVXUs!e6 zs5>pThC$X{!|s2?wSIxtUFYt%+8PF1cP)I7*-9TSUXKSn2i-OIVMffpZ?Pr^wGO&# z_??ek*AMKv>-?PtyX!bd$0p^oC^u1(E|%l;Pr5)Siuu%MaS-(#9aa60*Xb)#%#DX;rHpot#3Yo8`4To$$$l$R zM1-QDRPx`TWIF2SAv02;bh2Z!MCR+ZIQ=30mgcL#Gt$rawE8xWt~(iRen{2+-Bdch XEGK3V>*oIl`pN=4 delta 3747 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 diff --git a/pkg/services/control/service.proto b/pkg/services/control/service.proto index 32a87c744..ca35ae043 100644 --- a/pkg/services/control/service.proto +++ b/pkg/services/control/service.proto @@ -29,6 +29,15 @@ service ControlService { // EvacuateShard moves all data from one shard to the others. rpc EvacuateShard (EvacuateShardRequest) returns (EvacuateShardResponse); + // StartShardEvacuation starts moving all data from one shard to the others. + rpc StartShardEvacuation (StartShardEvacuationRequest) returns (StartShardEvacuationResponse); + + // GetShardEvacuationStatus returns evacuation status. + rpc GetShardEvacuationStatus (GetShardEvacuationStatusRequest) returns (GetShardEvacuationStatusResponse); + + // StopShardEvacuation stops moving all data from one shard to the others. + rpc StopShardEvacuation (StopShardEvacuationRequest) returns (StopShardEvacuationResponse); + // FlushCache moves all data from one shard to the others. rpc FlushCache (FlushCacheRequest) returns (FlushCacheResponse); @@ -298,3 +307,97 @@ message DoctorResponse { Body body = 1; Signature signature = 2; } + +// StartShardEvacuation request. +message StartShardEvacuationRequest { + // Request body structure. + message Body { + // IDs of the shards. + repeated bytes shard_ID = 1; + // Flag indicating whether object read errors should be ignored. + bool ignore_errors = 2; + } + + Body body = 1; + Signature signature = 2; +} + +// StartShardEvacuation response. +message StartShardEvacuationResponse { + // Response body structure. + message Body {} + + Body body = 1; + Signature signature = 2; +} + +// GetShardEvacuationStatus request. +message GetShardEvacuationStatusRequest { + // Request body structure. + message Body {} + + Body body = 1; + Signature signature = 2; +} + +// GetShardEvacuationStatus response. +message GetShardEvacuationStatusResponse { + // Response body structure. + message Body { + // Evacuate status enum. + enum Status { + EVACUATE_SHARD_STATUS_UNDEFINED = 0; + RUNNING = 1; + COMPLETED = 2; + } + + // Unix timestamp value. + message UnixTimestamp { + int64 value = 1; + } + + // Duration in seconds. + message Duration { + int64 seconds = 1; + } + + // Total objects to evacuate count. The value is approximate, so evacuated + failed == total is not guaranteed after completion. + uint64 total = 1; + // Evacuated objects count. + uint64 evacuated = 2; + // Failed objects count. + uint64 failed = 3; + + // Shard IDs. + repeated bytes shard_ID = 4; + // Evacuation process status. + Status status = 5; + // Evacuation process duration. + Duration duration = 6; + // Evacuation process started at timestamp. + UnixTimestamp started_at = 7; + // Error message if evacuation failed. + string error_message = 8; + } + + Body body = 1; + Signature signature = 2; +} + +// StopShardEvacuation request. +message StopShardEvacuationRequest { + // Request body structure. + message Body {} + + Body body = 1; + Signature signature = 2; +} + +// StopShardEvacuation response. +message StopShardEvacuationResponse { + // Response body structure. + message Body {} + + Body body = 1; + Signature signature = 2; +} diff --git a/pkg/services/control/service_frostfs.pb.go b/pkg/services/control/service_frostfs.pb.go index b9b865a90584cbb61b5a30056aae37d1918230ec..979c226859a0ebfcd3a5333af683f48efed362e7 100644 GIT binary patch delta 1743 zcmbW1&rj2E7{=3Oh!V5Ne&dG95Z#b0bKnMsC>WX9fiX8AF-llr-PkhLrR@wF2$M(% zhehH$JV>HTObnbD=|K}toVaNA2dE709^}Tw#I|g(z}rMU_I>(3{e0hk-{)Xo!Dp0( zgU{e!S=0tOlHr0ABopp?N{**VE=DI|%b*2&LC1%te-d(Uti$&!CL=nH($nqGk` zcjt1r0=qANpe>N{BynNy$+iYNK+&t??S+pr@I`MsymP%lE%||vQGt2#WY@9`H_^R= zdckihg;~M+(zf~mb!zOJhKmw4u62sch{R_a%nGCqnFby2o10e{Pk&1I>s*=@2X2rN zf%edt>Bi+R?J_NFfMQd0lBGuP(cx#KL&@0GU~H0NIdU=uy{$Ji-X!Ph2*#dM)|+it zrtHIHBF%5Pmx=!}%)o~l$q+(WlT!48eTNQyEzaBjj_-b&IlS!xn*Ib@kQ%3xVV2)$ z&Jq7=cMRspnQJ5?$gjS|hUvGM#65%EVHNlnl9q6u7ZiI=1dv1X;lxK@j6(`YU-*W56g{5koCFi z0_5H!4J-{^6Ch`dPAJqHOakOsI`Wu~L|BTuJyMMfv)NX{E%ux}B96zKE(ydZTl$Xq zE4KkVg0Dr-54dZwt>JwwD+;-#c->vX>`K-&Rvxi^)dV>@g`}&r<}#vF+;dEmG8GlX wNW}zk!O^-9sAyftQ#C?diBq(voTiv2g(+evWhvGGLX@I)AxRM*AxQ810Xo*FTL1t6 delta 9 Qcmdno!1CiG(}o{A02#Ffg8%>k diff --git a/pkg/services/control/service_grpc.pb.go b/pkg/services/control/service_grpc.pb.go index 3fa1e54dea1a986d8b88cffead75e1f45ac1d718..96642153363125f6062c7ca65bf27631ad2f980b 100644 GIT binary patch literal 23469 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 U4+~d}->id`ar=j_0m#$n|0xkQc>n+a delta 386 zcmZ3xow2uxaY7uU(ZqN;7DFRFlZ}ll7@73-C+}w$-~66!E9>N4>aLqJ_`8@UZ(@_= z@kmX~DamloNKMXGnp`NHJGnz>4@hG26DEPpg~F1IK#tU8PiAhgq=M)QkR-QHW^qYy zMq*J)F+@|W*aomBb{1Z+x+UTeLo!$d!2DklTfp*XSopyFMRH(sCg-q$%*~tpKz=$< zUIEDV+x${t6U*jZ>O0ssCmWq)0ck^Z