Browse Source

Avoids unnecessary directory emptiness checks and potential race conditions when the entry was never deleted in the first place.

also-delete-parent-directory-if-empty
chrislu 2 months ago
parent
commit
4b12262431
  1. 8
      weed/filer/filer.go
  2. 9
      weed/server/filer_grpc_server.go

8
weed/filer/filer.go

@ -355,11 +355,17 @@ func (f *Filer) FindEntry(ctx context.Context, p util.FullPath) (entry *Entry, e
if entry.GetS3ExpireTime().Before(time.Now()) && !entry.IsS3Versioning() {
if delErr := f.doDeleteEntryMetaAndData(ctx, entry, true, false, nil); delErr != nil {
glog.ErrorfCtx(ctx, "FindEntry doDeleteEntryMetaAndData %s failed: %v", entry.FullPath, delErr)
// Deletion failed - return entry as still existing rather than claiming it's gone
return entry, nil
}
return nil, filer_pb.ErrNotFound
}
} else if entry.Crtime.Add(time.Duration(entry.TtlSec) * time.Second).Before(time.Now()) {
f.Store.DeleteOneEntry(ctx, entry)
if delErr := f.Store.DeleteOneEntry(ctx, entry); delErr != nil {
glog.ErrorfCtx(ctx, "FindEntry DeleteOneEntry %s failed: %v", entry.FullPath, delErr)
// Deletion failed - return entry as still existing rather than claiming it's gone
return entry, nil
}
return nil, filer_pb.ErrNotFound
}
}

9
weed/server/filer_grpc_server.go

@ -293,12 +293,15 @@ func (fs *FilerServer) DeleteEntry(ctx context.Context, req *filer_pb.DeleteEntr
err = fs.filer.DeleteEntryMetaAndData(ctx, util.JoinPath(req.Directory, req.Name), req.IsRecursive, req.IgnoreRecursiveError, req.IsDeleteData, req.IsFromOtherCluster, req.Signatures, req.IfNotModifiedAfter)
resp = &filer_pb.DeleteEntryResponse{}
if err != nil && err != filer_pb.ErrNotFound {
resp.Error = err.Error()
if err != nil {
if err != filer_pb.ErrNotFound {
resp.Error = err.Error()
}
// Return early: either a real error or entry not found (nothing deleted, so no cleanup needed)
return resp, nil
}
// Optional cleanup of empty parent directories
// Optional cleanup of empty parent directories (only if deletion succeeded)
if req.DeleteEmptyParentDirectories {
stopAtPath := util.FullPath(req.DeleteEmptyParentDirectoriesStopPath)
if stopAtPath == "" {

Loading…
Cancel
Save