diff --git a/weed/mount/weedfs_xattr.go b/weed/mount/weedfs_xattr.go index b03fa01f1..e1d6d4351 100644 --- a/weed/mount/weedfs_xattr.go +++ b/weed/mount/weedfs_xattr.go @@ -1,11 +1,12 @@ package mount import ( - "github.com/hanwen/go-fuse/v2/fuse" - sys "golang.org/x/sys/unix" "runtime" "strings" "syscall" + + "github.com/hanwen/go-fuse/v2/fuse" + sys "golang.org/x/sys/unix" ) const ( @@ -131,6 +132,11 @@ func (wfs *WFS) SetXAttr(cancel <-chan struct{}, input *fuse.SetXAttrIn, attr st entry.Extended[XATTR_PREFIX+attr] = data } + if fh != nil { + fh.dirtyMetadata = true + return fuse.OK + } + return wfs.saveEntry(path, entry) } diff --git a/weed/server/filer_grpc_server.go b/weed/server/filer_grpc_server.go index d67bd425e..7607af664 100644 --- a/weed/server/filer_grpc_server.go +++ b/weed/server/filer_grpc_server.go @@ -3,12 +3,13 @@ package weed_server import ( "context" "fmt" - "github.com/seaweedfs/seaweedfs/weed/cluster" "os" "path/filepath" "strconv" "time" + "github.com/seaweedfs/seaweedfs/weed/cluster" + "github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/operation" @@ -157,7 +158,7 @@ func (fs *FilerServer) CreateEntry(ctx context.Context, req *filer_pb.CreateEntr createErr := fs.filer.CreateEntry(ctx, newEntry, req.OExcl, req.IsFromOtherCluster, req.Signatures, req.SkipCheckParentDirectory) if createErr == nil { - fs.filer.DeleteChunks(garbage) + fs.filer.DeleteChunksNotRecursive(garbage) } else { glog.V(3).Infof("CreateEntry %s: %v", filepath.Join(req.Directory, req.Entry.Name), createErr) resp.Error = createErr.Error() @@ -189,7 +190,7 @@ func (fs *FilerServer) UpdateEntry(ctx context.Context, req *filer_pb.UpdateEntr } if err = fs.filer.UpdateEntry(ctx, entry, newEntry); err == nil { - fs.filer.DeleteChunks(garbage) + fs.filer.DeleteChunksNotRecursive(garbage) fs.filer.NotifyUpdateEvent(ctx, entry, newEntry, true, req.IsFromOtherCluster, req.Signatures)