aboutsummaryrefslogtreecommitdiff
path: root/weed/server
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-12-10 23:50:32 -0800
committerChris Lu <chris.lu@gmail.com>2020-12-10 23:50:32 -0800
commit3fedfec1e728e84120caa636b7d0d3da0fcffbc4 (patch)
treeaa9e75f2f206f79a32c887c11f945086ce42644d /weed/server
parentc2f18a10cbca811705c3086f35811dc052c28853 (diff)
downloadseaweedfs-3fedfec1e728e84120caa636b7d0d3da0fcffbc4.tar.xz
seaweedfs-3fedfec1e728e84120caa636b7d0d3da0fcffbc4.zip
check cross device rename error
Diffstat (limited to 'weed/server')
-rw-r--r--weed/server/filer_grpc_server_rename.go11
-rw-r--r--weed/server/filer_server_handlers_write.go9
2 files changed, 9 insertions, 11 deletions
diff --git a/weed/server/filer_grpc_server_rename.go b/weed/server/filer_grpc_server_rename.go
index 391efb793..fa86737ac 100644
--- a/weed/server/filer_grpc_server_rename.go
+++ b/weed/server/filer_grpc_server_rename.go
@@ -15,13 +15,18 @@ func (fs *FilerServer) AtomicRenameEntry(ctx context.Context, req *filer_pb.Atom
glog.V(1).Infof("AtomicRenameEntry %v", req)
+ oldParent := util.FullPath(filepath.ToSlash(req.OldDirectory))
+ newParent := util.FullPath(filepath.ToSlash(req.NewDirectory))
+
+ if err := fs.filer.CanRename(oldParent, newParent); err != nil {
+ return nil, err
+ }
+
ctx, err := fs.filer.BeginTransaction(ctx)
if err != nil {
return nil, err
}
- oldParent := util.FullPath(filepath.ToSlash(req.OldDirectory))
-
oldEntry, err := fs.filer.FindEntry(ctx, oldParent.Child(req.OldName))
if err != nil {
fs.filer.RollbackTransaction(ctx)
@@ -29,7 +34,7 @@ func (fs *FilerServer) AtomicRenameEntry(ctx context.Context, req *filer_pb.Atom
}
var events MoveEvents
- moveErr := fs.moveEntry(ctx, oldParent, oldEntry, util.FullPath(filepath.ToSlash(req.NewDirectory)), req.NewName, &events)
+ moveErr := fs.moveEntry(ctx, oldParent, oldEntry, newParent, req.NewName, &events)
if moveErr != nil {
fs.filer.RollbackTransaction(ctx)
return nil, fmt.Errorf("%s/%s move error: %v", req.OldDirectory, req.OldName, moveErr)
diff --git a/weed/server/filer_server_handlers_write.go b/weed/server/filer_server_handlers_write.go
index c2d92f8ba..9131b042b 100644
--- a/weed/server/filer_server_handlers_write.go
+++ b/weed/server/filer_server_handlers_write.go
@@ -111,14 +111,7 @@ func (fs *FilerServer) detectStorageOption(requestURI, qCollection, qReplication
// required by buckets folder
bucketDefaultReplication, fsync := "", false
if strings.HasPrefix(requestURI, fs.filer.DirBucketsPath+"/") {
- bucketAndObjectKey := requestURI[len(fs.filer.DirBucketsPath)+1:]
- t := strings.Index(bucketAndObjectKey, "/")
- if t < 0 {
- collection = bucketAndObjectKey
- }
- if t > 0 {
- collection = bucketAndObjectKey[:t]
- }
+ collection = fs.filer.DetectBucket(util.FullPath(requestURI))
bucketDefaultReplication, fsync = fs.filer.ReadBucketOption(collection)
}
if replication == "" {