From 091d7d30f614e7538aaa3b5a59bd90ba1fb5d3a4 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Tue, 13 Sep 2022 13:28:08 +0300 Subject: [PATCH] [#1731] services/control: Allow to evacuate data from shard Signed-off-by: Evgenii Stratonikov --- pkg/services/control/convert.go | 18 +++++++++ pkg/services/control/ir/service.pb.go | Bin 14529 -> 14528 bytes pkg/services/control/ir/service_grpc.pb.go | Bin 3854 -> 3853 bytes pkg/services/control/ir/types.pb.go | Bin 7734 -> 7733 bytes pkg/services/control/rpc.go | 14 +++++++ pkg/services/control/server/evacuate.go | 41 +++++++++++++++++++++ pkg/services/control/service.pb.go | Bin 100537 -> 111461 bytes pkg/services/control/service.proto | 30 +++++++++++++++ pkg/services/control/service_grpc.pb.go | Bin 16664 -> 18306 bytes pkg/services/control/service_neofs.pb.go | Bin 47260 -> 52696 bytes pkg/services/control/types.pb.go | Bin 27109 -> 27108 bytes 11 files changed, 103 insertions(+) create mode 100644 pkg/services/control/server/evacuate.go diff --git a/pkg/services/control/convert.go b/pkg/services/control/convert.go index a4d0bced..373bbabe 100644 --- a/pkg/services/control/convert.go +++ b/pkg/services/control/convert.go @@ -184,3 +184,21 @@ func (w *synchronizeTreeResponseWrapper) FromGRPCMessage(m grpc.Message) error { w.SynchronizeTreeResponse = r return nil } + +type evacuateShardResponseWrapper struct { + *EvacuateShardResponse +} + +func (w *evacuateShardResponseWrapper) ToGRPCMessage() grpc.Message { + return w.EvacuateShardResponse +} + +func (w *evacuateShardResponseWrapper) FromGRPCMessage(m grpc.Message) error { + r, ok := m.(*EvacuateShardResponse) + if !ok { + return message.NewUnexpectedMessageType(m, (*EvacuateShardResponse)(nil)) + } + + w.EvacuateShardResponse = r + return nil +} diff --git a/pkg/services/control/ir/service.pb.go b/pkg/services/control/ir/service.pb.go index 73bf274e2639a6953fb4dab1d429d078cd52d8b4..8d3c40a4109087cfc1800843111ae4d06509c734 100644 GIT binary patch delta 22 ecmX?Dc%X1X0i)@}LcfU*Dktt!*c{22VGaO$1qtr} delta 23 fcmX?5c(8Cn0i)5xLchtDjPeurR&S1A%rFN4c@POl diff --git a/pkg/services/control/ir/service_grpc.pb.go b/pkg/services/control/ir/service_grpc.pb.go index def51dacdfde504bc9c4426d8f6f0e8c073a2d6d..3753fae5c6801f87edec381afbcc77add6b93604 100644 GIT binary patch delta 15 WcmeB^>y?|(z-T(LF=68)9Xyw+%z-TnFF=68aT|NLV1_jvw diff --git a/pkg/services/control/ir/types.pb.go b/pkg/services/control/ir/types.pb.go index 4d18a2266830736ed33138268bb6373b1990101c..a71db096917d163fac09c8e5c0b86d34ee3fd2da 100644 GIT binary patch delta 22 ecmdmHv(;uo0i)@}LZ6BEDktty*c{GyUj_hifC<9@ delta 23 fcmdmLv(08g0i)5xLZ8XzjPetAS8onuye|U)ZwCn* diff --git a/pkg/services/control/rpc.go b/pkg/services/control/rpc.go index 13751e69..20b4df98 100644 --- a/pkg/services/control/rpc.go +++ b/pkg/services/control/rpc.go @@ -17,6 +17,7 @@ const ( rpcDumpShard = "DumpShard" rpcRestoreShard = "RestoreShard" rpcSynchronizeTree = "SynchronizeTree" + rpcEvacuateShard = "EvacuateShard" ) // HealthCheck executes ControlService.HealthCheck RPC. @@ -186,3 +187,16 @@ func SynchronizeTree(cli *client.Client, req *SynchronizeTreeRequest, opts ...cl return wResp.SynchronizeTreeResponse, nil } + +// EvacuateShard executes ControlService.EvacuateShard RPC. +func EvacuateShard(cli *client.Client, req *EvacuateShardRequest, opts ...client.CallOption) (*EvacuateShardResponse, error) { + wResp := &evacuateShardResponseWrapper{new(EvacuateShardResponse)} + wReq := &requestWrapper{m: req} + + err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceName, rpcEvacuateShard), wReq, wResp, opts...) + if err != nil { + return nil, err + } + + return wResp.EvacuateShardResponse, nil +} diff --git a/pkg/services/control/server/evacuate.go b/pkg/services/control/server/evacuate.go new file mode 100644 index 00000000..8208a00a --- /dev/null +++ b/pkg/services/control/server/evacuate.go @@ -0,0 +1,41 @@ +package control + +import ( + "context" + + "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/engine" + "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/shard" + "github.com/nspcc-dev/neofs-node/pkg/services/control" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (s *Server) EvacuateShard(_ context.Context, req *control.EvacuateShardRequest) (*control.EvacuateShardResponse, error) { + err := s.isValidRequest(req) + if err != nil { + return nil, status.Error(codes.PermissionDenied, err.Error()) + } + + shardID := shard.NewIDFromBytes(req.GetBody().GetShard_ID()) + + var prm engine.EvacuateShardPrm + prm.WithShardID(shardID) + prm.WithIgnoreErrors(req.GetBody().GetIgnoreErrors()) + + res, err := s.s.Evacuate(prm) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + resp := &control.EvacuateShardResponse{ + Body: &control.EvacuateShardResponse_Body{ + Count: uint32(res.Count()), + }, + } + + err = SignMessage(s.key, resp) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + return resp, nil +} diff --git a/pkg/services/control/service.pb.go b/pkg/services/control/service.pb.go index 96a55b3791342d4fa0b5a5681a1e61519af71f24..919642a90cd927ccb752f8fe76ac2272f1548013 100644 GIT binary patch delta 5514 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 delta 3342 zcmZuzdr*|u6`%91yTHD93PyvhO{zf%?C!U_Jk%(P8bMeP8a2K^U80}@it&NMYC4fL zh~lw1YD7>+G#W*_BWM-HQln;y5@Ve<9W65bwgyLgJveuJ5PE~O=&jM>=ITdyWJ9;FsOGGMZJP$*MSVUiL@HkH)iyKMjYTy< z*tXSxtyR%@tatsSs=zmOd$ok-Y7YkPid6FS4h_e9WaK=z$>eFueB2%f5n!;B;& zmWw!Onqk0*Ju;)v*iNG!2 zsPj9!ciqQHXIBNQ48X;I{F?nlVEt_^y1zN;yMKRphFP}9TCA%VB#K|FlR8pijHD01 z6FtM}hctMJ(kFsN0J|SrX!ArEE7r$!hDgwK?xk<>XE#y{uuwKpOCIgvy7 zG&4ZMvS2VB&VfOsw}6rAH84!T7c?-O=1hSkGLHv6opnQqkWHjZ62yx(1*9LKp=%!bgJsgSCanIMZY1p#ErP|BqINU+dX!7z}vj)s>N@+8}Q41PR{t_|dvZ^v=w ze-43A;qn#orf`HsnJ|P-gmCnGZm#)UBx6?umNy8ZMJ0)3kK&rT(!rm)Bu-lCNu?V` zh#HnqXBv#8(OD2nlcsafUuH2URU;tfnFZvNK7+|G%I5TzWUz~;F<^Qzhfr!yNvxg9Hwi|E09c`Z-F0q-R$p;T;?h^2U2Nj3JbV#BLsyd zx!jf5WTqk_x6j<`Q0X0(%v`)sPZ*6J1rEx~Wx-3yFeAdD%$4kl6+`CC7fj1ypgx)2 zH)IO?F8(F`49GDGJ(pAH*$dG7V13J-8StLuC%dBc@8&PZY`H~et{#h_tODAW6 z_=M=FVgUqdY>CN~y@s>Ax|pl#$cJc+ElGjGsb?McW9uqrW$=861uJ!~;_;X5vMHM| zIzErZHOtxY4Td?Rryj`UMEGwIb*cJt zu^8TxY>8CK|LiB0EVH@5e=P=UfGsK3!eQ;t6Fj95oRaJ!Zy~q^$AvIkY~zX`n;G^N z!CbNJDuQWrtq^p4CixG5$PJ?AN9=uD4@LmVu*R_gO3LRL6bpYvtQZcuK6rFi7N` zRt%Z`392W~yqFIlH`tF_i$U)9#JLMWUAiE zD*?Bdi2EflOYGB2nI|jNl|qibw?ey9nTWwuumWP}pCue_(sFS3ixZw77^WfCpHG~K znJ8vuC>d6OL%2>^0a-M5IrAu6`=`i{(h9l0j&d+7LnRa+tl%6Rlu`!s`hv)E?_^ym zWB)3ZvO^5m&nRjoBnq>cDMPe5Q@2yGf{|#Q${75URclK-IXxTB)-*L^(?0?*=3~) zFGLP5URhSMvTR=2ni7vbK-|1S?yx62Z9+cM_zZE_1rko5^Uwc>^<>-t137h}*OIsa z;=}3wdmtX>2I@ElpV9aokS-wp*zAH1D%=Tal=wdMKfLJ=$KVoe+r?T8htrfg)@uEj zwet4BxAc$Q>PozVjV4<_&XpOn$$vlijr}F}XCcWb*EbQj-&C}pxi zC1quKF diff --git a/pkg/services/control/types.pb.go b/pkg/services/control/types.pb.go index 28975091c7ed6d77b5958375512a03a331b7662e..b1962abce644bcca924c4c4abe6b1a204158c74a 100644 GIT binary patch delta 24 gcmaEQneoYG#t8+CrV|T2C*H1{xKm+s2;;;I0F`YELjV8( delta 53 zcmaEInepjm#t8+CMiUD?<%?3&a#E8^6qKM0B`(h5%DiL+B@n5^HE~Dv=3vH&82~g` B6Z`-G