From 3790142b10c765e69c80c1789c347fde969c103a Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Mon, 1 Apr 2024 13:17:28 +0300 Subject: [PATCH] [#212] pool: Control sub tree nodes order Signed-off-by: Alex Vanin --- pool/tree/pool.go | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/pool/tree/pool.go b/pool/tree/pool.go index 38ef09e..28cc98b 100644 --- a/pool/tree/pool.go +++ b/pool/tree/pool.go @@ -26,6 +26,16 @@ const ( defaultStreamTimeout = 10 * time.Second ) +// SubTreeSort defines an order of nodes returned from GetSubTree RPC. +type SubTreeSort int32 + +const ( + // NoneOrder does not specify order of nodes returned in GetSubTree RPC. + NoneOrder SubTreeSort = iota + // AscendingOrder specifies ascending alphabetical order of nodes based on FilePath attribute. + AscendingOrder +) + var ( // ErrNodeNotFound is returned from Tree service in case of not found error. ErrNodeNotFound = errors.New("not found") @@ -119,6 +129,7 @@ type GetSubTreeParams struct { RootID uint64 Depth uint32 BearerToken []byte + Order SubTreeSort } // AddNodeParams groups parameters of Pool.AddNode operation. @@ -388,12 +399,17 @@ func (p *Pool) GetSubTree(ctx context.Context, prm GetSubTreeParams) (*SubTreeRe RootId: prm.RootID, Depth: prm.Depth, BearerToken: prm.BearerToken, - OrderBy: &grpcService.GetSubTreeRequest_Body_Order{ - Direction: grpcService.GetSubTreeRequest_Body_Order_Asc, - }, + OrderBy: new(grpcService.GetSubTreeRequest_Body_Order), }, } + switch prm.Order { + case AscendingOrder: + request.Body.OrderBy.Direction = grpcService.GetSubTreeRequest_Body_Order_Asc + default: + 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,