[#233] Clean tag node in the tree service instead of removal
/ DCO (pull_request) Successful in 1m49s
Details
/ Vulncheck (pull_request) Successful in 2m10s
Details
/ Builds (1.20) (pull_request) Successful in 2m26s
Details
/ Builds (1.21) (pull_request) Successful in 2m17s
Details
/ Lint (pull_request) Successful in 4m21s
Details
/ Tests (1.20) (pull_request) Successful in 2m15s
Details
/ Tests (1.21) (pull_request) Successful in 2m10s
Details
/ DCO (pull_request) Successful in 1m49s
Details
/ Vulncheck (pull_request) Successful in 2m10s
Details
/ Builds (1.20) (pull_request) Successful in 2m26s
Details
/ Builds (1.21) (pull_request) Successful in 2m17s
Details
/ Lint (pull_request) Successful in 4m21s
Details
/ Tests (1.20) (pull_request) Successful in 2m15s
Details
/ Tests (1.21) (pull_request) Successful in 2m10s
Details
With new retry policy of tree service pool, gateway should avoid deletion of system nodes from tree. Absence of node in the tree will trigger retry. Other storage in the network may return already deleted node while tree is not completely synced, and client will get unexpected result. Signed-off-by: Alex Vanin <a.vanin@yadro.com>pull/244/head
parent
5f9555afad
commit
e87c3715c5
|
@ -49,14 +49,8 @@ func (t *TreeServiceMock) PutObjectTagging(_ context.Context, bktInfo *data.Buck
|
|||
return nil
|
||||
}
|
||||
|
||||
func (t *TreeServiceMock) DeleteObjectTagging(_ context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion) error {
|
||||
cnrTagsMap, ok := t.tags[bktInfo.CID.EncodeToString()]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
delete(cnrTagsMap, objVersion.ID)
|
||||
return nil
|
||||
func (t *TreeServiceMock) DeleteObjectTagging(ctx context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion) error {
|
||||
return t.PutObjectTagging(ctx, bktInfo, objVersion, nil)
|
||||
}
|
||||
|
||||
func (t *TreeServiceMock) GetBucketTagging(context.Context, *data.BucketInfo) (map[string]string, error) {
|
||||
|
|
|
@ -471,16 +471,7 @@ func (c *Tree) PutObjectTagging(ctx context.Context, bktInfo *data.BucketInfo, o
|
|||
}
|
||||
|
||||
func (c *Tree) DeleteObjectTagging(ctx context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion) error {
|
||||
tagNode, err := c.getTreeNode(ctx, bktInfo, objVersion.ID, isTagKV)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if tagNode == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return c.service.RemoveNode(ctx, bktInfo, versionTree, tagNode.ID)
|
||||
return c.PutObjectTagging(ctx, bktInfo, objVersion, nil)
|
||||
}
|
||||
|
||||
func (c *Tree) GetBucketTagging(ctx context.Context, bktInfo *data.BucketInfo) (map[string]string, error) {
|
||||
|
@ -524,16 +515,7 @@ func (c *Tree) PutBucketTagging(ctx context.Context, bktInfo *data.BucketInfo, t
|
|||
}
|
||||
|
||||
func (c *Tree) DeleteBucketTagging(ctx context.Context, bktInfo *data.BucketInfo) error {
|
||||
node, err := c.getSystemNode(ctx, bktInfo, []string{bucketTaggingFilename}, nil)
|
||||
if err != nil && !errors.Is(err, layer.ErrNodeNotFound) {
|
||||
return err
|
||||
}
|
||||
|
||||
if node != nil {
|
||||
return c.service.RemoveNode(ctx, bktInfo, systemTree, node.ID)
|
||||
}
|
||||
|
||||
return nil
|
||||
return c.PutBucketTagging(ctx, bktInfo, nil)
|
||||
}
|
||||
|
||||
func (c *Tree) getTreeNode(ctx context.Context, bktInfo *data.BucketInfo, nodeID uint64, key string) (*treeNode, error) {
|
||||
|
|
Loading…
Reference in New Issue