From 061a61e018c3fbfa5554bcea50d8ce9e6951945b Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 15 Jan 2020 19:09:00 -0800 Subject: logs --- weed/filesys/dir_rename.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index e72a15758..7890d24d9 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -3,6 +3,8 @@ package filesys import ( "context" "fmt" + + "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/fuse" "github.com/seaweedfs/fuse/fs" @@ -11,6 +13,7 @@ import ( func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirectory fs.Node) error { newDir := newDirectory.(*Dir) + glog.V(4).Infof("dir Rename %s/%s => %s/%s", dir.Path, req.OldName, newDir.Path, req.NewName) return dir.wfs.WithFilerClient(ctx, func(client filer_pb.SeaweedFilerClient) error { -- cgit v1.2.3 From 2f15e9346696d18032b9d2bfffe459635cb36171 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 19 Jan 2020 12:31:56 -0800 Subject: mount: rename also clear the cache fix https://github.com/chrislusf/seaweedfs/issues/1182 --- weed/filesys/dir_rename.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 7890d24d9..8309b238a 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/chrislusf/seaweedfs/weed/filer2" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/fuse" @@ -15,7 +16,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector newDir := newDirectory.(*Dir) glog.V(4).Infof("dir Rename %s/%s => %s/%s", dir.Path, req.OldName, newDir.Path, req.NewName) - return dir.wfs.WithFilerClient(ctx, func(client filer_pb.SeaweedFilerClient) error { + err := dir.wfs.WithFilerClient(ctx, func(client filer_pb.SeaweedFilerClient) error { request := &filer_pb.AtomicRenameEntryRequest{ OldDirectory: dir.Path, @@ -33,4 +34,12 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector }) + if err == nil { + oldpath := string(filer2.NewFullPath(dir.Path, req.OldName)) + newpath := string(filer2.NewFullPath(newDir.Path, req.NewName)) + dir.wfs.listDirectoryEntriesCache.Delete(oldpath) + dir.wfs.listDirectoryEntriesCache.Delete(newpath) + } + + return err } -- cgit v1.2.3 From 1b0bfbaf59ba613ebae6b90021b2270b3ac34bc5 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 19 Jan 2020 23:59:46 -0800 Subject: refactoring --- weed/filesys/dir_rename.go | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 8309b238a..6b68e4ee9 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -2,7 +2,6 @@ package filesys import ( "context" - "fmt" "github.com/chrislusf/seaweedfs/weed/filer2" "github.com/chrislusf/seaweedfs/weed/glog" @@ -16,7 +15,10 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector newDir := newDirectory.(*Dir) glog.V(4).Infof("dir Rename %s/%s => %s/%s", dir.Path, req.OldName, newDir.Path, req.NewName) - err := dir.wfs.WithFilerClient(ctx, func(client filer_pb.SeaweedFilerClient) error { + dir.wfs.cacheDelete(filer2.NewFullPath(newDir.Path, req.NewName)) + dir.wfs.cacheDelete(filer2.NewFullPath(dir.Path, req.OldName)) + + return dir.wfs.WithFilerClient(ctx, func(client filer_pb.SeaweedFilerClient) error { request := &filer_pb.AtomicRenameEntryRequest{ OldDirectory: dir.Path, @@ -27,19 +29,11 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector _, err := client.AtomicRenameEntry(ctx, request) if err != nil { - return fmt.Errorf("renaming %s/%s => %s/%s: %v", dir.Path, req.OldName, newDir.Path, req.NewName, err) + glog.V(0).Infof("dir Rename %s/%s => %s/%s : %v", dir.Path, req.OldName, newDir.Path, req.NewName, err) + return fuse.EIO } return nil }) - - if err == nil { - oldpath := string(filer2.NewFullPath(dir.Path, req.OldName)) - newpath := string(filer2.NewFullPath(newDir.Path, req.NewName)) - dir.wfs.listDirectoryEntriesCache.Delete(oldpath) - dir.wfs.listDirectoryEntriesCache.Delete(newpath) - } - - return err } -- cgit v1.2.3 From a990ef2106a2571d0e2578eecdd856ee74986944 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 20 Jan 2020 20:21:01 -0800 Subject: mount: fix problems found in issue 1182 fix https://github.com/chrislusf/seaweedfs/issues/1182 always use the non-duplicated fs.Node Forget() the fs.Node Rename will also use the right fs.Node Avoid using the same file handle for the same file --- weed/filesys/dir_rename.go | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 6b68e4ee9..1bd1a6470 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -15,10 +15,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector newDir := newDirectory.(*Dir) glog.V(4).Infof("dir Rename %s/%s => %s/%s", dir.Path, req.OldName, newDir.Path, req.NewName) - dir.wfs.cacheDelete(filer2.NewFullPath(newDir.Path, req.NewName)) - dir.wfs.cacheDelete(filer2.NewFullPath(dir.Path, req.OldName)) - - return dir.wfs.WithFilerClient(ctx, func(client filer_pb.SeaweedFilerClient) error { + err := dir.wfs.WithFilerClient(ctx, func(client filer_pb.SeaweedFilerClient) error { request := &filer_pb.AtomicRenameEntryRequest{ OldDirectory: dir.Path, @@ -36,4 +33,27 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector return nil }) + + if err == nil { + oldPath := filer2.NewFullPath(dir.Path, req.OldName) + dir.wfs.cacheDelete(filer2.NewFullPath(newDir.Path, req.NewName)) + dir.wfs.cacheDelete(oldPath) + + oldFileNode := dir.wfs.getNode(oldPath, func() fs.Node { + return nil + }) + newDirNode := dir.wfs.getNode(filer2.FullPath(dir.Path), func() fs.Node { + return nil + }) + if oldFileNode != nil { + oldFile := oldFileNode.(*File) + oldFile.Name = req.NewName + if newDirNode != nil { + oldFile.dir = newDirNode.(*Dir) + } + } + dir.wfs.forgetNode(oldPath) + } + + return err } -- cgit v1.2.3 From 09f4ceef3a5b3eca457fd74382f0391a1db4283e Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 22 Jan 2020 11:43:43 -0800 Subject: mount: reuse previous file node --- weed/filesys/dir_rename.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 1bd1a6470..8db879d2c 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -35,8 +35,9 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector }) if err == nil { + newPath := filer2.NewFullPath(newDir.Path, req.NewName) oldPath := filer2.NewFullPath(dir.Path, req.OldName) - dir.wfs.cacheDelete(filer2.NewFullPath(newDir.Path, req.NewName)) + dir.wfs.cacheDelete(newPath) dir.wfs.cacheDelete(oldPath) oldFileNode := dir.wfs.getNode(oldPath, func() fs.Node { @@ -45,14 +46,17 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector newDirNode := dir.wfs.getNode(filer2.FullPath(dir.Path), func() fs.Node { return nil }) - if oldFileNode != nil { + dir.wfs.forgetNode(newPath) + dir.wfs.forgetNode(oldPath) + if oldFileNode != nil && newDirNode != nil { oldFile := oldFileNode.(*File) oldFile.Name = req.NewName - if newDirNode != nil { - oldFile.dir = newDirNode.(*Dir) - } + oldFile.dir = newDirNode.(*Dir) + dir.wfs.getNode(newPath, func() fs.Node { + return oldFile + }) + } - dir.wfs.forgetNode(oldPath) } return err -- cgit v1.2.3 From 72a64a5cf8c2a5adfe59665a746e013ca948e681 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 26 Jan 2020 14:42:11 -0800 Subject: use the same context object in order to retry --- weed/filesys/dir_rename.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 8db879d2c..4eb3c15b5 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -15,7 +15,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector newDir := newDirectory.(*Dir) glog.V(4).Infof("dir Rename %s/%s => %s/%s", dir.Path, req.OldName, newDir.Path, req.NewName) - err := dir.wfs.WithFilerClient(ctx, func(client filer_pb.SeaweedFilerClient) error { + err := dir.wfs.WithFilerClient(ctx, func(ctx context.Context, client filer_pb.SeaweedFilerClient) error { request := &filer_pb.AtomicRenameEntryRequest{ OldDirectory: dir.Path, -- cgit v1.2.3 From 892e726eb9c2427634c46f8ae9b7bcf0b6d1b082 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 25 Feb 2020 21:50:12 -0800 Subject: avoid reusing context object fix https://github.com/chrislusf/seaweedfs/issues/1182 --- weed/filesys/dir_rename.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 4eb3c15b5..9b0c0fe6e 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -15,7 +15,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector newDir := newDirectory.(*Dir) glog.V(4).Infof("dir Rename %s/%s => %s/%s", dir.Path, req.OldName, newDir.Path, req.NewName) - err := dir.wfs.WithFilerClient(ctx, func(ctx context.Context, client filer_pb.SeaweedFilerClient) error { + err := dir.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error { request := &filer_pb.AtomicRenameEntryRequest{ OldDirectory: dir.Path, @@ -24,7 +24,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector NewName: req.NewName, } - _, err := client.AtomicRenameEntry(ctx, request) + _, err := client.AtomicRenameEntry(context.Background(), request) if err != nil { glog.V(0).Infof("dir Rename %s/%s => %s/%s : %v", dir.Path, req.OldName, newDir.Path, req.NewName, err) return fuse.EIO -- cgit v1.2.3 From 74e23e8d64732c5221507db43399a16d43528794 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 22 Mar 2020 13:09:33 -0700 Subject: FUSE mount: rename correctly across folders --- weed/filesys/dir_rename.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 9b0c0fe6e..b590250f5 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -43,7 +43,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector oldFileNode := dir.wfs.getNode(oldPath, func() fs.Node { return nil }) - newDirNode := dir.wfs.getNode(filer2.FullPath(dir.Path), func() fs.Node { + newDirNode := dir.wfs.getNode(filer2.FullPath(newDir.Path), func() fs.Node { return nil }) dir.wfs.forgetNode(newPath) -- cgit v1.2.3 From bda13ed593385b05396e9f6c3edbc5c2aea01156 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 22 Mar 2020 13:09:51 -0700 Subject: commented prints --- weed/filesys/dir_rename.go | 1 + 1 file changed, 1 insertion(+) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index b590250f5..1a220a063 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -46,6 +46,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector newDirNode := dir.wfs.getNode(filer2.FullPath(newDir.Path), func() fs.Node { return nil }) + // fmt.Printf("new path: %v dir: %v node:%+v\n", newPath, newDir.Path, newDirNode) dir.wfs.forgetNode(newPath) dir.wfs.forgetNode(oldPath) if oldFileNode != nil && newDirNode != nil { -- cgit v1.2.3 From c0f0fdb3baeb6e9852c6876b23c1404b2c5e833d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 23 Mar 2020 00:01:34 -0700 Subject: refactoring --- weed/filesys/dir_rename.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 1a220a063..9595ea955 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -3,9 +3,9 @@ package filesys import ( "context" - "github.com/chrislusf/seaweedfs/weed/filer2" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" + "github.com/chrislusf/seaweedfs/weed/util" "github.com/seaweedfs/fuse" "github.com/seaweedfs/fuse/fs" ) @@ -35,15 +35,15 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector }) if err == nil { - newPath := filer2.NewFullPath(newDir.Path, req.NewName) - oldPath := filer2.NewFullPath(dir.Path, req.OldName) + newPath := util.NewFullPath(newDir.Path, req.NewName) + oldPath := util.NewFullPath(dir.Path, req.OldName) dir.wfs.cacheDelete(newPath) dir.wfs.cacheDelete(oldPath) oldFileNode := dir.wfs.getNode(oldPath, func() fs.Node { return nil }) - newDirNode := dir.wfs.getNode(filer2.FullPath(newDir.Path), func() fs.Node { + newDirNode := dir.wfs.getNode(util.FullPath(newDir.Path), func() fs.Node { return nil }) // fmt.Printf("new path: %v dir: %v node:%+v\n", newPath, newDir.Path, newDirNode) -- cgit v1.2.3 From 2e4fadd10aa8835e7bcbbe25b46169a6335154f6 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 25 Mar 2020 22:19:19 -0700 Subject: fix fscache move --- weed/filesys/dir_rename.go | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 9595ea955..f0b3e2118 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -2,6 +2,7 @@ package filesys import ( "context" + "fmt" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" @@ -12,8 +13,11 @@ import ( func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirectory fs.Node) error { + newPath := util.NewFullPath(newDir.Path, req.NewName) + oldPath := util.NewFullPath(dir.Path, req.OldName) + newDir := newDirectory.(*Dir) - glog.V(4).Infof("dir Rename %s/%s => %s/%s", dir.Path, req.OldName, newDir.Path, req.NewName) + glog.V(4).Infof("dir Rename %s => %s", oldPath, newPath) err := dir.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error { @@ -26,7 +30,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector _, err := client.AtomicRenameEntry(context.Background(), request) if err != nil { - glog.V(0).Infof("dir Rename %s/%s => %s/%s : %v", dir.Path, req.OldName, newDir.Path, req.NewName, err) + glog.V(0).Infof("dir Rename %s => %s : %v", oldPath, newPath, err) return fuse.EIO } @@ -35,29 +39,12 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector }) if err == nil { - newPath := util.NewFullPath(newDir.Path, req.NewName) - oldPath := util.NewFullPath(dir.Path, req.OldName) dir.wfs.cacheDelete(newPath) dir.wfs.cacheDelete(oldPath) - oldFileNode := dir.wfs.getNode(oldPath, func() fs.Node { - return nil - }) - newDirNode := dir.wfs.getNode(util.FullPath(newDir.Path), func() fs.Node { - return nil - }) - // fmt.Printf("new path: %v dir: %v node:%+v\n", newPath, newDir.Path, newDirNode) - dir.wfs.forgetNode(newPath) - dir.wfs.forgetNode(oldPath) - if oldFileNode != nil && newDirNode != nil { - oldFile := oldFileNode.(*File) - oldFile.Name = req.NewName - oldFile.dir = newDirNode.(*Dir) - dir.wfs.getNode(newPath, func() fs.Node { - return oldFile - }) + fmt.Printf("rename path: %v => %v\n", oldPath, newPath) + dir.wfs.fsNodeCache.Move(oldPath, newPath) - } } return err -- cgit v1.2.3 From 7f0d87b2065ffb5e7be1bd0591416b9649839c9e Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 26 Mar 2020 00:08:14 -0700 Subject: tree structured fs cache FsCache for FsNode, wrapping fs.Node --- weed/filesys/dir_rename.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index f0b3e2118..f8dbdbb6a 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -13,18 +13,19 @@ import ( func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirectory fs.Node) error { - newPath := util.NewFullPath(newDir.Path, req.NewName) - oldPath := util.NewFullPath(dir.Path, req.OldName) - newDir := newDirectory.(*Dir) + + newPath := util.NewFullPath(newDir.FullPath(), req.NewName) + oldPath := util.NewFullPath(dir.FullPath(), req.OldName) + glog.V(4).Infof("dir Rename %s => %s", oldPath, newPath) err := dir.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error { request := &filer_pb.AtomicRenameEntryRequest{ - OldDirectory: dir.Path, + OldDirectory: dir.FullPath(), OldName: req.OldName, - NewDirectory: newDir.Path, + NewDirectory: newDir.FullPath(), NewName: req.NewName, } -- cgit v1.2.3 From 2f5ed29c37c204fb461498b9f3c51f76442ca01c Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 27 Mar 2020 00:30:39 -0700 Subject: clean up --- weed/filesys/dir_rename.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index f8dbdbb6a..ea40f5c31 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -2,7 +2,6 @@ package filesys import ( "context" - "fmt" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" @@ -43,7 +42,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector dir.wfs.cacheDelete(newPath) dir.wfs.cacheDelete(oldPath) - fmt.Printf("rename path: %v => %v\n", oldPath, newPath) + // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) dir.wfs.fsNodeCache.Move(oldPath, newPath) } -- cgit v1.2.3 From 628b27ef3b4cf8c1c894430e0d40b0bc1de8ba96 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 11 Jun 2020 01:50:00 -0700 Subject: purge old cache implementation --- weed/filesys/dir_rename.go | 9 --------- 1 file changed, 9 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index ea40f5c31..92d667c57 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -38,14 +38,5 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector }) - if err == nil { - dir.wfs.cacheDelete(newPath) - dir.wfs.cacheDelete(oldPath) - - // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) - dir.wfs.fsNodeCache.Move(oldPath, newPath) - - } - return err } -- cgit v1.2.3 From 1bb8cae65d499dc48cc2d7db2dc5692482f3f305 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 28 Jun 2020 10:14:17 -0700 Subject: reverting and working --- weed/filesys/dir_rename.go | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 92d667c57..ea40f5c31 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -38,5 +38,14 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector }) + if err == nil { + dir.wfs.cacheDelete(newPath) + dir.wfs.cacheDelete(oldPath) + + // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) + dir.wfs.fsNodeCache.Move(oldPath, newPath) + + } + return err } -- cgit v1.2.3 From 95a1860d653ad886d4f70d031f8af0c5bf5351d4 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 28 Jun 2020 10:25:54 -0700 Subject: remove empty calls for list cache --- weed/filesys/dir_rename.go | 2 -- 1 file changed, 2 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index ea40f5c31..d618c28ea 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -39,8 +39,6 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector }) if err == nil { - dir.wfs.cacheDelete(newPath) - dir.wfs.cacheDelete(oldPath) // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) dir.wfs.fsNodeCache.Move(oldPath, newPath) -- cgit v1.2.3 From 42a338d7b0cba93b0feadd0cb826e301876b109d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 28 Jun 2020 13:41:00 -0700 Subject: FUSE mount: clean up file handles during renaming resolve dir rename when file is still open. Need to clean the file handles as soon as possible. These can happen out of order: file rename, then file release file release, then file rename --- weed/filesys/dir_rename.go | 1 + 1 file changed, 1 insertion(+) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index d618c28ea..0f7f131b1 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -42,6 +42,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) dir.wfs.fsNodeCache.Move(oldPath, newPath) + delete(dir.wfs.handles, oldPath.AsInode()) } -- cgit v1.2.3 From 3bbac0820bb025efac7c7a7c9a2291622a804ae7 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 23 Jul 2020 21:08:42 -0700 Subject: FUSE: faster rename implementation --- weed/filesys/dir_rename.go | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 0f7f131b1..511f7b74a 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -3,11 +3,12 @@ package filesys import ( "context" + "github.com/seaweedfs/fuse" + "github.com/seaweedfs/fuse/fs" + "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/chrislusf/seaweedfs/weed/util" - "github.com/seaweedfs/fuse" - "github.com/seaweedfs/fuse/fs" ) func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirectory fs.Node) error { @@ -19,7 +20,15 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector glog.V(4).Infof("dir Rename %s => %s", oldPath, newPath) - err := dir.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error { + // find local old entry + oldEntry, err := dir.wfs.metaCache.FindEntry(context.Background(), oldPath) + if err != nil { + glog.V(0).Infof("dir Rename can not find %s => %s : %v", oldPath, err) + return fuse.ENOENT + } + + // update remote filer + err = dir.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error { request := &filer_pb.AtomicRenameEntryRequest{ OldDirectory: dir.FullPath(), @@ -30,21 +39,31 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector _, err := client.AtomicRenameEntry(context.Background(), request) if err != nil { - glog.V(0).Infof("dir Rename %s => %s : %v", oldPath, newPath, err) return fuse.EIO } return nil }) + if err != nil { + glog.V(0).Infof("dir Rename %s => %s : %v", oldPath, newPath, err) + return fuse.EIO + } - if err == nil { - - // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) - dir.wfs.fsNodeCache.Move(oldPath, newPath) - delete(dir.wfs.handles, oldPath.AsInode()) - + // TODO: replicate renaming logic on filer + if err := dir.wfs.metaCache.DeleteEntry(context.Background(), oldPath); err != nil { + glog.V(0).Infof("dir Rename delete local %s => %s : %v", oldPath, newPath, err) + return fuse.EIO + } + oldEntry.FullPath = newPath + if err := dir.wfs.metaCache.InsertEntry(context.Background(), oldEntry); err != nil { + glog.V(0).Infof("dir Rename insert local %s => %s : %v", oldPath, newPath, err) + return fuse.EIO } + // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) + dir.wfs.fsNodeCache.Move(oldPath, newPath) + delete(dir.wfs.handles, oldPath.AsInode()) + return err } -- cgit v1.2.3 From 6962ca48d35a7b215dea63549a969b7c9ffce861 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 23 Jul 2020 21:31:23 -0700 Subject: fix compilation --- weed/filesys/dir_rename.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 511f7b74a..da4f1b232 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -23,7 +23,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector // find local old entry oldEntry, err := dir.wfs.metaCache.FindEntry(context.Background(), oldPath) if err != nil { - glog.V(0).Infof("dir Rename can not find %s => %s : %v", oldPath, err) + glog.V(0).Infof("dir Rename can not find source %s : %v", oldPath, err) return fuse.ENOENT } -- cgit v1.2.3 From 5788f1f6bf16f42ab31f762441c4bcdf2da3bbb9 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 24 Jul 2020 09:25:54 -0700 Subject: remove fsnode cache fix https://github.com/chrislusf/seaweedfs/issues/1400 --- weed/filesys/dir_rename.go | 1 - 1 file changed, 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index da4f1b232..120dffd1d 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -62,7 +62,6 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector } // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) - dir.wfs.fsNodeCache.Move(oldPath, newPath) delete(dir.wfs.handles, oldPath.AsInode()) return err -- cgit v1.2.3 From e74dc4e4bca245828df180f516973e5d6ac2e1df Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 9 Aug 2020 21:56:09 -0700 Subject: add back fs node cache for renaming --- weed/filesys/dir_rename.go | 1 + 1 file changed, 1 insertion(+) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 120dffd1d..da4f1b232 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -62,6 +62,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector } // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) + dir.wfs.fsNodeCache.Move(oldPath, newPath) delete(dir.wfs.handles, oldPath.AsInode()) return err -- cgit v1.2.3 From d43129d27fec49244689b37e511937d037cf89be Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 12 Aug 2020 23:52:13 -0700 Subject: add back handles lock --- weed/filesys/dir_rename.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index da4f1b232..573706b21 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -63,6 +63,9 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) dir.wfs.fsNodeCache.Move(oldPath, newPath) + + wfs.handlesLock.Lock() + defer wfs.handlesLock.Unlock() delete(dir.wfs.handles, oldPath.AsInode()) return err -- cgit v1.2.3 From 090612492cba03243ed86b8d47ad705f26d9451d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 13 Aug 2020 00:07:56 -0700 Subject: fix compilation --- weed/filesys/dir_rename.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 573706b21..c2ff6f407 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -64,8 +64,8 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) dir.wfs.fsNodeCache.Move(oldPath, newPath) - wfs.handlesLock.Lock() - defer wfs.handlesLock.Unlock() + dir.wfs.handlesLock.Lock() + defer dir.wfs.handlesLock.Unlock() delete(dir.wfs.handles, oldPath.AsInode()) return err -- cgit v1.2.3 From a7f669044eed395ed9ca86c534c504e11af8d3e0 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 14 Aug 2020 00:22:49 -0700 Subject: rename also applies to open file handle --- weed/filesys/dir_rename.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index c2ff6f407..0e417e0ab 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -64,9 +64,16 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) dir.wfs.fsNodeCache.Move(oldPath, newPath) + // change file handle dir.wfs.handlesLock.Lock() defer dir.wfs.handlesLock.Unlock() - delete(dir.wfs.handles, oldPath.AsInode()) + inodeId := oldPath.AsInode() + existingHandle, found := dir.wfs.handles[inodeId] + if !found || existingHandle == nil { + return err + } + delete(dir.wfs.handles, inodeId) + dir.wfs.handles[newPath.AsInode()] = existingHandle return err } -- cgit v1.2.3 From daf0a449f7424d4a8252673509af5afd0b9bd8ec Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 9 Sep 2020 12:07:15 -0700 Subject: properly cancel context for streaming grpc --- weed/filesys/dir_rename.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 0e417e0ab..b9e9e300b 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -29,6 +29,8 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector // update remote filer err = dir.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() request := &filer_pb.AtomicRenameEntryRequest{ OldDirectory: dir.FullPath(), @@ -37,7 +39,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector NewName: req.NewName, } - _, err := client.AtomicRenameEntry(context.Background(), request) + _, err := client.AtomicRenameEntry(ctx, request) if err != nil { return fuse.EIO } -- cgit v1.2.3 From 4a1fe4b8e25c53c871c50edb624823435fd3e948 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 22 Sep 2020 09:16:07 -0700 Subject: add error logs --- weed/filesys/dir_rename.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index b9e9e300b..3f73d0eb6 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -23,7 +23,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector // find local old entry oldEntry, err := dir.wfs.metaCache.FindEntry(context.Background(), oldPath) if err != nil { - glog.V(0).Infof("dir Rename can not find source %s : %v", oldPath, err) + glog.Errorf("dir Rename can not find source %s : %v", oldPath, err) return fuse.ENOENT } @@ -41,6 +41,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector _, err := client.AtomicRenameEntry(ctx, request) if err != nil { + glog.Errorf("dir AtomicRenameEntry %s => %s : %v", oldPath, newPath, err) return fuse.EIO } -- cgit v1.2.3 From 3fedfec1e728e84120caa636b7d0d3da0fcffbc4 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 10 Dec 2020 23:50:32 -0800 Subject: check cross device rename error --- weed/filesys/dir_rename.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 3f73d0eb6..d2acad4b2 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -42,7 +42,7 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector _, err := client.AtomicRenameEntry(ctx, request) if err != nil { glog.Errorf("dir AtomicRenameEntry %s => %s : %v", oldPath, newPath, err) - return fuse.EIO + return fuse.EXDEV } return nil -- cgit v1.2.3 From 0f64f5b9c8bea153171c8070f423b9910820bbb1 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 4 Apr 2021 21:40:58 -0700 Subject: mount: add readOnly option fix https://github.com/chrislusf/seaweedfs/issues/1961 --- weed/filesys/dir_rename.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index d2acad4b2..28316c3bd 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -13,6 +13,10 @@ import ( func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirectory fs.Node) error { + if dir.wfs.option.ReadOnly { + return fuse.EPERM + } + newDir := newDirectory.(*Dir) newPath := util.NewFullPath(newDir.FullPath(), req.NewName) -- cgit v1.2.3 From 54410ca955cf4078684bca17b4363dc33ef433ed Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 18 Apr 2021 10:02:02 -0700 Subject: cleaner way to set readonly --- weed/filesys/dir_rename.go | 4 ---- 1 file changed, 4 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 28316c3bd..d2acad4b2 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -13,10 +13,6 @@ import ( func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirectory fs.Node) error { - if dir.wfs.option.ReadOnly { - return fuse.EPERM - } - newDir := newDirectory.(*Dir) newPath := util.NewFullPath(newDir.FullPath(), req.NewName) -- cgit v1.2.3 From d9a2a7f1c4593c20ec9a92b98b726af7b32baff3 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 16 Apr 2021 02:55:09 -0700 Subject: WIP no memory issue if some directory is removed, it may have this error $ rm -Rf ~/tmp/m2/s1 rm: fts_read: Device not configured --- weed/filesys/dir_rename.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index d2acad4b2..7bc705102 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -64,19 +64,17 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector return fuse.EIO } - // fmt.Printf("rename path: %v => %v\n", oldPath, newPath) - dir.wfs.fsNodeCache.Move(oldPath, newPath) - // change file handle dir.wfs.handlesLock.Lock() defer dir.wfs.handlesLock.Unlock() inodeId := oldPath.AsInode() existingHandle, found := dir.wfs.handles[inodeId] if !found || existingHandle == nil { - return err + return nil } + glog.V(4).Infof("opened filehandle %s => %s", oldPath, newPath) delete(dir.wfs.handles, inodeId) dir.wfs.handles[newPath.AsInode()] = existingHandle - return err + return nil } -- cgit v1.2.3 From 6cbd786db9b96833248444c42992c239f2424d95 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sat, 17 Apr 2021 10:48:22 -0700 Subject: correctly runs git clone --- weed/filesys/dir_rename.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'weed/filesys/dir_rename.go') diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go index 7bc705102..b07710d17 100644 --- a/weed/filesys/dir_rename.go +++ b/weed/filesys/dir_rename.go @@ -64,11 +64,22 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector return fuse.EIO } + oldFsNode := NodeWithId(oldPath.AsInode()) + newFsNode := NodeWithId(newPath.AsInode()) + dir.wfs.Server.InvalidateInternalNode(oldFsNode, newFsNode, func(internalNode fs.Node) { + if file, ok := internalNode.(*File); ok { + glog.V(4).Infof("internal node %s", file.Name) + file.Name = req.NewName + file.id = uint64(newFsNode) + } + }) + // change file handle dir.wfs.handlesLock.Lock() defer dir.wfs.handlesLock.Unlock() inodeId := oldPath.AsInode() existingHandle, found := dir.wfs.handles[inodeId] + glog.V(4).Infof("has open filehandle %s: %v", oldPath, found) if !found || existingHandle == nil { return nil } -- cgit v1.2.3