obj-handlers: Rewrite src & dst path cmp in Copy() (#3998)

CopyObjectHandler() was incorrectly performing comparison
between destination and source object paths, which sometimes
leads to a lock race. This PR simplifies comparaison and add
one test case.
This commit is contained in:
Anis Elleuch
2017-03-29 17:21:38 +01:00
committed by Harshavardhana
parent 61b08137b0
commit e2aba9196f
2 changed files with 19 additions and 8 deletions
+1 -3
View File
@@ -23,7 +23,6 @@ import (
"net"
"net/http"
"net/url"
"path"
"sort"
"strconv"
@@ -267,7 +266,6 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re
vars := mux.Vars(r)
dstBucket := vars["bucket"]
dstObject := vars["object"]
cpDestPath := "/" + path.Join(dstBucket, dstObject)
objectAPI := api.ObjectAPI()
if objectAPI == nil {
@@ -302,7 +300,7 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re
return
}
cpSrcDstSame := cpSrcPath == cpDestPath
cpSrcDstSame := srcBucket == dstBucket && srcObject == dstObject
// Hold write lock on destination since in both cases
// - if source and destination are same
// - if source and destination are different