aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2020-09-24 18:21:34 -0700
committerGitHub <noreply@github.com>2020-09-24 18:21:34 -0700
commit043b0631369bec00b33eb53cdf2cdef3eced006c (patch)
tree72e1b320c3487aa5f6cb3cd5fc849bfd94108ec8
parentdbf5327b9874bf7137eb53cbe04cd362efeb864c (diff)
parent48c578410fea2128f81356250b2cd9d56074d878 (diff)
downloadseaweedfs-043b0631369bec00b33eb53cdf2cdef3eced006c.tar.xz
seaweedfs-043b0631369bec00b33eb53cdf2cdef3eced006c.zip
Merge pull request #1482 from hilimd/master
Fix: s3 delete object
-rw-r--r--weed/command/mount_std.go29
-rw-r--r--weed/filesys/dir.go6
-rw-r--r--weed/filesys/wfs.go8
-rw-r--r--weed/s3api/s3api_object_handlers.go12
4 files changed, 18 insertions, 37 deletions
diff --git a/weed/command/mount_std.go b/weed/command/mount_std.go
index 3947a871a..7c0f56d3a 100644
--- a/weed/command/mount_std.go
+++ b/weed/command/mount_std.go
@@ -7,7 +7,6 @@ import (
"fmt"
"github.com/chrislusf/seaweedfs/weed/filesys/meta_cache"
"os"
- "os/user"
"path"
"runtime"
"strconv"
@@ -87,34 +86,11 @@ func RunMount(option *MountOptions, umask os.FileMode) bool {
fuse.Unmount(dir)
- uid, gid := uint32(0), uint32(0)
-
// detect mount folder mode
if *option.dirAutoCreate {
- os.MkdirAll(dir, os.FileMode(0777) &^ umask)
+ os.MkdirAll(dir, os.FileMode(0777)&^umask)
}
- mountMode := os.ModeDir | 0755
fileInfo, err := os.Stat(dir)
- if err == nil {
- mountMode = os.ModeDir | fileInfo.Mode()
- uid, gid = util.GetFileUidGid(fileInfo)
- fmt.Printf("mount point owner uid=%d gid=%d mode=%s\n", uid, gid, fileInfo.Mode())
- } else {
- fmt.Printf("can not stat %s\n", dir)
- return false
- }
-
- if uid == 0 {
- if u, err := user.Current(); err == nil {
- if parsedId, pe := strconv.ParseUint(u.Uid, 10, 32); pe == nil {
- uid = uint32(parsedId)
- }
- if parsedId, pe := strconv.ParseUint(u.Gid, 10, 32); pe == nil {
- gid = uint32(parsedId)
- }
- fmt.Printf("current uid=%d gid=%d\n", uid, gid)
- }
- }
// mapping uid, gid
uidGidMapper, err := meta_cache.NewUidGidMapper(*option.uidMap, *option.gidMap)
@@ -174,9 +150,6 @@ func RunMount(option *MountOptions, umask os.FileMode) bool {
CacheSizeMB: *option.cacheSizeMB,
DataCenter: *option.dataCenter,
EntryCacheTtl: 3 * time.Second,
- MountUid: uid,
- MountGid: gid,
- MountMode: mountMode,
MountCtime: fileInfo.ModTime(),
MountMtime: time.Now(),
Umask: umask,
diff --git a/weed/filesys/dir.go b/weed/filesys/dir.go
index 574749ef0..7d93dbd9f 100644
--- a/weed/filesys/dir.go
+++ b/weed/filesys/dir.go
@@ -82,9 +82,9 @@ func (dir *Dir) Getxattr(ctx context.Context, req *fuse.GetxattrRequest, resp *f
func (dir *Dir) setRootDirAttributes(attr *fuse.Attr) {
attr.Inode = 1 // filer2.FullPath(dir.Path).AsInode()
attr.Valid = time.Hour
- attr.Uid = dir.wfs.option.MountUid
- attr.Gid = dir.wfs.option.MountGid
- attr.Mode = dir.wfs.option.MountMode
+ attr.Uid = dir.entry.Attributes.Uid
+ attr.Gid = dir.entry.Attributes.Gid
+ attr.Mode = os.FileMode(dir.entry.Attributes.FileMode)
attr.Crtime = dir.wfs.option.MountCtime
attr.Ctime = dir.wfs.option.MountCtime
attr.Mtime = dir.wfs.option.MountMtime
diff --git a/weed/filesys/wfs.go b/weed/filesys/wfs.go
index ff8e585d7..ef31a9258 100644
--- a/weed/filesys/wfs.go
+++ b/weed/filesys/wfs.go
@@ -37,9 +37,6 @@ type Option struct {
EntryCacheTtl time.Duration
Umask os.FileMode
- MountUid uint32
- MountGid uint32
- MountMode os.FileMode
MountCtime time.Time
MountMtime time.Time
@@ -88,7 +85,7 @@ func NewSeaweedFileSystem(option *Option) *WFS {
cacheUniqueId := util.Md5String([]byte(option.FilerGrpcAddress + option.FilerMountRootPath + util.Version()))[0:4]
cacheDir := path.Join(option.CacheDir, cacheUniqueId)
if option.CacheSizeMB > 0 {
- os.MkdirAll(cacheDir, os.FileMode(0777) &^ option.Umask)
+ os.MkdirAll(cacheDir, os.FileMode(0777)&^option.Umask)
wfs.chunkCache = chunk_cache.NewTieredChunkCache(256, cacheDir, option.CacheSizeMB)
}
@@ -99,7 +96,8 @@ func NewSeaweedFileSystem(option *Option) *WFS {
wfs.metaCache.Shutdown()
})
- wfs.root = &Dir{name: wfs.option.FilerMountRootPath, wfs: wfs}
+ entry, _ := filer_pb.GetEntry(wfs, util.FullPath(wfs.option.FilerMountRootPath))
+ wfs.root = &Dir{name: wfs.option.FilerMountRootPath, wfs: wfs, entry: entry}
wfs.fsNodeCache = newFsCache(wfs.root)
return wfs
diff --git a/weed/s3api/s3api_object_handlers.go b/weed/s3api/s3api_object_handlers.go
index ea3cb47dd..13fae72a3 100644
--- a/weed/s3api/s3api_object_handlers.go
+++ b/weed/s3api/s3api_object_handlers.go
@@ -112,6 +112,12 @@ func (s3a *S3ApiServer) DeleteObjectHandler(w http.ResponseWriter, r *http.Reque
bucket, object := getBucketAndObject(r)
+ response, _ := s3a.listFilerEntries(bucket, object, 1, "", "/")
+ if len(response.Contents) != 0 && strings.HasSuffix(object, "/") {
+ w.WriteHeader(http.StatusNoContent)
+ return
+ }
+
destUrl := fmt.Sprintf("http://%s%s/%s%s?recursive=true",
s3a.option.Filer, s3a.option.BucketsPath, bucket, object)
@@ -121,7 +127,6 @@ func (s3a *S3ApiServer) DeleteObjectHandler(w http.ResponseWriter, r *http.Reque
}
w.WriteHeader(http.StatusNoContent)
})
-
}
// / ObjectIdentifier carries key name for the object to delete.
@@ -178,6 +183,11 @@ func (s3a *S3ApiServer) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *h
s3a.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
for _, object := range deleteObjects.Objects {
+ response, _ := s3a.listFilerEntries(bucket, object.ObjectName, 1, "", "/")
+ if len(response.Contents) != 0 && strings.HasSuffix(object.ObjectName, "/") {
+ continue
+ }
+
lastSeparator := strings.LastIndex(object.ObjectName, "/")
parentDirectoryPath, entryName, isDeleteData, isRecursive := "/", object.ObjectName, true, true
if lastSeparator > 0 && lastSeparator+1 < len(object.ObjectName) {