aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/Makefile2
-rw-r--r--weed/filesys/meta_cache/meta_cache_init.go8
-rw-r--r--weed/s3api/s3api_objects_list_handlers.go15
-rw-r--r--weed/server/filer_server_handlers_tagging.go20
4 files changed, 38 insertions, 7 deletions
diff --git a/weed/Makefile b/weed/Makefile
index 8f1257d09..edc0bf544 100644
--- a/weed/Makefile
+++ b/weed/Makefile
@@ -16,7 +16,7 @@ debug_shell:
debug_mount:
go build -gcflags="all=-N -l"
- dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec weed -- mount -dir=~/tmp/mm -cacheCapacityMB=0 -filer.path=/buckets
+ dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec weed -- -v=4 mount -dir=~/tmp/mm -cacheCapacityMB=0 -filer.path=/buckets
debug_server:
go build -gcflags="all=-N -l"
diff --git a/weed/filesys/meta_cache/meta_cache_init.go b/weed/filesys/meta_cache/meta_cache_init.go
index 1ca3b16d5..9af25ae29 100644
--- a/weed/filesys/meta_cache/meta_cache_init.go
+++ b/weed/filesys/meta_cache/meta_cache_init.go
@@ -17,9 +17,9 @@ func EnsureVisited(mc *MetaCache, client filer_pb.FilerClient, dirPath util.Full
glog.V(4).Infof("ReadDirAllEntries %s ...", path)
util.Retry("ReadDirAllEntries", func() error {
- err = filer_pb.ReadDirAllEntries(client, dirPath, "", func(pbEntry *filer_pb.Entry, isLast bool) error {
- entry := filer.FromPbEntry(string(dirPath), pbEntry)
- if IsHiddenSystemEntry(string(dirPath), entry.Name()) {
+ err = filer_pb.ReadDirAllEntries(client, path, "", func(pbEntry *filer_pb.Entry, isLast bool) error {
+ entry := filer.FromPbEntry(string(path), pbEntry)
+ if IsHiddenSystemEntry(string(path), entry.Name()) {
return nil
}
if err := mc.doInsertEntry(context.Background(), entry); err != nil {
@@ -35,7 +35,7 @@ func EnsureVisited(mc *MetaCache, client filer_pb.FilerClient, dirPath util.Full
})
if err != nil {
- err = fmt.Errorf("list %s: %v", dirPath, err)
+ err = fmt.Errorf("list %s: %v", path, err)
}
return
diff --git a/weed/s3api/s3api_objects_list_handlers.go b/weed/s3api/s3api_objects_list_handlers.go
index 739cdd8f9..66c66d280 100644
--- a/weed/s3api/s3api_objects_list_handlers.go
+++ b/weed/s3api/s3api_objects_list_handlers.go
@@ -63,6 +63,14 @@ func (s3a *S3ApiServer) ListObjectsV2Handler(w http.ResponseWriter, r *http.Requ
writeErrorResponse(w, s3err.ErrInternalError, r.URL)
return
}
+
+ if len(response.Contents) == 0 {
+ if exists, existErr := s3a.exists(s3a.option.BucketsPath, bucket, true); existErr == nil && !exists {
+ writeErrorResponse(w, s3err.ErrNoSuchBucket, r.URL)
+ return
+ }
+ }
+
responseV2 := &ListBucketResultV2{
XMLName: response.XMLName,
Name: response.Name,
@@ -106,6 +114,13 @@ func (s3a *S3ApiServer) ListObjectsV1Handler(w http.ResponseWriter, r *http.Requ
return
}
+ if len(response.Contents) == 0 {
+ if exists, existErr := s3a.exists(s3a.option.BucketsPath, bucket, true); existErr == nil && !exists {
+ writeErrorResponse(w, s3err.ErrNoSuchBucket, r.URL)
+ return
+ }
+ }
+
writeSuccessResponseXML(w, encodeResponse(response))
}
diff --git a/weed/server/filer_server_handlers_tagging.go b/weed/server/filer_server_handlers_tagging.go
index 50b3a2c06..70b5327d6 100644
--- a/weed/server/filer_server_handlers_tagging.go
+++ b/weed/server/filer_server_handlers_tagging.go
@@ -78,11 +78,27 @@ func (fs *FilerServer) DeleteTaggingHandler(w http.ResponseWriter, r *http.Reque
existingEntry.Extended = make(map[string][]byte)
}
+ // parse out tags to be deleted
+ toDelete := strings.Split(r.URL.Query().Get("tagging"), ",")
+ deletions := make(map[string]struct{})
+ for _, deletion := range toDelete {
+ deletions[deletion] = struct{}{}
+ }
+
+ // delete all tags or specific tags
hasDeletion := false
for header, _ := range existingEntry.Extended {
if strings.HasPrefix(header, needle.PairNamePrefix) {
- delete(existingEntry.Extended, header)
- hasDeletion = true
+ if len(deletions) == 0 {
+ delete(existingEntry.Extended, header)
+ hasDeletion = true
+ } else {
+ tag := header[len(needle.PairNamePrefix):]
+ if _, found := deletions[tag]; found {
+ delete(existingEntry.Extended, header)
+ hasDeletion = true
+ }
+ }
}
}