From 7bca428db03716e37e1fec315ef974886a2e9fea Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Mon, 19 Aug 2024 18:28:53 +0300 Subject: [PATCH] [#1322] Use new protobuf marshaler Signed-off-by: Evgenii Stratonikov --- Makefile | 8 +- .../modules/control/set_netmap_status.go | 2 +- .../modules/control/shards_set_mode.go | 4 +- cmd/frostfs-cli/modules/control/util.go | 4 +- cmd/frostfs-node/netmap.go | 2 +- go.mod | 7 +- go.sum | Bin 39512 -> 39703 bytes pkg/local_object_storage/metabase/get.go | 7 +- pkg/services/control/common_test.go | 33 ---- pkg/services/control/ir/service.go | 46 ----- pkg/services/control/ir/service.pb.go | Bin 46268 -> 0 bytes pkg/services/control/ir/service_frostfs.pb.go | Bin 21900 -> 63787 bytes pkg/services/control/ir/service_test.go | 44 ----- pkg/services/control/ir/types.go | 15 -- pkg/services/control/ir/types.pb.go | Bin 8051 -> 0 bytes pkg/services/control/ir/types_frostfs.pb.go | Bin 1097 -> 4704 bytes pkg/services/control/server/list_shards.go | 4 +- pkg/services/control/service.go | 142 -------------- pkg/services/control/service.pb.go | Bin 271609 -> 0 bytes pkg/services/control/service_frostfs.pb.go | Bin 124336 -> 384940 bytes pkg/services/control/service_test.go | 181 ------------------ pkg/services/control/types.go | 118 ------------ pkg/services/control/types.pb.go | Bin 34061 -> 0 bytes pkg/services/control/types_frostfs.pb.go | Bin 8071 -> 36592 bytes pkg/services/control/types_test.go | 151 --------------- pkg/services/tree/service.pb.go | Bin 124402 -> 0 bytes pkg/services/tree/service_frostfs.pb.go | Bin 60583 -> 191186 bytes pkg/services/tree/types.pb.go | Bin 9911 -> 0 bytes pkg/services/tree/types_frostfs.pb.go | Bin 3111 -> 10821 bytes 29 files changed, 17 insertions(+), 751 deletions(-) delete mode 100644 pkg/services/control/common_test.go delete mode 100644 pkg/services/control/ir/service.go delete mode 100644 pkg/services/control/ir/service.pb.go delete mode 100644 pkg/services/control/ir/service_test.go delete mode 100644 pkg/services/control/ir/types.go delete mode 100644 pkg/services/control/ir/types.pb.go delete mode 100644 pkg/services/control/service.go delete mode 100644 pkg/services/control/service.pb.go delete mode 100644 pkg/services/control/service_test.go delete mode 100644 pkg/services/control/types.go delete mode 100644 pkg/services/control/types.pb.go delete mode 100644 pkg/services/control/types_test.go delete mode 100644 pkg/services/tree/service.pb.go delete mode 100644 pkg/services/tree/types.pb.go diff --git a/Makefile b/Makefile index 8d1238b6..94a8a14c 100755 --- a/Makefile +++ b/Makefile @@ -11,7 +11,6 @@ GO_VERSION ?= 1.22 LINT_VERSION ?= 1.60.1 TRUECLOUDLAB_LINT_VERSION ?= 0.0.6 PROTOC_VERSION ?= 25.0 -PROTOC_GEN_GO_VERSION ?= $(shell go list -f '{{.Version}}' -m google.golang.org/protobuf) PROTOGEN_FROSTFS_VERSION ?= $(shell go list -f '{{.Version}}' -m git.frostfs.info/TrueCloudLab/frostfs-api-go/v2) PROTOC_OS_VERSION=osx-x86_64 ifeq ($(shell uname), Linux) @@ -39,7 +38,6 @@ LINT_DIR = $(OUTPUT_LINT_DIR)/golangci-lint-$(LINT_VERSION)-v$(TRUECLOUDLAB_LINT TMP_DIR := .cache PROTOBUF_DIR ?= $(abspath $(BIN))/protobuf PROTOC_DIR ?= $(PROTOBUF_DIR)/protoc-v$(PROTOC_VERSION) -PROTOC_GEN_GO_DIR ?= $(PROTOBUF_DIR)/protoc-gen-go-$(PROTOC_GEN_GO_VERSION) PROTOGEN_FROSTFS_DIR ?= $(PROTOBUF_DIR)/protogen-$(PROTOGEN_FROSTFS_VERSION) STATICCHECK_DIR ?= $(abspath $(BIN))/staticcheck STATICCHECK_VERSION_DIR ?= $(STATICCHECK_DIR)/$(STATICCHECK_VERSION) @@ -107,17 +105,15 @@ export-metrics: dep # Regenerate proto files: protoc: - @if [ ! -d "$(PROTOC_DIR)" ] || [ ! -d "$(PROTOC_GEN_GO_DIR)" ] || [ ! -d "$(PROTOGEN_FROSTFS_DIR)" ]; then \ + @if [ ! -d "$(PROTOC_DIR)" ] || [ ! -d "$(PROTOGEN_FROSTFS_DIR)" ]; then \ make protoc-install; \ fi @for f in `find . -type f -name '*.proto' -not -path './bin/*'`; do \ echo "⇒ Processing $$f "; \ $(PROTOC_DIR)/bin/protoc \ --proto_path=.:$(PROTOC_DIR)/include:/usr/local/include \ - --plugin=protoc-gen-go=$(PROTOC_GEN_GO_DIR)/protoc-gen-go \ --plugin=protoc-gen-go-frostfs=$(PROTOGEN_FROSTFS_DIR)/protogen \ --go-frostfs_out=. --go-frostfs_opt=paths=source_relative \ - --go_out=. --go_opt=paths=source_relative \ --go-grpc_opt=require_unimplemented_servers=false \ --go-grpc_out=. --go-grpc_opt=paths=source_relative $$f; \ done @@ -130,8 +126,6 @@ protoc-install: @wget -q -O $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip 'https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTOC_VERSION)/protoc-$(PROTOC_VERSION)-$(PROTOC_OS_VERSION).zip' @unzip -q -o $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip -d $(PROTOC_DIR) @rm $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip - @echo "⇒ Installing protoc-gen-go..." - @GOBIN=$(PROTOC_GEN_GO_DIR) go install -v google.golang.org/protobuf/...@$(PROTOC_GEN_GO_VERSION) @echo "⇒ Instaling protogen FrostFS plugin..." @GOBIN=$(PROTOGEN_FROSTFS_DIR) go install -mod=mod -v git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/protogen@$(PROTOGEN_FROSTFS_VERSION) diff --git a/cmd/frostfs-cli/modules/control/set_netmap_status.go b/cmd/frostfs-cli/modules/control/set_netmap_status.go index 31ade1eb..a107b2b5 100644 --- a/cmd/frostfs-cli/modules/control/set_netmap_status.go +++ b/cmd/frostfs-cli/modules/control/set_netmap_status.go @@ -84,7 +84,7 @@ func setNetmapStatus(cmd *cobra.Command, _ []string) { body.SetStatus(control.NetmapStatus_MAINTENANCE) if force { - body.SetForceMaintenance() + body.SetForceMaintenance(true) common.PrintVerbose(cmd, "Local maintenance will be forced.") } targetStatus = control.NetmapStatus_MAINTENANCE diff --git a/cmd/frostfs-cli/modules/control/shards_set_mode.go b/cmd/frostfs-cli/modules/control/shards_set_mode.go index e73f1517..dd0d7774 100644 --- a/cmd/frostfs-cli/modules/control/shards_set_mode.go +++ b/cmd/frostfs-cli/modules/control/shards_set_mode.go @@ -117,10 +117,10 @@ func setShardMode(cmd *cobra.Command, _ []string) { req.SetBody(body) body.SetMode(mode) - body.SetShardIDList(getShardIDList(cmd)) + body.SetShard_ID(getShardIDList(cmd)) reset, _ := cmd.Flags().GetBool(shardClearErrorsFlag) - body.ClearErrorCounter(reset) + body.SetResetErrorCounter(reset) signRequest(cmd, pk, req) diff --git a/cmd/frostfs-cli/modules/control/util.go b/cmd/frostfs-cli/modules/control/util.go index c0577ac0..ef547681 100644 --- a/cmd/frostfs-cli/modules/control/util.go +++ b/cmd/frostfs-cli/modules/control/util.go @@ -44,7 +44,7 @@ func verifyResponse(cmd *cobra.Command, GetSign() []byte }, body interface { - StableMarshal([]byte) []byte + MarshalProtobuf([]byte) []byte }, ) { if sigControl == nil { @@ -60,7 +60,7 @@ func verifyResponse(cmd *cobra.Command, var sig frostfscrypto.Signature commonCmd.ExitOnErr(cmd, "can't read signature: %w", sig.ReadFromV2(sigV2)) - if !sig.Verify(body.StableMarshal(nil)) { + if !sig.Verify(body.MarshalProtobuf(nil)) { commonCmd.ExitOnErr(cmd, "", errors.New("invalid response signature")) } } diff --git a/cmd/frostfs-node/netmap.go b/cmd/frostfs-node/netmap.go index 128cc300..8104b1dc 100644 --- a/cmd/frostfs-node/netmap.go +++ b/cmd/frostfs-node/netmap.go @@ -84,7 +84,7 @@ func (s *networkState) setNodeInfo(ni *netmapSDK.NodeInfo) { } } - s.setControlNetmapStatus(ctrlNetSt) + s.setControlNetmapStatus(control.NetmapStatus(ctrlNetSt)) } // sets the current node state to the given value. Subsequent cfg.bootstrap diff --git a/go.mod b/go.mod index 79dcc955..b665709c 100644 --- a/go.mod +++ b/go.mod @@ -4,16 +4,17 @@ go 1.22 require ( code.gitea.io/sdk/gitea v0.17.1 - git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.16.1-0.20240813155151-d112a28d382f + git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.16.1-0.20240819074700-a43110e36326 git.frostfs.info/TrueCloudLab/frostfs-contract v0.19.3-0.20240621131249-49e5270f673e git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 git.frostfs.info/TrueCloudLab/frostfs-locode-db v0.4.1-0.20240710074952-65761deb5c0d git.frostfs.info/TrueCloudLab/frostfs-observability v0.0.0-20231101111734-b3ad3335ff65 - git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20240813155821-98aabc45a720 + git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20240820072028-6dd7be11d13b git.frostfs.info/TrueCloudLab/hrw v1.2.1 git.frostfs.info/TrueCloudLab/policy-engine v0.0.0-20240814080254-96225afacb88 git.frostfs.info/TrueCloudLab/tzhash v1.8.0 git.frostfs.info/TrueCloudLab/zapjournald v0.0.0-20240124114243-cb2e66427d02 + github.com/VictoriaMetrics/easyproto v0.1.4 github.com/cheggaaa/pb v1.0.29 github.com/chzyer/readline v1.5.1 github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568 @@ -21,6 +22,7 @@ require ( github.com/google/uuid v1.6.0 github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/klauspost/compress v1.17.4 + github.com/mailru/easyjson v0.7.7 github.com/mitchellh/go-homedir v1.1.0 github.com/mr-tron/base58 v1.2.0 github.com/multiformats/go-multiaddr v0.12.1 @@ -84,7 +86,6 @@ require ( github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/klauspost/reedsolomon v1.12.1 // indirect github.com/magiconair/properties v1.8.7 // indirect - github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect diff --git a/go.sum b/go.sum index 803a065c3d9271ef0bf6d2aa695969bc423bebfd..54e0d0301ae9b65fc44009449ebf65984c101db8 100644 GIT binary patch delta 522 zcmajby>6RO0ES^Ts#7V-*r{E-wGxWYfrI&})Jirub^tqIY>L@{V+^v%F+T>ArCBpn zYUQC9;ws8bR9QQAs=D(Q6Hqffsi5%Me#;hD=Knuc@4A%<&) z^qa|YK#k07#!A2uhQz;6s-d4~al7b+j&G9ka)p&DTB&Mh2OF3&{f{Rvp2`e_JOdfwjKi4s z<}{6Ib0ls1L!s<472g?fUv6snfBw)@$5u0D$WQ|P)9 zb2&zAZl&E4Lx));WYm7I8g=I-6Ill|}Go5lw#@^g|#?r@%` zk)MINn^o(ScSd1D@x_UsF{@as9 zl!qIy<&zlv&pz~{zZV;;{_5IQuH@hx3)+&CA`on}Z7?AS^e3U7G3tOpalzAYcYpe7 Je|!4y@ed|9r{Dkp delta 338 zcmbQfjp@b~rU@^cjSWpr4NVPoQw$A_5{)cUj4h1P6fz90DvG=cizED_QiHRd+uDEnPC5-7CUEeL{`HJpJ@bNv#R z&dG-Ep@t=1QGU5D<*t#LUS7t=mPwg@d7*|*RmSB}?)mAysRkeuH$PyMVsSA98ERo< zsB3AFn3$AoVwz}fWB@YF&@?onAl$?#DXloevrIq2G`qaq(kRQ_DBmEZ$RoWt#VtiU z)XS{O#XKEk+T>@fBHmaHLvmq6P=tPxQ(&=+mv@nYiGiPfqCsSyOGbrPVPa^RVML{G fSe9{NMP8DrH^_wwlkM2KHos?UVBM_8`?41RzdUFT diff --git a/pkg/local_object_storage/metabase/get.go b/pkg/local_object_storage/metabase/get.go index b79f6cb1..d979b4f0 100644 --- a/pkg/local_object_storage/metabase/get.go +++ b/pkg/local_object_storage/metabase/get.go @@ -1,6 +1,7 @@ package meta import ( + "bytes" "context" "fmt" "time" @@ -107,7 +108,7 @@ func (db *DB) get(tx *bbolt.Tx, addr oid.Address, key []byte, checkStatus, raw b // check in primary index data := getFromBucket(tx, primaryBucketName(cnr, bucketName), key) if len(data) != 0 { - return obj, obj.Unmarshal(data) + return obj, obj.Unmarshal(bytes.Clone(data)) } data = getFromBucket(tx, ecInfoBucketName(cnr, bucketName), key) @@ -118,13 +119,13 @@ func (db *DB) get(tx *bbolt.Tx, addr oid.Address, key []byte, checkStatus, raw b // if not found then check in tombstone index data = getFromBucket(tx, tombstoneBucketName(cnr, bucketName), key) if len(data) != 0 { - return obj, obj.Unmarshal(data) + return obj, obj.Unmarshal(bytes.Clone(data)) } // if not found then check in locker index data = getFromBucket(tx, bucketNameLockers(cnr, bucketName), key) if len(data) != 0 { - return obj, obj.Unmarshal(data) + return obj, obj.Unmarshal(bytes.Clone(data)) } // if not found then check if object is a virtual diff --git a/pkg/services/control/common_test.go b/pkg/services/control/common_test.go deleted file mode 100644 index bc512b4b..00000000 --- a/pkg/services/control/common_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package control_test - -import ( - "crypto/rand" - "testing" - - "github.com/mr-tron/base58" - "github.com/stretchr/testify/require" - "google.golang.org/protobuf/proto" -) - -type protoMessage interface { - StableMarshal([]byte) []byte - proto.Message -} - -func testStableMarshal(t *testing.T, m1, m2 protoMessage, cmp func(m1, m2 protoMessage) bool) { - require.NoError(t, proto.Unmarshal(m1.StableMarshal(nil), m2)) - - require.True(t, cmp(m1, m2)) -} - -func testData(sz int) []byte { - d := make([]byte, sz) - - _, _ = rand.Read(d) - - return d -} - -func testString() string { - return base58.Encode(testData(10)) -} diff --git a/pkg/services/control/ir/service.go b/pkg/services/control/ir/service.go deleted file mode 100644 index b2db2b43..00000000 --- a/pkg/services/control/ir/service.go +++ /dev/null @@ -1,46 +0,0 @@ -package control - -// SetBody sets health check request body. -func (x *HealthCheckRequest) SetBody(v *HealthCheckRequest_Body) { - if x != nil { - x.Body = v - } -} - -// SetHealthStatus sets health status of the IR application. -func (x *HealthCheckResponse_Body) SetHealthStatus(v HealthStatus) { - if x != nil { - x.HealthStatus = v - } -} - -// SetBody sets health check response body. -func (x *HealthCheckResponse) SetBody(v *HealthCheckResponse_Body) { - if x != nil { - x.Body = v - } -} - -func (x *TickEpochRequest) SetBody(v *TickEpochRequest_Body) { - if x != nil { - x.Body = v - } -} - -func (x *TickEpochResponse) SetBody(v *TickEpochResponse_Body) { - if x != nil { - x.Body = v - } -} - -func (x *RemoveNodeRequest) SetBody(v *RemoveNodeRequest_Body) { - if x != nil { - x.Body = v - } -} - -func (x *RemoveNodeResponse) SetBody(v *RemoveNodeResponse_Body) { - if x != nil { - x.Body = v - } -} diff --git a/pkg/services/control/ir/service.pb.go b/pkg/services/control/ir/service.pb.go deleted file mode 100644 index d1e253bf5b2d5c78c29a9069878481a6dcbd341f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46268 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 literal 21900 zcmeHPO>g5i5Isk~g4mP2P3$&%E0D`3K^wG9fF$i@u_$PXvWdu)OHr}i#s2pWDNzF|-~Y z>J?Ra9zqq8p*av)l;A?H3 ze_)5cxDMy5bY0d=UfRg!yh7%Og2(eVC%5ya5R8Tfn zrj4+`0FCJ^A%Y}J*(kb$W#n_3kyB$~%OS(67LCfqR@GrtvPnUh9@B$(_4;a{eCrCA z>(Y}T`}BFV6r^ANmTOxsEj%<9(>c(-9z0InUltrvNGC6v4^% z(&w`D106Fg{j*=0P}VeT=pDithtTNR>V zN3sBku4LqkX_91W%8G|F^`wYulEPFt+#0Q`=9Ie~PsFZSYa=5AJR2sG7^#Kl#o!kr zWQ6MV4erzN#;9F!l8R-pN|J|o!Tq2Pg~z?w#?H+m%&Mu_b855 zI;140_UyHH0Bj|iXd(@}XeT&{w?-?cO1mU4~k~*+C83p5;yiXuI34sLw)8f7ev0m!JAj+vzj$ z8m28EaG2A&qCcyRY;}I}vRfwRrmw;DtKFYJweQR|mX^!v-HXHC+Q6kAsb$+(0@Wu% z4>S>KLua=osE**f)}XrIgBGFpWSTycTey(=f8;D9I1(LUs$k9&1{EcsO%IyH*F%w^)n3_WS^dj`wwFO$FAKJvR_|gQ_E#@Nk5PzL!L8#;RL^tgQdD=` z0WEq7@9tv?Z~pHf-CFf^6SdN=tIVv*y57xUNUcIOefz;*VRiPs`hqH})wUtaVb0u^ zpsnVmP~1$^8nrEXS`F-GJyTf&x*@G)yu9qbvaSqMF1Xf5Z{5{4M2u=qZEyV@hR)n! zu!jtdAcvzx1DtxKmaVbB$Z#nCFUEeAb}d9ZtFqexeTPcB-FdgvcCm->S8R{(-%hmx zi3JLpM;tudG?l7_=nhJ$R$FAGNA` Ie~n!I4^WjmBme*a diff --git a/pkg/services/control/ir/service_test.go b/pkg/services/control/ir/service_test.go deleted file mode 100644 index 54eef514..00000000 --- a/pkg/services/control/ir/service_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package control_test - -import ( - "testing" - - control "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control/ir" - "github.com/stretchr/testify/require" - "google.golang.org/protobuf/proto" -) - -type protoMessage interface { - StableMarshal([]byte) []byte - proto.Message -} - -func testStableMarshal(t *testing.T, m1, m2 protoMessage, cmp func(m1, m2 protoMessage) bool) { - require.NoError(t, proto.Unmarshal(m1.StableMarshal(nil), m2)) - - require.True(t, cmp(m1, m2)) -} - -func TestHealthCheckResponse_Body_StableMarshal(t *testing.T) { - testStableMarshal(t, - generateHealthCheckResponseBody(), - new(control.HealthCheckResponse_Body), - func(m1, m2 protoMessage) bool { - return equalHealthCheckResponseBodies( - m1.(*control.HealthCheckResponse_Body), - m2.(*control.HealthCheckResponse_Body), - ) - }, - ) -} - -func generateHealthCheckResponseBody() *control.HealthCheckResponse_Body { - body := new(control.HealthCheckResponse_Body) - body.SetHealthStatus(control.HealthStatus_SHUTTING_DOWN) - - return body -} - -func equalHealthCheckResponseBodies(b1, b2 *control.HealthCheckResponse_Body) bool { - return b1.GetHealthStatus() == b2.GetHealthStatus() -} diff --git a/pkg/services/control/ir/types.go b/pkg/services/control/ir/types.go deleted file mode 100644 index 97ffd3ce..00000000 --- a/pkg/services/control/ir/types.go +++ /dev/null @@ -1,15 +0,0 @@ -package control - -// SetKey sets public key used for signing. -func (x *Signature) SetKey(v []byte) { - if x != nil { - x.Key = v - } -} - -// SetSign sets binary signature. -func (x *Signature) SetSign(v []byte) { - if x != nil { - x.Sign = v - } -} diff --git a/pkg/services/control/ir/types.pb.go b/pkg/services/control/ir/types.pb.go deleted file mode 100644 index 840e0be677bdabb49bab00ea0f9f96964038c053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8051 zcmcgxTXWmC5`Gqc1*(UPl#wawVx?8b4{0Pjo;J3}m!6#C@u)Nf$*3h#LxPHYJo@iv zFQ5p@mP@5)nn@T6z<#^K6{h+-{j4y%skWF`YGs?#W%&ZIkyW_~zz zqj=gRg!^>TG-J5I{HPjvfSbK7oQ7J>B@5$dklZNE!IGyi5LJ9uox0o6P9`c)GSsstkuDB&bT9^YxK3pxj@Tin+8u_I2)F}8bV04{ zi36+miwaFo-KlITj<=`rH`EfbWX~6WWi)~zZLf|~2gRSIKhqB)(Y{U-5lvv)Qk-52 zf3cXUz}H~A>!6#>$SWSGLfvT>xw{F+a-u>AOa^NR`0b}NEtdW)MS@rtBaA)|KmK<8 zd31IC@%rX!baOTs9-p2K2SqhU!XtW$1`!|HkF|pE*@6YU%j?s#lWm;VTR32|AA;Qw z;W82aY(}pb?A!2{!;gc1Z)3N2VLzlAZ4~3^8?acM|JCQ4YczB;IRDq#HezQ7Vk{wA zCu*9;uT1@N`04!Y`1IuF@|F2_jlYLsI%kK7xxYvR1ZhFJ>n!~kmu$gVp+A=p-5_yG zp1(^pTJY>tDqdeyclff}fc_TrXHKDpHZ%~8^s9s2HWk#`r7_lYuyws<6or+sitV{0 z*2 zrE?y6KB=wTflPu}Ep!yu>J3g{CX>?0vvhth#k6d3AQbFs(jU7f%!*DyC+E}yBemPR`zI|M;uhCX z-7=^&6|w&fAy58udV!%rK+oRVn0=+DA#5?R#62d7Af3!*lE87n>@ImfL}v=81c*-D zM`X4v?ah-VaU+p1O8r-U@&nkm@K3(sU1jY~B@G`#NWsTS&c=x~7yDCb_J_ptAY zM+uvI0{a5y#{_KWeETajGgIOZ(gbIgeifNZ8m&gO&<)I#MK7II@e`pFGq6J-3p*9Ga|LKo1CfvLjik2}(g<6ll@{Kk8WO6DOPNRw z0RVKrUqL3>bUj15Rg(f)i9eCU(7&GnFEG9`SD2H^FP3>S%~mT)Cn%l!>#O_4@+%~t zyz3%@pfqU)1>GyiN74*Gg@aaYt{@dstYul%o@BYqw^5H<8zw(1r`c#1m@Um|6qoDE$U9BhI|38HyHz*4O|wSVz^kjFwiCk zoM!JP_M`w6Nht@5BVWPABi?bzO_o<^wppT7POC$Q#eH`O$TG|b5aO*ozahL;yMxaU z9zJ{b^!z~W6Kbd4-XXoW>Dj|)?fIwS6B9KRLZ5H5nZYSyvd49VP@U-l$T4bHEoqe#w zcB7Jg@U}`O(>Qrg6514XJ$f3mXf|D%856}c_5yY?S>2;<=G{2?CD$}F!!l9I3YY^{ z&?S<)B->>LhopeJ4=E~GjcKQ${C-Hnrk6)D967(sINU-Z)BTBN(B*FKpg|@Eh-DL| zM1mp2nrp!b@{MUB+5s7z+$AR)P_oyKeFMt26GVXoGU$+_j@?dU42^gv%Tk3m#-QZs z8@d>jA$am zdl{N%Kq|Y`(xZ`_<~ZKkyuwLYA?5HoFhR-PWTO$_^@c1^hGTwC_R4 zf}phQrlb#$tuYudyQQZSZWQyn}bX@iZV%=hSA<~rw?ovPG z3*#o-u1=ITDq9&?L>#X0la-7iOehmAp^gSWIiwpx;m^9=MwzOTd{a7j5KF9REL}T{ ze+C&$W|hE)Vx8B=*DRg9Te?)@+H|*GbmuiJgV5d{QmAbqlKJXV7>D;s=)%i5{DZ$3 zXmAzfS{s&nAjXU37+lo9q-r*nG1`yLg71KvLNQ(ft?tT6bitqhE`0sa7ukIgQSg5M zysol<>E%(buo+&dD2Gm9|Att80PL=x#G@5)y?VHA7w#uNHz5(FK zEAvqk5vXyEz$cv2?5cg~Xfo*#VW3ni;iFg>Je|USD+!8A!yerU|B&hS_W; z2xO)C468IywnzYH?ULhburD5$UBXA0L|q)d|5*msBE@fMTk{=hKe>F1K)JQ^KW$kK As{jB1 diff --git a/pkg/services/control/ir/types_frostfs.pb.go b/pkg/services/control/ir/types_frostfs.pb.go index ef2fc458ec5ad8d0a537cc039e50e7fdcd4a562e..b230726a93272e5c4483340d08fc19dd81c30b71 100644 GIT binary patch literal 4704 zcmcInZExE)5dLia3Rb{YIZNccp&vYCKpHzuw$v$NXT^{PDJ@fp8od}4U?8j|<&@b0-gs?%Xd*+j5gkqXI`n6U99o61aO!4~$mZnLdWX1NM;pY_h! z;C#gTz0;BJI8z?n^IO4!ELAd#9VbernN-YkT3_-kWv)nrY!aon9a_3hD@+t~@dLk3 zvn*!rZKV9tc$9`&XCw=86lcZcjE_6^WQ$KDpy#i94L6&s>i~^O(h`$#~MnT@Gq@eL77IPuB|57~RQ7j8BMRDsG5t4n7 zk@}Xfk%4rsBoZ@YuKmSz+K!_hr-Gdb9;>^d;;P75l&Za5$AM_BGgm*nIq4ssjZSWc zqr=hV@aA&R>mQ#E`n_cf2W;DEEvZ5NVstuq#~Od?LhOL;G}JEohrPcVDzt2R)&Cxk32VAtZK<{u1W8+@961qpzRu$RD=62onxkj*w(cF(#8OTs!WCL!Luef=wm(B-92g-qE@hs-WujVi=H&Sb*XX{tQL z>dij%HrdX0+j*|wY}7N~X2&v1ET-IIYO^tQw3m?S++5`gOdE6Xr*7GswHHtoT45b+ z$m3i9ld0ihbep1nr6B)Bpvdzd;*qhd>+z!!>@&5Fu6r*Y-Oo;oq#GxBX#nRiY8igR z%5LU=pdR_2%lwYVXgUm7y^YFk+e@PuXqyU`X;P`IQ6OY~-EhUWmlW!TUsM2#Ivr4k zk7F^6{uaz+J7?++!J>^UWOMXAGvvla$U;p3A9_ZW0*cV)>>*NjMvsa;j6^(PI*mEI z<1?{18b>LYkJ`MyV9g?0H9VlPr(u9>ZA%ys;ea8ab*iGNqPn%@F9!yz{}!pu=~CX# zCY$?6I8v}qWS2w;0%S_YLzS|P0NDiSEK>|HyJL}vRGC1nqX9q*8S+4^zGlO!H^ERb zjBJ!{UQn5%qlPUHJlTv3mN&LgWr`+AdP_23%*+i^cIVwE3BbVCUph$Fr0-g(oDUCWojX|z8 z;fj~@2GS;RWQCx;vO}gCGb=z9Wn;9U3?f)}wG{#bUSo|2kTa|`3Oo&{odNm(2!qTo z;h>EL5P-v9+e455&}~)WpnQQJ{msrGGYseTtXUiSqTgq9XpGJ(vcYN@r`dWSbb;?f zVnX{p_X8Adwt>aQionzw>+i$!L9_fClkXcfXS*30qM2cWs*A+d*#osv`%&P3)ZYeA zxW~Ngczt}0XziaLz%d*82mfsmqQBz5D7Fm<@0|xzL~8IEmO9S{w0f&?sG=^0lt#Hf1cT541hKhThM zf~jFt1)>`Oron+l%H&<*!QY&k|R#Op%5Xn8>Tk{cCMB+70uy zYWx{aDnG|ltUH6CW*&bFIB%@UT>~*k*twkX9Q>BqB2-H(W50ifYsJ^%p literal 1097 zcmbW0Pj8z*5XH~lPcg~~S{vFNEBVr-hp2xn)xJeJEHJ<->s@PiFs4zyduLf_>`2L> z64Ju%yvJkaN1nrttq>YC=pU4 z$_AmdhMd(xsQtk@f~!VRHfxlrZN76I-e}uZKV*?lCo6eSY@Q#l^Ny6x$5&nnk>{`_ zS!mpf|1wR;VjDO5O2M zE06ecR460eFxqFL?o0{E2|jF9V`Okj&+;TGBx4L^D1|4nP$ABG4MyqkxQKb-lUO{9 z#aQ`q9kXU%2SOh{D*3#GQ}!K)^zD-CP!b|=&Ey%}#PeB$eoE(CsbL>i|Ee+5XT|=+ zZuqgWQ!lKm(9M0jtAU$YqXUhm;l?S?cRn;;nh@pRNRo632K%|3>!jAU4CKsazo(%| zGXOeg9iS;~X9ykR)wil_p;8qXOQX1l-YHV18D~;SlFZcpppj4y!4x(;f7dII%L^i= z$c#fY4U~*>P8BQ(&75gV{|&}W*xP7KlSl%O_YVaRI-S;c7>R{X%n4u2Q4pVzG(Pfd zA2ErQBN1m~U@};El#c(2+9UB_L1Ho8Us5;cWANDaKGuABc){>p6|?wSbx9_lGMIk> D;Z$;3 diff --git a/pkg/services/control/server/list_shards.go b/pkg/services/control/server/list_shards.go index d6531b94..b639245c 100644 --- a/pkg/services/control/server/list_shards.go +++ b/pkg/services/control/server/list_shards.go @@ -30,10 +30,10 @@ func (s *Server) ListShards(_ context.Context, req *control.ListShardsRequest) ( for _, sh := range info.Shards { si := new(control.ShardInfo) - si.SetID(*sh.ID) + si.SetShard_ID(*sh.ID) si.SetMetabasePath(sh.MetaBaseInfo.Path) si.Blobstor = blobstorInfoToProto(sh.BlobStorInfo) - si.SetWriteCachePath(sh.WriteCacheInfo.Path) + si.SetWritecachePath(sh.WriteCacheInfo.Path) si.SetPiloramaPath(sh.PiloramaInfo.Path) var m control.ShardMode diff --git a/pkg/services/control/service.go b/pkg/services/control/service.go deleted file mode 100644 index ef0c0a8d..00000000 --- a/pkg/services/control/service.go +++ /dev/null @@ -1,142 +0,0 @@ -package control - -// SetBody sets health check request body. -func (x *HealthCheckRequest) SetBody(v *HealthCheckRequest_Body) { - if x != nil { - x.Body = v - } -} - -// SetNetmapStatus sets status of the storage node in FrostFS network map. -func (x *HealthCheckResponse_Body) SetNetmapStatus(v NetmapStatus) { - if x != nil { - x.NetmapStatus = v - } -} - -// SetHealthStatus sets health status of the storage node application. -func (x *HealthCheckResponse_Body) SetHealthStatus(v HealthStatus) { - if x != nil { - x.HealthStatus = v - } -} - -// SetBody sets health check response body. -func (x *HealthCheckResponse) SetBody(v *HealthCheckResponse_Body) { - if x != nil { - x.Body = v - } -} - -// SetStatus sets new storage node status in FrostFS network map. -func (x *SetNetmapStatusRequest_Body) SetStatus(v NetmapStatus) { - if x != nil { - x.Status = v - } -} - -// SetForceMaintenance sets force_maintenance flag in the message. -func (x *SetNetmapStatusRequest_Body) SetForceMaintenance() { - x.ForceMaintenance = true -} - -// SetBody sets body of the set netmap status request . -func (x *SetNetmapStatusRequest) SetBody(v *SetNetmapStatusRequest_Body) { - if x != nil { - x.Body = v - } -} - -// SetBody sets set body of the netmap status response. -func (x *SetNetmapStatusResponse) SetBody(v *SetNetmapStatusResponse_Body) { - if x != nil { - x.Body = v - } -} - -// SetAddressList sets list of objects to be removed in FrostFS API binary format. -func (x *DropObjectsRequest_Body) SetAddressList(v [][]byte) { - if x != nil { - x.AddressList = v - } -} - -// SetBody sets body of the set "Drop objects" request. -func (x *DropObjectsRequest) SetBody(v *DropObjectsRequest_Body) { - if x != nil { - x.Body = v - } -} - -// SetBody sets set body of the "Drop objects" response. -func (x *DropObjectsResponse) SetBody(v *DropObjectsResponse_Body) { - if x != nil { - x.Body = v - } -} - -// SetBody sets list shards request body. -func (x *ListShardsRequest) SetBody(v *ListShardsRequest_Body) { - if x != nil { - x.Body = v - } -} - -// SetShards sets shards of the storage node. -func (x *ListShardsResponse_Body) SetShards(v []*ShardInfo) { - if x != nil { - x.Shards = v - } -} - -// SetBody sets list shards response body. -func (x *ListShardsResponse) SetBody(v *ListShardsResponse_Body) { - if x != nil { - x.Body = v - } -} - -// SetShardIDList sets shard ID whose mode is requested to be set. -func (x *SetShardModeRequest_Body) SetShardIDList(v [][]byte) { - if v != nil { - x.Shard_ID = v - } -} - -// SetMode sets mode of the shard. -func (x *SetShardModeRequest_Body) SetMode(v ShardMode) { - x.Mode = v -} - -// ClearErrorCounter sets flag signifying whether error counter for shard should be cleared. -func (x *SetShardModeRequest_Body) ClearErrorCounter(reset bool) { - x.ResetErrorCounter = reset -} - -// SetBody sets request body. -func (x *SetShardModeRequest) SetBody(v *SetShardModeRequest_Body) { - if x != nil { - x.Body = v - } -} - -// SetBody sets body of the set shard mode response. -func (x *SetShardModeResponse) SetBody(v *SetShardModeResponse_Body) { - if x != nil { - x.Body = v - } -} - -// SetBody sets list shards request body. -func (x *SynchronizeTreeRequest) SetBody(v *SynchronizeTreeRequest_Body) { - if x != nil { - x.Body = v - } -} - -// SetBody sets list shards response body. -func (x *SynchronizeTreeResponse) SetBody(v *SynchronizeTreeResponse_Body) { - if x != nil { - x.Body = v - } -} diff --git a/pkg/services/control/service.pb.go b/pkg/services/control/service.pb.go deleted file mode 100644 index e5a5ce24c10c4f72796048e1b86927fa55215815..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271609 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 diff --git a/pkg/services/control/service_frostfs.pb.go b/pkg/services/control/service_frostfs.pb.go index 822244e77dad0a07943f2b2a6f70fccae00b1378..afd1c3c41d18ba85f54241a6feb3ba910ca275ba 100644 GIT binary patch literal 384940 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�M@H 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≷IzUw#cns}cX8mL4q(5!AY7WBzU5anZ^> z6+!*PQ~ap0f`F!0Kn%oYfZOdSdsl_e6%Od^w(f=qs=CVU5W7F{5hT)~y~HX)vUPtz z0=TfbJU*NvE~th108U&`pYrm$XIHM8a6IHaf1w6{K{^O|rZ(}u^k%}ooAG;ylO{@N zmFeJD7dO?xpQiz?gL1$a)2T#u@Qc@s`=v|S#q-LP!b?Uqr%RS{H2zl4c<31q2IHY* zx}GHEp{&iv#Ca%d%ZZ{5J?mkAtcNlcFg6#KC~O4E#xj>J{H+;LqJA`=PAn{oiO%CQ-MMt)2iOISg>Y7(^?F z*PD3OguNE??F$pmL_v4bdRp#Md!i zz3IC3Ac3iQ7!ril(9^>utmZXHgTQwv{)nDFi#Frchd8<$$<+d1msl=G0tXO>=pSG3 z=XZa+hk>}IY>2vhpb`ejzHNhvx0d_c;<1g}a+0w@O-EBqZ?hXABpSQ_UAOCz4^nMd#v z&sPXIz&}?03(7Ah2!41zPU3IB5pz&Yk9TuiLMe@v_dVtXwY7e1@_vReO=J70E54eg zVJsc%SkG~&!Eq3?!+S{sa-$bOy5{ANv>o1*d=W3^%i)(|s))(*8T|Yzksm;h<bcKn`w-gO6F#RIWnTq%xUS;h@Xmh=Rz$FZ;Sj+acx9N zCIOx9ba6zaoVkYC6rxoPxpKOgoxHeAF}ws+bl_w$$K$*8l!~5G5kjeubN18XRH#Ou z1gSzb=2X#(o>tKTT7^p@UVOXeH#=CmAU^^pR(<62*Tr*L!-c%r2n5#YEYcqW_lQDDx zsS~%loG{Bm9MVdHE}Ni$(ChIsMlcW`mXydIfvos@WvWGK?HUp*=UP-KtQ@ARS{N@& zF0d}Nu#Q1?-y)zJcn%*uU{KoF3a|mM`nXwUE|!qvNP8uW{AcTrG9o5t?QEHjUT!w) z&1`r!8L#kZ;_YfV-XvG!MKqhoi)r+Ea&{4&aV2@;1#LJ%k5HhEP}*`$wZMYGPm_C@ z&qrhFOdsv+EX%eCs9Vu3sO}qCx5>AVt!<8S5g=3-T(xj9*+v5gCVKb>zDON!Mt`UO zP*0Mp{Y<;swxe^l+AbEPWkN^uRD?f~pMac)$$AB0VZl9DYVs^PyZFZ$TRefh3pr0D zGXlpLs%V=65zwW);vK-5sv;hbc~64K@CHCf;f?og4C)H{G)QjeDZB&!F}|mTSWv=Q zTk|{!vH0Q2KA3@*1H1%tNmq0PxhS>wVnx}?jk8bQc$Z-xlxmT3QZDgT!vA?NV4TbZ z=!nfw@c*Qflc*ay8+CG;@^5rGySX-*a(I2H>ea|{j>w_uNeDd&Awxp&tu3G~C-|5} z**bh&?^%?$=42iFo`|qtB7%RZ;BEAzfrSc~f{5zo;Dr6XZBe!~^jw71INfey@CjC3 z=OXy$UWSa|ODyQhJ|HN7jo_;wM@R4_7AlBt90#Eg6|&Cv`0}@X--EyI!`%4bm#OPG zSIJ`ry|r-rzfiqxGx=gtidX`Z&LCiIw2f3^y&IGzY~~KJ6zk3i`+(Zy1=M zObjQuiXXzLeh);s2pTP`%}y{Hq)V%f;T4z0D^vv}FJIbm;CZIpwHXSzv$0CaFfxXYZdGsjC01(;d$ZfTfiD3j?uabLQ8mmJxRSu_g z^zjm2Nk4}Pg#SgGbBV`-uh;8^x}iMY{DOahIgRV+G@gMNj_<#0)8P^l+>LBf!ASac z+=k&f76WxZi7)EO= zfEjWe(bCA!BbvoCWIYx`LjDGmi0`J5KV6XHPRs@I3n|fHHp7Xnl~0g$WS;ZCJbq6G z(=3WN8%#Je$dNqi*vj+oD2c&nAE)#VSdmRVK&f6;h}y zHPIL(a&cucx;Mkx{(X+T%w+O8YDxf(u95(6&@d&Cybk#p#;A2xht)T7sU?@>JQ|9% zorYk&A<=Geglz)FpD-wQYB}bp`xm!*RlXfP-_Bt1hyTnM;)bN*`9*Xqcs_vug-cGZ z?SQofLpr-p2gcS7jAQ)}#X;g*RQ?7dthnl?4=yDLMM~mC` zMI7FlW;niKWEf)t?97Hy1vE~F5khJo*miw*+Je`iUaItVk}haRXF5}mDF_pWsz`K9 zE_Ba{={YfBoESNKKQ&T}YWA^R&f#A=v#8VwK}0<-rW3pvHE(z~Wo#kYOe6{kE-Qi% z@PE=>MN4uvi8Pw`BOW060SM6X9o&?LSRJAnP{MiiU-H^Q_=7xNFdAkP0BY}2%0!94 zrUM8M>o8G_;*%?zcsvDAn(Nkm8^b6z07{iW{ z0Xkk|%osUg1W9EVKrNIVW5^>BHgbamycQlUI1oQZ^?j!ZGD@hoHoPb?B7-%f?+fGMYlsp<*2$Bn5ikSgM(pSgq0X=vg3-3~ zohz`NQ%NwD2EhDK+ken~DicNbx3d%~OjV@;(?Hk%>J3Nm#wmBvmi+jj&$X8u_zqj=?TPhbzl0 z%~(e+LTQ*hhlUI)Ny(&-gL8}mE{@@yPf1^51YXj^Hix23DwBoT7lP95!xT%AP@kiqi4W^kkyiWTF5rk%9+kr4w5O zZC)i9fJh1JVg?16;L};K0Y1gOk4SpNR+`CW6@MMbTXBp%*V-kyMBG0CLa|y8ziG-4 z&K=yZ=gF_@>!0GASlj~*2_S-%Y?tvAdG%zKruWxzRHA`~V{edvN-_yZ;E?a}lnB@m z5}=F8Y;(-mi9j2M4}+zlVt6g8=>JP;j>q-yX+J&f$DsX`&61NO{ggKPm?%G`jX70J ztEcgiU@CU{4xEx}}F}N~_*Kxu;a5 zj^lJav8S8Fo>INyUAX6Pl;a8;>`dWZl56;002YCO`8`6t}4ELqJ$oU zC#8WuK;n@SKYTFwJ+g^2a;+zv%8zpy1#8gEE{rEQ6j!6Lx(J+8vbs22zObV}<4mz@ zGjR??nXzO)L43h#Uq#YPCWfZ`;cSeycpg>@*IJ_TbXK+ESr`r^AIp)O;@!k(Y?&_( z@frBn;uo|TH8&(J>3ep%Q+(Bu#eUD zvD%#H$dR4#){FNl?El^KQq88Sd;;IgYdKn?ojsaeVWUNy?)>R4X689Y7 zY{(yP2wTGgqqoK$)Q4}K_c0{T@5Koe|HTaE`9y{OrRrXW-DAB@DKu_Y9BcB$d`k+g z2kM0s%C1Q$!sjdW2;e@q__brg_H7F#@0Y-|K1d9?pv@--eiXE`VoX`w%k~WX#JM_?P;I&TilLtp)``RJq=uJ!V6Ja9wp<{o=B}aX=q7C9BWlTWT*> z&KQRS4!bs}``(?)g5Kq&xg(xtnV75wz1vyC?Gy^^a6FC0-*PXF-$R^8q4lt#?EmhhZL7Bl7X!c*5#l;s_vkJwW~dTK}j zH6%B|KPiexzV)X-70I{ikSHe!erzV6}?nYgtq~tY?4Tp{bhCM|Et(X1ZFOby~TKg?5 zvASW?-#7sGpjuCe7`<%pdo_P9L4$WY^HH3o?hG*&m&yxP4WKb!>T$u1ru?-z zDTn5mSdBPkxWsB`MV85-Xdaf#Jk?GeR4`gy1}!+K4SR|B8zQpNO(t8HE;Vp(XDlxV zds~h9A2JkgjS^3v?wQtZIeC2gV0@)uJgf=(xsyIOzqF+oa`8bfyMUXT3X3Z;HM_`7 z$Hj%#Hg3D>0vj@0GX?TGP}^da1sW}t9Res~)?%V0be$q^mI!TX!?bC)_+Ipd+G zC0s&)nATOA4^a8ut_AYN{G07p-a_PHuD$Yu$eCXmIy|7UH0nH8_Mjf>5~{ zOereEEUm&|{xJ4sA1mLkCeiS&_@WhuuJI<*RYb3kmLEJ?ZfpTn!{tU+GIBoMc=_9S zy!iWOp2k0nCs%R7eGYH0#+&KyuU^o(oOkcV8_f(t;>TAn0D>I6`mkDW;+LDvdXq$# z>-B;%NYoQuBUO7D{`YhV%oP?oB8TvL5T@{ zgk<57{^GvTxT8O+A5wxJ3JorSSIjK-Sz1Dez)p{>wWIL%%@A+m>v){TQ+odP?fhTy z@bLv)C7?7MRs%czbI@W+_5_oe3SOM_YfMV&U7Y3{Ok*f_amxP`@}X)&qECi(*(l-rC~A7VqL(0v*#mm`7Ih-a5AoqP8OUf>0xExOdgRIyA} zP{pB34OLdLqT1DA9!nopVng>F)i~5sWt6LIz8YIm>D}i?k0M@|6dJVKn-IRy%vE)i z4?z^SumaMg)-wlwVm$l}3isLiBMtvRtt_);I-(tXHawe*SF3dzZCA_jCb=3fqS-uN zOry_}vy13VRbd^+P(Q+vjPdn#yqXU6+IkTYPy`|wNRO%RE@4rBVRj5~a@3dAti_Vo z`~WhefJ(lv>4H?6Q|$>x#aj}INojOn2i@n9NKlz5VIV(Uli+=4Kcrf&fw*up^c$Q z5Yh@cJ@vR(6<^e3$*pE!6@iWE5hAvce3!mAim|)i_)xLu#iR;pgPQU6`(D;%bv{q( zX6~Z(&HF>+nE|qO0l)euqS^`RW5qi?fS= zoXrhT!qY-*3YL!EAXqf!$`(?~7}1RI;%Na2DR-mskMPoswIQUAgm9Da;>83OC0hgX zZy1ma*&4y!tUEw(2wU<1X1HF4^GzMjyJzS)NG6`pJ@K;=@l#y>E0?1DHB17L#D!vj z4~Q=2Fx{0QN58_ct{3rQz8roj)+MnreFi_jO5_JvFytyUn8E4*pA1iFFrYHotHHl6 zq8X?;{sU<ruX$Xk1YVNhES#`W7Vlxpt1DiB@_!y#S+R{E$c_j620zJh#&w7`p5)i{^-u9lEG`#? z1V6wwv0cVfbT|pVNbj%X$T_dwbYN%F9jL!MU4P{iW+&iUXRd)+XEO6D9Ryd)%w0#S zdkSt(!8Itj?iqNJblZZa9uu{;pb4iH_vk6J`=iVjC=~B}Dj;$?Q3`@*(Ev+s=jr4s znoUMOV#MI}c1fl+nW7zec+5FEf=`GhHXsx6W`oFud{`$xY(4FDyNM5TwYhWftb3rG zDTFERL&ZzztjZ&tE8BNuhsm;5a3M${ld5q|xa~+{&m+`Vyd^;>o29OW@Gt=9dF-+o{umc>p z6<~Jb6t+T_Sn8WCh59w5Qa%r0*4#SCWe{Y4f15({5(DvKOtX*(`gS{+#7V-8O$B6$ zpOLFc6ceOs%5aQK0XElqvlB@(FS$mZs*yE)B~=5!N=stnvJ4F?EUClLm_z1<$eaYw zS0-^v<%G#+Q$62OV33L<#vG|Aq}nUx($!ff13|bN*B}KGe6~frG8kv)I=1X1V8R$< zgaDruQwtXwUpfnhS%`S4RYznH)d@v$)Fm`Z@Gq4%?THuZ>S|tPP6~O*x3mHbp|&#I zpEKu7jp!e!Mt$y~sv^T(lP4;ey+-EE6Tzhu+oVe-4*2aRlH7;M{ycFV}zt|(l^EMbJd$=`eD5l zd48^9@j-DhUO`MPrBAvGOKEbhTCp**R-3cMs^g{1xr&5_&`3iwq#@`V6sd>08E0oc zQlYCtXoINmMph_CL+M*Pv@@3^UBfs$GO{lOgr4Z(AGdg3Y%`)`V;kx}nnuP;os#$? z*N3y!cCnz@EhaF{Ws4j1C&uLcfJah^hUVsqiH*Lb9-+(?2u~tINZB!ZHvuKfe!CMy zd{MI1Uu|-!TzbHk!-26BuWYQPJ+~^uMhXE|-h~t1g>hpqf{Ar~`xQW^DMd6$0 zGK(NeYugEPOG0i2V8~K(ZP-jE4rJyUn$7VOc0Z>?(-bzb#1f%hON_c+gQufjj)*tE z;9p=X;-WK+XHd7}`!CycxP%0-Z7%02SF#-a6`;uRhnNK)o?|gk_p=B-ilc2q_#1we z9tQk@T~iohuv%r;wu~OeK(@TztkZR_W~Z@a7)9RUMk5Q44C8tLgQ?sWdiPxaJOa4( zauE}ZW#AvsD@K}($ntEe?5E*l>>u>E_K#HIIxvl+l!3APQNJ<$%lIV24(Qiz#Debe3acEiQbUa90V-hF=_*!9*jChrX!ecV4%`Q<4&j&@+eCLf zQbQ>2yxtY9;fl&Bk$3e1mO9jX^9)dE7JWV>^ng&{CP)H#i3N3!7OA=ZjLthzJ-QXf z$s*kP;Da>~@S9G%>xme#R~nu!vgpJ$Oup_{7f2DM1FvsVw20`T{-5$TC*wbgOQ2FW z;2LXx)OK}D$Mjh=ENG0*UB@BLzP#>-e<3v)AGY~j<@_$Jn$jNbB`j1emcC`qQ9@bE9%`fNJ$ zCAOBED`5;fH@A{>0!9kO-NgR{8B=QzVUI=#B5A0ZQ1-v#fVSFNHbngr7>LtacJzQm zF4#+g63#)d=;9OOr6l#ec~pn(XjKJ*DBOr61a$h-F^4-Hqm}^P09mO{2mh%6{osCv zCS9wz4_0DBLo#Z?KrW2xY=Gws-@%8$ahA#`95scrQ+rhP5@+L&EhBBb z|8@*yW4RaxIUv4v2}&0LuE|AA+Ek|CFttJ15l}0>MkrAl;He3h2;m5bb)m4TJp*b6 zY}E-Y&5(zOp@-2d^oCTisiQK+x{v$%07(=f27njSI_bkQFX9v~ODA4$Qg&myx`jxA zU5aK?w-_L9rZijXIdKQz{vos|R#L#ogTcy!VI3Fi}_2jgbom)+Ldn(tFQc)V8b z+4~8Qh!v{$e`@$Yaw_C$1Y!XrXXjXN3x#c?*_ggV8{GkYM?!I}j*QDA-hv1GH3()P zavaeX|6`|6zC(~593q{yvM-d$%Iish8zi%K+XL!j_x-JwMm*a!?@lss?`-HXMeUsp zI3-WNkJs-nUhh;U-s?^cXQ%)%hsRF ziqSj13uD_C+7=2~1z578^F?*a;5L>nY&XGmHR4OdmY+T-19imiR-CmwfcZ$(L zkg5;IOH@go3m5MI9X=fI)F0ka506Imfq2?LSEIKd=hrRVS?L&mTHFbkQc?J#M5w-> z@O_nbw-^)#4O)f2^Ice&Ms}(M*bQlP0aZ|?;sSVe@MBB)0y>K@nWEMXvhOiyZpnKh zzO>b*ied9T1hy^lcm|x1$7wXM%IXFi-6CK6mSG!AZFteGKnVF+4T(dCNOFm#WO0>e733uBqOK@x&Qgbs|Z{ zcL@9hvNK0EIr4Lu)3&a$^ThECmui=jw(eRX4u(cQo=bHl5GsY$@)0fT(soy#{l)Us zl62@`o|2XQxW{eOldm^lCd literal 124336 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 diff --git a/pkg/services/control/service_test.go b/pkg/services/control/service_test.go deleted file mode 100644 index 1d98cc6f..00000000 --- a/pkg/services/control/service_test.go +++ /dev/null @@ -1,181 +0,0 @@ -package control_test - -import ( - "bytes" - "testing" - - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control" -) - -func TestHealthCheckResponse_Body_StableMarshal(t *testing.T) { - testStableMarshal(t, - generateHealthCheckResponseBody(), - new(control.HealthCheckResponse_Body), - func(m1, m2 protoMessage) bool { - return equalHealthCheckResponseBodies( - m1.(*control.HealthCheckResponse_Body), - m2.(*control.HealthCheckResponse_Body), - ) - }, - ) -} - -func generateHealthCheckResponseBody() *control.HealthCheckResponse_Body { - body := new(control.HealthCheckResponse_Body) - body.SetNetmapStatus(control.NetmapStatus_ONLINE) - body.SetHealthStatus(control.HealthStatus_SHUTTING_DOWN) - - return body -} - -func equalHealthCheckResponseBodies(b1, b2 *control.HealthCheckResponse_Body) bool { - return b1.GetNetmapStatus() == b2.GetNetmapStatus() && - b1.GetHealthStatus() == b2.GetHealthStatus() -} - -func TestSetNetmapStatusRequest_Body_StableMarshal(t *testing.T) { - testStableMarshal(t, - generateSetNetmapStatusRequestBody(), - new(control.SetNetmapStatusRequest_Body), - func(m1, m2 protoMessage) bool { - return equalSetnetmapStatusRequestBodies( - m1.(*control.SetNetmapStatusRequest_Body), - m2.(*control.SetNetmapStatusRequest_Body), - ) - }, - ) -} - -func generateSetNetmapStatusRequestBody() *control.SetNetmapStatusRequest_Body { - body := new(control.SetNetmapStatusRequest_Body) - body.SetStatus(control.NetmapStatus_ONLINE) - - return body -} - -func equalSetnetmapStatusRequestBodies(b1, b2 *control.SetNetmapStatusRequest_Body) bool { - return b1.GetStatus() == b2.GetStatus() -} - -func TestListShardsResponse_Body_StableMarshal(t *testing.T) { - testStableMarshal(t, - generateListShardsResponseBody(), - new(control.ListShardsResponse_Body), - func(m1, m2 protoMessage) bool { - return equalListShardResponseBodies( - m1.(*control.ListShardsResponse_Body), - m2.(*control.ListShardsResponse_Body), - ) - }, - ) -} - -func equalListShardResponseBodies(b1, b2 *control.ListShardsResponse_Body) bool { - if len(b1.Shards) != len(b2.Shards) { - return false - } - - for i := range b1.Shards { - if b1.Shards[i].GetMetabasePath() != b2.Shards[i].GetMetabasePath() || - b1.Shards[i].GetWritecachePath() != b2.Shards[i].GetWritecachePath() || - b1.Shards[i].GetPiloramaPath() != b2.Shards[i].GetPiloramaPath() || - !bytes.Equal(b1.Shards[i].GetShard_ID(), b2.Shards[i].GetShard_ID()) { - return false - } - - info1 := b1.Shards[i].GetBlobstor() - info2 := b2.Shards[i].GetBlobstor() - if !compareBlobstorInfo(info1, info2) { - return false - } - } - - for i := range b1.Shards { - for j := i + 1; j < len(b1.Shards); j++ { - if b1.Shards[i].GetMetabasePath() == b2.Shards[j].GetMetabasePath() || - !compareBlobstorInfo(b1.Shards[i].Blobstor, b2.Shards[i].Blobstor) || - b1.Shards[i].GetWritecachePath() == b2.Shards[j].GetWritecachePath() || - bytes.Equal(b1.Shards[i].GetShard_ID(), b2.Shards[j].GetShard_ID()) { - return false - } - } - } - - return true -} - -func compareBlobstorInfo(a, b []*control.BlobstorInfo) bool { - if len(a) != len(b) { - return false - } - for i := range a { - if a[i].Type != b[i].Type || - a[i].Path != b[i].Path { - return false - } - } - return true -} - -func generateListShardsResponseBody() *control.ListShardsResponse_Body { - body := new(control.ListShardsResponse_Body) - body.SetShards([]*control.ShardInfo{ - generateShardInfo(0), - generateShardInfo(1), - }) - - return body -} - -func TestSetShardModeRequest_Body_StableMarshal(t *testing.T) { - testStableMarshal(t, - generateSetShardModeRequestBody(), - new(control.SetShardModeRequest_Body), - func(m1, m2 protoMessage) bool { - return equalSetShardModeRequestBodies( - m1.(*control.SetShardModeRequest_Body), - m2.(*control.SetShardModeRequest_Body), - ) - }, - ) -} - -func generateSetShardModeRequestBody() *control.SetShardModeRequest_Body { - body := new(control.SetShardModeRequest_Body) - body.SetShardIDList([][]byte{{0, 1, 2, 3, 4}}) - body.SetMode(control.ShardMode_READ_WRITE) - - return body -} - -func equalSetShardModeRequestBodies(b1, b2 *control.SetShardModeRequest_Body) bool { - if b1.GetMode() != b2.GetMode() || len(b1.Shard_ID) != len(b2.Shard_ID) { - return false - } - - for i := range b1.Shard_ID { - if !bytes.Equal(b1.Shard_ID[i], b2.Shard_ID[i]) { - return false - } - } - - return true -} - -func TestSynchronizeTreeRequest_Body_StableMarshal(t *testing.T) { - testStableMarshal(t, - &control.SynchronizeTreeRequest_Body{ - ContainerId: []byte{1, 2, 3, 4, 5, 6, 7}, - TreeId: "someID", - Height: 42, - }, - new(control.SynchronizeTreeRequest_Body), - func(m1, m2 protoMessage) bool { - b1 := m1.(*control.SynchronizeTreeRequest_Body) - b2 := m2.(*control.SynchronizeTreeRequest_Body) - return bytes.Equal(b1.GetContainerId(), b2.GetContainerId()) && - b1.GetTreeId() == b2.GetTreeId() && - b1.GetHeight() == b2.GetHeight() - }, - ) -} diff --git a/pkg/services/control/types.go b/pkg/services/control/types.go deleted file mode 100644 index 94f681c5..00000000 --- a/pkg/services/control/types.go +++ /dev/null @@ -1,118 +0,0 @@ -package control - -import ( - "google.golang.org/protobuf/encoding/protojson" -) - -// SetKey sets public key used for signing. -func (x *Signature) SetKey(v []byte) { - if x != nil { - x.Key = v - } -} - -// SetSign sets binary signature. -func (x *Signature) SetSign(v []byte) { - if x != nil { - x.Sign = v - } -} - -// SetKey sets key of the node attribute. -func (x *NodeInfo_Attribute) SetKey(v string) { - if x != nil { - x.Key = v - } -} - -// SetValue sets value of the node attribute. -func (x *NodeInfo_Attribute) SetValue(v string) { - if x != nil { - x.Value = v - } -} - -// SetParents sets parent keys. -func (x *NodeInfo_Attribute) SetParents(v []string) { - if x != nil { - x.Parents = v - } -} - -// SetPublicKey sets public key of the FrostFS node in a binary format. -func (x *NodeInfo) SetPublicKey(v []byte) { - if x != nil { - x.PublicKey = v - } -} - -// SetAddresses sets ways to connect to a node. -func (x *NodeInfo) SetAddresses(v []string) { - if x != nil { - x.Addresses = v - } -} - -// SetAttributes sets attributes of the FrostFS Storage Node. -func (x *NodeInfo) SetAttributes(v []*NodeInfo_Attribute) { - if x != nil { - x.Attributes = v - } -} - -// SetState sets state of the FrostFS node. -func (x *NodeInfo) SetState(v NetmapStatus) { - if x != nil { - x.State = v - } -} - -// SetEpoch sets revision number of the network map. -func (x *Netmap) SetEpoch(v uint64) { - if x != nil { - x.Epoch = v - } -} - -// SetNodes sets nodes presented in network. -func (x *Netmap) SetNodes(v []*NodeInfo) { - if x != nil { - x.Nodes = v - } -} - -func (x *Netmap) MarshalJSON() ([]byte, error) { - return protojson.MarshalOptions{ - EmitUnpopulated: true, - }.Marshal(x) -} - -// SetID sets identificator of the shard. -func (x *ShardInfo) SetID(v []byte) { - x.Shard_ID = v -} - -// SetMetabasePath sets path to shard's metabase. -func (x *ShardInfo) SetMetabasePath(v string) { - x.MetabasePath = v -} - -// SetWriteCachePath sets path to shard's write-cache. -func (x *ShardInfo) SetWriteCachePath(v string) { - x.WritecachePath = v -} - -// SetPiloramaPath sets path to shard's pilorama. -func (x *ShardInfo) SetPiloramaPath(v string) { - x.PiloramaPath = v -} - -// SetMode sets path to shard's work mode. -func (x *ShardInfo) SetMode(v ShardMode) { - x.Mode = v -} - -// SetErrorCount sets shard's error counter. -func (x *ShardInfo) SetErrorCount(count uint32) { - x.ErrorCount = count -} diff --git a/pkg/services/control/types.pb.go b/pkg/services/control/types.pb.go deleted file mode 100644 index 8587556944e18307c8ce75ba9c2d7ce40610cca4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34061 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 literal 8071 zcmeHM-*4MC5PpvSibJ35EwQ(x>wp4zXp=k`Tb!VFyN4hsXz64Vl}Ur5VtYmZ_Z=zG z5oy^?x?s=%0|xvLiF3#l}`nsVK9K3t@-KUM`^WU@&9WRre%<%BIb z1@Awc_6yCkzP;tEDC+lNq}e3H5&s)Op)QojLC+9!^Mg!b1zeOFPKp##spd@g$ggx& zMNBT3!;Br^>DaR~<2bL9dX~rJ#@zR6~rq(umFG>p$LuUm)jrdeB6RBIvr_+Uw zO@j;Fg|E>OH|d<8gW#F@dQ|2MzeGphq9beh^Ld$T@BLb1ZXT-h>oKf)f8e^i+vL=k zm=wsSifN)n-)aTAW-6bt4Cdu~9u%f}tg=33HF8_nsuofus9fC!DNr#}RFI*VQsH<` zpK?=pCQK@umUOzuAaLo-$&O{2j16*Jun$$!m{wg4c4!;~6A80U@<@ zUcypw&BfIABw?Bnrsj(bHD+rQ6mF>hYRPjv_7G8}OmHZJ8kAUf%F2Y)C|ph>{lma; z2-^*fsuLZ9$GiIpHM(29@4-lE_?2)%FT#;=t|7^OrQUwQPHAZoQELMsgB%~2B2J_^ zYGQ?sj;hZ->Rf&VJPLbP+PuAggyCK#ioYc`g|pN!;eG5rHB&`_pkeP-Hm%M=QoA6VZ$*6)UuqnDv< z%jjR?%O&_^{`+nX0^m>`3WtwtcVB{bs32QFZ>fm9lyn5E|7|hJc-%At_!YETV|CqtOOhk$}V7b5Kms0JiFFlrFbZh}GN85-`NPRGM-!vLUV5JbK;n`*Jz)J+DMD zx8|>p&FXS?+Od-W3F<+h+AB~FvW|T%lqJgsmtTV_)#>pxiD}TN=P)L`Nx&JGYJ-q9 zkSGjhXyhUglYA-M#jCdIA?i6>IA~c>_!oPjj{~9KytYy7X6R}m<5`oinML=hnr3Cv zI&9?ZuytzL)@kU$$dRIj3RNQ1CD!&hb2SE}8BgfXME<2h8bUUC(w$)X)C zD>?LKwq|6Pknwt9&gc%B*)q*+0*IpwVflY|+E#&aKbsroK_8zjWAVj|aWQ6Uiu9k@ y%N(?C1}37g6H;4)eN&KS@{s=QJ21I@hf@t8X)%%OEBn^oF9hVX+3aJqWb;2}GMwE2 diff --git a/pkg/services/control/types_test.go b/pkg/services/control/types_test.go deleted file mode 100644 index df0cdf14..00000000 --- a/pkg/services/control/types_test.go +++ /dev/null @@ -1,151 +0,0 @@ -package control_test - -import ( - "bytes" - "path/filepath" - "strconv" - "testing" - - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/blobovniczatree" - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control" - "github.com/google/uuid" -) - -func TestNetmap_StableMarshal(t *testing.T) { - testStableMarshal(t, generateNetmap(), new(control.Netmap), func(m1, m2 protoMessage) bool { - return equalNetmaps(m1.(*control.Netmap), m2.(*control.Netmap)) - }) -} - -func generateNetmap() *control.Netmap { - nm := new(control.Netmap) - nm.SetEpoch(13) - - const nodeCount = 2 - - nodes := make([]*control.NodeInfo, 0, nodeCount) - - for i := 0; i < nodeCount; i++ { - n := new(control.NodeInfo) - n.SetPublicKey(testData(33)) - n.SetAddresses([]string{testString(), testString()}) - n.SetState(control.NetmapStatus_ONLINE) - - const attrCount = 2 - - attrs := make([]*control.NodeInfo_Attribute, 0, attrCount) - - for j := 0; j < attrCount; j++ { - a := new(control.NodeInfo_Attribute) - a.SetKey(testString()) - a.SetValue(testString()) - - const parentsCount = 2 - - parents := make([]string, 0, parentsCount) - - for k := 0; k < parentsCount; k++ { - parents = append(parents, testString()) - } - - a.SetParents(parents) - - attrs = append(attrs, a) - } - - n.SetAttributes(attrs) - - nodes = append(nodes, n) - } - - nm.SetNodes(nodes) - - return nm -} - -func equalNetmaps(nm1, nm2 *control.Netmap) bool { - if nm1.GetEpoch() != nm2.GetEpoch() { - return false - } - - n1, n2 := nm1.GetNodes(), nm2.GetNodes() - - if len(n1) != len(n2) { - return false - } - - for i := range n1 { - if !equalNodeInfos(n1[i], n2[i]) { - return false - } - } - - return true -} - -func equalNodeInfos(n1, n2 *control.NodeInfo) bool { - if !bytes.Equal(n1.GetPublicKey(), n2.GetPublicKey()) || - n1.GetState() != n2.GetState() { - return false - } - - na1, na2 := n1.GetAddresses(), n2.GetAddresses() - - if len(na1) != len(na2) { - return false - } - - for i := range na1 { - if na1[i] != na2[i] { - return false - } - } - - a1, a2 := n1.GetAttributes(), n2.GetAttributes() - - if len(a1) != len(a2) { - return false - } - - for i := range a1 { - if a1[i].GetKey() != a2[i].GetKey() || a1[i].GetValue() != a2[i].GetValue() { - return false - } - - p1, p2 := a1[i].GetParents(), a2[i].GetParents() - - if len(p1) != len(p2) { - return false - } - - for j := range p1 { - if p1[j] != p2[j] { - return false - } - } - } - - return true -} - -func generateShardInfo(id int) *control.ShardInfo { - si := new(control.ShardInfo) - - path := "/nice/dir/awesome/files/" + strconv.Itoa(id) - - uid, _ := uuid.NewRandom() - bin, _ := uid.MarshalBinary() - - si.SetID(bin) - si.SetMode(control.ShardMode_READ_WRITE) - si.SetMetabasePath(filepath.Join(path, "meta")) - si.Blobstor = []*control.BlobstorInfo{ - {Type: fstree.Type, Path: filepath.Join(path, "fstree")}, - {Type: blobovniczatree.Type, Path: filepath.Join(path, "blobtree")}, - } - si.SetWriteCachePath(filepath.Join(path, "writecache")) - si.SetPiloramaPath(filepath.Join(path, "pilorama")) - - return si -} diff --git a/pkg/services/tree/service.pb.go b/pkg/services/tree/service.pb.go deleted file mode 100644 index f439e3f282e9aceae47037733fe89220f60c4eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124402 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 literal 60583 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 diff --git a/pkg/services/tree/types.pb.go b/pkg/services/tree/types.pb.go deleted file mode 100644 index 6464ccb776accfbcc4ad71c3630db3520dfae867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9911 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 diff --git a/pkg/services/tree/types_frostfs.pb.go b/pkg/services/tree/types_frostfs.pb.go index 707fcc3ccdbbd65a8fef39ef75885f67673b8bc1..4399f8a8b1851e1b4b4f1d408fd0706c463df193 100644 GIT binary patch literal 10821 zcmeHNYj4y>6#cyWD+WsiFAZK^;zOiVDhaJm1}?)lRQ6vnfMG#40# z;8kG8288hZ;;iO%TpfBrmWIhQ%FZ_E=vit~!C$Zun1 zLbj)QR9RpP0fvO2XM{$4q%}636M5!*91fJ} zyAOwFr8KW*G#xL$42Ls6r|AAG%$~hH^5jcDFOK~f)P&d)?p?Fy$W5bov}pf2P3(+* zdm`mEVS%jvTVmgYHRgSM;F|GR?3eywEcc`Tq{wAiOxa7-)mYP(g!5eoc5iU*qlWr8WN8%+Gt z-w@deWiG6BnR>oFm`|*r_UeL-x_h#5WLkUrsMQO?kmWdhU5e@ewy`9 z0Sjgi9{R9b#zVVyh24RQ!kyX72e59ka23&MwAR1&U+s45uXFS*FFM`12#1ahwHK}u zU1+D2j{4%@z2*DEXY6BcdfqeKSa|mBQ>2LY{Hgb}3ejQlM-)$V0&R#>RYmp>RX98BayFi~^Ey9rl?XVA zdrN$AGTQ51b&XZasZ1yivgr#slQFT0Qtx?zJ6X;LJUS*1>>?eI*c25Ss%Oy1046vx ziYk#4x)pGT#Mu5xH09?;4qZE&NcbrjHAp8~Sk} zX%$R+>!;;*7H26h(?gbwERA|blK4D>lDCY~N@~*jkfFsn0qJnzEBPjEllMB{BU2|j zjSfQe6IzC^dTh&0q{ewHx_<(uoud znt|fG2&R~yhr;zGtoBu!}#t>VRhI##* z0$*zwlM$%Br9y_%V!@^X_K4JuP7c`Vv+jEIj&+GX7VVw*#>gGJgY~MNxo5)JBU@f` z$t$&E%n&K+Fh(bFkb9=8#>I+9=Yg7KBi=JdFW1S7YZ6M#Wu~s+I)l}r##jAwRcwMxUV=}}lGJ2dYEo9N0v@Q# z@Cx{ryG}5Ler-C|M%x~f-&n>j60iyPQ^hLXdnpxbN@Y=fs$+u=JR@awu2E_aAV1AH zfPQZkC?DMp)y5*=MRHcR><*SLg+;gv`PD7gLZW}KS0L|4N2yPrni>)rKR*@b$CmBS zcVyjpQy73t317SHs?xV-!gBF@-UM6sUHRLc@B<0pn%bHqFke4w1&n~BCYFj{q5zv~ z6}63R-dI`N*u#2-?b6S9N=`Js$f8eJNz0+@k*5twtD}2O(zM|dTYWcLoZ1atLY|_= z=-BBf({<@UptocfweY@=c*Oh~X%Kvi2MyFjkd?In>1aRe(~+>B@bu4LmkB?1>nfo3 zBc1})l27@mC9>K?=xH^*N0zJY4^$Yoqxfh{OV6u+!Xq#~*GJ}`S@1pgdwj!Nq+)Np z-%(g*I0un&%hgq3{J(+(YA-&cHso(CgZe1gwD>86zCs8g gp%*pAMUqAJKPxYk`mwotc{~bhQ%<2y)}>ee2hJiiG5`Po 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