From 6d4beea1873764056691c921c9908cfd79c2d764 Mon Sep 17 00:00:00 2001 From: Pavel Karpy Date: Tue, 18 Oct 2022 16:03:03 +0300 Subject: [PATCH] [#1902] tree: Extend grpc service with `ListTrees` method Signed-off-by: Pavel Karpy --- pkg/services/tree/service.go | 45 ++++++++++++++++++++++++++ pkg/services/tree/service.pb.go | Bin 108982 -> 118636 bytes pkg/services/tree/service.proto | 25 ++++++++++++++ pkg/services/tree/service_grpc.pb.go | Bin 16729 -> 18231 bytes pkg/services/tree/service_neofs.pb.go | Bin 51945 -> 57224 bytes 5 files changed, 70 insertions(+) diff --git a/pkg/services/tree/service.go b/pkg/services/tree/service.go index 03d6673b9..16ec780ca 100644 --- a/pkg/services/tree/service.go +++ b/pkg/services/tree/service.go @@ -522,6 +522,51 @@ func (s *Service) GetOpLog(req *GetOpLogRequest, srv TreeService_GetOpLogServer) } } +func (s *Service) TreeList(ctx context.Context, req *TreeListRequest) (*TreeListResponse, error) { + var cid cidSDK.ID + + err := cid.Decode(req.GetBody().GetContainerId()) + if err != nil { + return nil, err + } + + // just verify the signature, not ACL checks + // since tree ID list is not protected like + // the containers list + err = verifyMessage(req) + if err != nil { + return nil, err + } + + ns, pos, err := s.getContainerNodes(cid) + if err != nil { + return nil, err + } + if pos < 0 { + var resp *TreeListResponse + var outErr error + err = s.forEachNode(ctx, ns, func(c TreeServiceClient) bool { + resp, outErr = c.TreeList(ctx, req) + return outErr == nil + }) + if err != nil { + return nil, err + } + return resp, outErr + } + + ids, err := s.forest.TreeList(cid) + if err != nil { + return nil, err + } + + return &TreeListResponse{ + Body: &TreeListResponse_Body{ + Ids: ids, + }, + }, nil +} + func protoToMeta(arr []*KeyValue) []pilorama.KeyValue { meta := make([]pilorama.KeyValue, len(arr)) for i, kv := range arr { diff --git a/pkg/services/tree/service.pb.go b/pkg/services/tree/service.pb.go index 09236fcf89a708b6dc78279440ea5137d3b0e369..303fcd9499682d79e4b43bfcb6f020a51a5b560b 100644 GIT binary patch delta 6220 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 F`hWYnTZ;ey diff --git a/pkg/services/tree/service.proto b/pkg/services/tree/service.proto index 9bcefbf95..473ef84f9 100644 --- a/pkg/services/tree/service.proto +++ b/pkg/services/tree/service.proto @@ -39,6 +39,8 @@ service TreeService { rpc GetNodeByPath (GetNodeByPathRequest) returns (GetNodeByPathResponse); // GetSubTree returns tree corresponding to a specific node. rpc GetSubTree (GetSubTreeRequest) returns (stream GetSubTreeResponse); + // TreeList return list of the existing trees in the container. + rpc TreeList (TreeListRequest) returns (TreeListResponse); /* Synchronization API */ @@ -273,6 +275,29 @@ message GetSubTreeResponse { Signature signature = 2; }; +message TreeListRequest { + message Body { + // Container ID in V2 format. + bytes container_id = 1; + } + + // Request body. + Body body = 1; + // Request signature. + Signature signature = 2; +} + +message TreeListResponse { + message Body { + // Tree IDs. + repeated string ids = 1; + } + + // Response body. + Body body = 1; + Signature signature = 2; +} + message ApplyRequest { message Body { diff --git a/pkg/services/tree/service_grpc.pb.go b/pkg/services/tree/service_grpc.pb.go index 14e21305b8f2c84480444d67b444969d38ccdcfc..aca152ad0969f5898892aa030f8a95464f4bd9d3 100644 GIT binary patch delta 532 zcmccF#JIhWaf1@OTS!rAs!wKdi9%6oNoi4@LJo+XpQccfk*bhd0pw)nr7M&G6%{LF z=7B|%^Ycm)GxJi5^td=-x+fhdHYzLbeOb=6gd<8Sbb!H9sE2U*2rMK9LbwL}c;>=981Bcua!}Zr1Y@V?yu} zIHn+YlPvDSWhNi=%R_KJq#i?X1bHnc%SH)v80sig=y|3TZ@%C%1<6)HUeU?6yW}Rz zYt>Hfmlm7M=_AYxR5f{`$4s~xn=h)1BkbM$QFAJSH@RQu9$evMf2Vu|NAckC$s1;~ OPcE3kx>>I8v<(0PdSuA} delta 22 ecmeC!&-`*K^9G^5$^IMIC-bjl-Mn|vX&V4@0}37h