[#78] Process 'not found' error when object exists in tree
When object exists in tree but missing in storage, we can't remove bucket. While storage node does not sync tree service and object service, the only way to delete such broken bucket is to ignore 'object not found' error, clear cache and do not include missing objects in the listing result. Signed-off-by: Alex Vanin <a.vanin@yadro.com>
This commit is contained in:
parent
81e860481d
commit
fae03c2b50
1 changed files with 10 additions and 1 deletions
|
@ -646,6 +646,15 @@ func (n *layer) handleObjectDeleteErrors(ctx context.Context, bkt *data.BucketIn
|
||||||
n.cache.DeleteObjectName(bkt.CID, bkt.Name, obj.Name)
|
n.cache.DeleteObjectName(bkt.CID, bkt.Name, obj.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if client.IsErrObjectNotFound(obj.Error) {
|
||||||
|
n.log.Debug("object not found", zap.String("bucket", bkt.Name), zap.Stringer("cid", bkt.CID),
|
||||||
|
zap.String("object", obj.Name), zap.String("oid", obj.VersionID))
|
||||||
|
|
||||||
|
obj.Error = nil
|
||||||
|
|
||||||
|
n.cache.DeleteObjectName(bkt.CID, bkt.Name, obj.Name)
|
||||||
|
}
|
||||||
|
|
||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -724,7 +733,7 @@ func (n *layer) ResolveBucket(ctx context.Context, name string) (cid.ID, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *layer) DeleteBucket(ctx context.Context, p *DeleteBucketParams) error {
|
func (n *layer) DeleteBucket(ctx context.Context, p *DeleteBucketParams) error {
|
||||||
nodeVersions, err := n.bucketNodeVersions(ctx, p.BktInfo, "")
|
nodeVersions, err := n.getAllObjectsVersions(ctx, p.BktInfo, "", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue