aboutsummaryrefslogtreecommitdiff
path: root/weed/server
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-01-11 03:23:03 -0800
committerchrislu <chris.lu@gmail.com>2022-01-11 03:23:03 -0800
commitb8fbf19e9ad3d7bb36876a674da18887b3c49c08 (patch)
tree83ec5b207a0ec8ebcf83cadb0888c17e7a395dd4 /weed/server
parent6a12520a960f2f19843c47135f2c915da7472c26 (diff)
downloadseaweedfs-b8fbf19e9ad3d7bb36876a674da18887b3c49c08.tar.xz
seaweedfs-b8fbf19e9ad3d7bb36876a674da18887b3c49c08.zip
mount: rename follow POSIX
Diffstat (limited to 'weed/server')
-rw-r--r--weed/server/filer_grpc_server_rename.go15
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)