aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/s3api/filer_multipart.go19
1 files changed, 12 insertions, 7 deletions
diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go
index 54067f8f2..64ce16b45 100644
--- a/weed/s3api/filer_multipart.go
+++ b/weed/s3api/filer_multipart.go
@@ -175,16 +175,21 @@ func findByPartNumber(fileName string, parts []CompletedPart) (etag string, foun
if formatErr != nil {
return
}
- foundParts := []int{}
- for i, part := range parts {
+ x := sort.Search(len(parts), func(i int) bool {
+ return parts[i].PartNumber >= partNumber
+ })
+ if parts[x].PartNumber != partNumber {
+ return
+ }
+ y := 0
+ for i, part := range parts[x:] {
if part.PartNumber == partNumber {
- foundParts = append(foundParts, i)
+ y = i
+ } else {
+ break
}
}
- if len(foundParts) == 0 {
- return
- }
- return parts[foundParts[len(foundParts)-1]].ETag, true
+ return parts[x+y].ETag, true
}
func (s3a *S3ApiServer) abortMultipartUpload(input *s3.AbortMultipartUploadInput) (output *s3.AbortMultipartUploadOutput, code s3err.ErrorCode) {