diff --git a/api/data/tree.go b/api/data/tree.go index 9ae6af32..801040b4 100644 --- a/api/data/tree.go +++ b/api/data/tree.go @@ -50,6 +50,7 @@ func (e ExtendedObjectInfo) Version() string { // Basically used for "system" object. type BaseNodeVersion struct { ID uint64 + ParenID uint64 OID oid.ID Timestamp uint64 Size int64 diff --git a/internal/neofs/tree.go b/internal/neofs/tree.go index c20c26ed..3b5e9bdb 100644 --- a/internal/neofs/tree.go +++ b/internal/neofs/tree.go @@ -31,6 +31,7 @@ type ( TreeNode struct { ID uint64 + ParentID uint64 ObjID oid.ID TimeStamp uint64 Size int64 @@ -109,12 +110,14 @@ func NewTreeClient(addr string, key *keys.PrivateKey) (*TreeClient, error) { type NodeResponse interface { GetMeta() []*tree.KeyValue GetNodeId() uint64 + GetParentId() uint64 GetTimestamp() uint64 } func newTreeNode(nodeInfo NodeResponse) (*TreeNode, error) { treeNode := &TreeNode{ ID: nodeInfo.GetNodeId(), + ParentID: nodeInfo.GetParentId(), TimeStamp: nodeInfo.GetTimestamp(), Meta: make(map[string]string, len(nodeInfo.GetMeta())), } @@ -171,6 +174,7 @@ func newNodeVersionFromTreeNode(filePath string, treeNode *TreeNode) *data.NodeV version := &data.NodeVersion{ BaseNodeVersion: data.BaseNodeVersion{ ID: treeNode.ID, + ParenID: treeNode.ParentID, OID: treeNode.ObjID, Timestamp: treeNode.TimeStamp, ETag: eTag, @@ -1078,12 +1082,7 @@ func (c *TreeClient) addVersion(ctx context.Context, cnrID cid.ID, treeID string node, err := c.getUnversioned(ctx, cnrID, treeID, version.FilePath) if err == nil { - parentID, err := c.getParent(ctx, cnrID, treeID, node.ID) - if err != nil { - return 0, err - } - - if err = c.moveNode(ctx, cnrID, treeID, node.ID, parentID, meta); err != nil { + if err = c.moveNode(ctx, cnrID, treeID, node.ID, node.ParenID, meta); err != nil { return 0, err } @@ -1146,15 +1145,6 @@ func (c *TreeClient) getVersions(ctx context.Context, cnrID cid.ID, treeID, file return result, nil } -func (c *TreeClient) getParent(ctx context.Context, cnrID cid.ID, treeID string, id uint64) (uint64, error) { - subTree, err := c.getSubTree(ctx, cnrID, treeID, id, 1) - if err != nil { - return 0, err - } - - return subTree[0].GetParentId(), nil -} - func (c *TreeClient) getSubTree(ctx context.Context, cnrID cid.ID, treeID string, rootID uint64, depth uint32) ([]*tree.GetSubTreeResponse_Body, error) { request := &tree.GetSubTreeRequest{ Body: &tree.GetSubTreeRequest_Body{ diff --git a/syncTree.sh b/syncTree.sh index 0934f4c1..4b5d6550 100755 --- a/syncTree.sh +++ b/syncTree.sh @@ -2,7 +2,7 @@ mkdir -p internal/neofs/services/tree 2>/dev/null -REVISION="1678fe44ed2bdac1c3ae3421d2cc500c2be87a98" +REVISION="74c861342e19611dba534bb719aafda757f0d009" echo "tree service revision ${REVISION}"