aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2020-10-28 03:27:24 -0700
committerGitHub <noreply@github.com>2020-10-28 03:27:24 -0700
commit326fcdd86b5b787db690b6eee61d0aa8fe29e3eb (patch)
tree91476515534afcb0cd70e17c810c6c78c6a63f8d
parent5db46bb0dde30b19c166454d89b43d1bc934d89f (diff)
parent2dcc178d0ae20a013a901e4b4472dc9d8843ba59 (diff)
downloadseaweedfs-326fcdd86b5b787db690b6eee61d0aa8fe29e3eb.tar.xz
seaweedfs-326fcdd86b5b787db690b6eee61d0aa8fe29e3eb.zip
Merge pull request #1569 from taozix/master
save s3 metadata to filer.
-rw-r--r--weed/server/filer_server_handlers_read.go2
-rw-r--r--weed/server/filer_server_handlers_write_autochunk.go35
2 files changed, 36 insertions, 1 deletions
diff --git a/weed/server/filer_server_handlers_read.go b/weed/server/filer_server_handlers_read.go
index 731bd3545..16edb6167 100644
--- a/weed/server/filer_server_handlers_read.go
+++ b/weed/server/filer_server_handlers_read.go
@@ -97,7 +97,7 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request,
if r.Method == "GET" {
tagCount := 0
for k, _ := range entry.Extended {
- if strings.HasPrefix(k, "x-amz-tagging-") {
+ if strings.HasPrefix(k, "X-Amz-Tagging-") {
tagCount++
}
}
diff --git a/weed/server/filer_server_handlers_write_autochunk.go b/weed/server/filer_server_handlers_write_autochunk.go
index d86d49b2a..d996c6208 100644
--- a/weed/server/filer_server_handlers_write_autochunk.go
+++ b/weed/server/filer_server_handlers_write_autochunk.go
@@ -176,6 +176,8 @@ func (fs *FilerServer) saveMetaData(ctx context.Context, r *http.Request, fileNa
Size: chunkOffset,
}
+ fs.saveAmzMetaData(r, entry)
+
if dbErr := fs.filer.CreateEntry(ctx, entry, false, false, nil); dbErr != nil {
fs.filer.DeleteChunks(entry.Chunks)
replyerr = dbErr
@@ -308,3 +310,36 @@ func (fs *FilerServer) mkdir(ctx context.Context, w http.ResponseWriter, r *http
}
return filerResult, replyerr
}
+
+func (fs *FilerServer) saveAmzMetaData(r *http.Request, entry *filer.Entry) {
+ var (
+ storageClass = "X-Amz-Storage-Class"
+ objectTagging = "X-Amz-Tagging"
+ userMetaPrefix = "X-Amz-Meta-"
+ )
+
+ if entry.Extended == nil {
+ entry.Extended = make(map[string][]byte)
+ }
+
+ if sc := r.Header.Get(storageClass); sc != "" {
+ entry.Extended[storageClass] = []byte(sc)
+ }
+
+ if tags := r.Header.Get(objectTagging); tags != "" {
+ for _, v := range strings.Split(tags, "&") {
+ tag := strings.Split(v, "=")
+ if len(tag) == 2 {
+ entry.Extended[objectTagging+"-"+tag[0]] = []byte(tag[1])
+ }
+ }
+ }
+
+ for header, values := range r.Header {
+ if strings.HasPrefix(header, userMetaPrefix) {
+ for _, value := range values {
+ entry.Extended[header] = []byte(value)
+ }
+ }
+ }
+}