aboutsummaryrefslogtreecommitdiff
path: root/weed/server
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-03-19 01:31:49 -0700
committerChris Lu <chris.lu@gmail.com>2021-03-19 01:31:49 -0700
commitb1a86cf8085d5f0aff27f7ff6e3b8a7d666f766b (patch)
treea8acbba3be8543777d6b8c31dfc247a154d6de5e /weed/server
parentaa5179ce3c5ad92887dcddaa59a7f17868fb5bb2 (diff)
downloadseaweedfs-b1a86cf8085d5f0aff27f7ff6e3b8a7d666f766b.tar.xz
seaweedfs-b1a86cf8085d5f0aff27f7ff6e3b8a7d666f766b.zip
s3: copy object to itself
fix https://github.com/chrislusf/seaweedfs/issues/1922
Diffstat (limited to 'weed/server')
-rw-r--r--weed/server/filer_server_handlers_write_autochunk.go20
1 files changed, 15 insertions, 5 deletions
diff --git a/weed/server/filer_server_handlers_write_autochunk.go b/weed/server/filer_server_handlers_write_autochunk.go
index 318399281..b990f6488 100644
--- a/weed/server/filer_server_handlers_write_autochunk.go
+++ b/weed/server/filer_server_handlers_write_autochunk.go
@@ -212,7 +212,7 @@ func (fs *FilerServer) saveMetaData(ctx context.Context, r *http.Request, fileNa
entry.Extended = make(map[string][]byte)
}
- fs.saveAmzMetaData(r, entry)
+ SaveAmzMetaData(r, entry.Extended, false)
for k, v := range r.Header {
if len(v) > 0 && strings.HasPrefix(k, needle.PairNamePrefix) {
@@ -383,17 +383,24 @@ 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) {
+func SaveAmzMetaData(r *http.Request, existing map[string][]byte, isReplace bool) (metadata map[string][]byte) {
+
+ metadata = make(map[string][]byte)
+ if !isReplace {
+ for k, v := range existing {
+ metadata[k] = v
+ }
+ }
if sc := r.Header.Get(xhttp.AmzStorageClass); sc != "" {
- entry.Extended[xhttp.AmzStorageClass] = []byte(sc)
+ metadata[xhttp.AmzStorageClass] = []byte(sc)
}
if tags := r.Header.Get(xhttp.AmzObjectTagging); tags != "" {
for _, v := range strings.Split(tags, "&") {
tag := strings.Split(v, "=")
if len(tag) == 2 {
- entry.Extended[xhttp.AmzObjectTagging+"-"+tag[0]] = []byte(tag[1])
+ metadata[xhttp.AmzObjectTagging+"-"+tag[0]] = []byte(tag[1])
}
}
}
@@ -401,8 +408,11 @@ func (fs *FilerServer) saveAmzMetaData(r *http.Request, entry *filer.Entry) {
for header, values := range r.Header {
if strings.HasPrefix(header, xhttp.AmzUserMetaPrefix) {
for _, value := range values {
- entry.Extended[header] = []byte(value)
+ metadata[header] = []byte(value)
}
}
}
+
+ return
+
}