diff options
| author | chrislu <chris.lu@gmail.com> | 2022-01-11 03:23:03 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-01-11 03:23:03 -0800 |
| commit | b8fbf19e9ad3d7bb36876a674da18887b3c49c08 (patch) | |
| tree | 83ec5b207a0ec8ebcf83cadb0888c17e7a395dd4 /weed/server | |
| parent | 6a12520a960f2f19843c47135f2c915da7472c26 (diff) | |
| download | seaweedfs-b8fbf19e9ad3d7bb36876a674da18887b3c49c08.tar.xz seaweedfs-b8fbf19e9ad3d7bb36876a674da18887b3c49c08.zip | |
mount: rename follow POSIX
Diffstat (limited to 'weed/server')
| -rw-r--r-- | weed/server/filer_grpc_server_rename.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/weed/server/filer_grpc_server_rename.go b/weed/server/filer_grpc_server_rename.go index 62bcccabb..d70df5db7 100644 --- a/weed/server/filer_grpc_server_rename.go +++ b/weed/server/filer_grpc_server_rename.go @@ -72,6 +72,21 @@ func (fs *FilerServer) StreamRenameEntry(req *filer_pb.StreamRenameEntryRequest, return fmt.Errorf("%s/%s not found: %v", req.OldDirectory, req.OldName, err) } + // follow https://pubs.opengroup.org/onlinepubs/000095399/functions/rename.html + if oldEntry.IsDirectory() { + targetDir := newParent.Child(req.NewName) + newEntry, err := fs.filer.FindEntry(ctx, targetDir) + if err == nil { + if !newEntry.IsDirectory() { + fs.filer.RollbackTransaction(ctx) + return fmt.Errorf("%s is not directory", targetDir) + } + if entries, _, _ := fs.filer.ListDirectoryEntries(context.Background(), targetDir, "", false, 1, "", "", ""); len(entries) > 0 { + return fmt.Errorf("%s is not empty", targetDir) + } + } + } + moveErr := fs.moveEntry(ctx, stream, oldParent, oldEntry, newParent, req.NewName, req.Signatures) if moveErr != nil { fs.filer.RollbackTransaction(ctx) |
