diff options
author | Christopher Speller <crspeller@gmail.com> | 2015-11-26 09:02:00 -0500 |
---|---|---|
committer | Christopher Speller <crspeller@gmail.com> | 2015-11-26 09:02:00 -0500 |
commit | 006fc61ecce1ba3d5c7b7163309467c24edbbc46 (patch) | |
tree | 533f5dcd094ebd94d425e64a4261b7b21ec6f3fa /Godeps/_workspace/src/github.com/goamz | |
parent | aaced173f8b3020fbbef236d84b070c2c67ee968 (diff) | |
parent | 2639452967e66c4840164c36817234d3e7c12ac1 (diff) | |
download | chat-006fc61ecce1ba3d5c7b7163309467c24edbbc46.tar.gz chat-006fc61ecce1ba3d5c7b7163309467c24edbbc46.tar.bz2 chat-006fc61ecce1ba3d5c7b7163309467c24edbbc46.zip |
Merge pull request #1505 from mattermost/lib-upgrade
Lib upgrade
Diffstat (limited to 'Godeps/_workspace/src/github.com/goamz')
7 files changed, 109 insertions, 30 deletions
diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws.go b/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws.go index cec40be7d..77bf563d6 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws.go @@ -41,25 +41,26 @@ type ServiceInfo struct { // // See http://goo.gl/d8BP1 for more details. type Region struct { - Name string // the canonical name of this region. - EC2Endpoint string - S3Endpoint string - S3BucketEndpoint string // Not needed by AWS S3. Use ${bucket} for bucket name. - S3LocationConstraint bool // true if this region requires a LocationConstraint declaration. - S3LowercaseBucket bool // true if the region requires bucket names to be lower case. - SDBEndpoint string - SESEndpoint string - SNSEndpoint string - SQSEndpoint string - IAMEndpoint string - ELBEndpoint string - DynamoDBEndpoint string - CloudWatchServicepoint ServiceInfo - AutoScalingEndpoint string - RDSEndpoint ServiceInfo - STSEndpoint string - CloudFormationEndpoint string - ECSEndpoint string + Name string // the canonical name of this region. + EC2Endpoint string + S3Endpoint string + S3BucketEndpoint string // Not needed by AWS S3. Use ${bucket} for bucket name. + S3LocationConstraint bool // true if this region requires a LocationConstraint declaration. + S3LowercaseBucket bool // true if the region requires bucket names to be lower case. + SDBEndpoint string + SESEndpoint string + SNSEndpoint string + SQSEndpoint string + IAMEndpoint string + ELBEndpoint string + DynamoDBEndpoint string + CloudWatchServicepoint ServiceInfo + AutoScalingEndpoint string + RDSEndpoint ServiceInfo + STSEndpoint string + CloudFormationEndpoint string + ECSEndpoint string + DynamoDBStreamsEndpoint string } var Regions = map[string]Region{ diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/aws/regions.go b/Godeps/_workspace/src/github.com/goamz/goamz/aws/regions.go index 508231e7d..5e18f023d 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/aws/regions.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/aws/regions.go @@ -20,6 +20,7 @@ var USGovWest = Region{ "https://sts.amazonaws.com", "https://cloudformation.us-gov-west-1.amazonaws.com", "https://ecs.us-gov-west-1.amazonaws.com", + "https://streams.dynamodb.us-gov-west-1.amazonaws.com", } var USEast = Region{ @@ -42,6 +43,7 @@ var USEast = Region{ "https://sts.amazonaws.com", "https://cloudformation.us-east-1.amazonaws.com", "https://ecs.us-east-1.amazonaws.com", + "https://streams.dynamodb.us-east-1.amazonaws.com", } var USWest = Region{ @@ -64,6 +66,7 @@ var USWest = Region{ "https://sts.amazonaws.com", "https://cloudformation.us-west-1.amazonaws.com", "https://ecs.us-west-1.amazonaws.com", + "https://streams.dynamodb.us-west-1.amazonaws.com", } var USWest2 = Region{ @@ -86,6 +89,7 @@ var USWest2 = Region{ "https://sts.amazonaws.com", "https://cloudformation.us-west-2.amazonaws.com", "https://ecs.us-west-2.amazonaws.com", + "https://streams.dynamodb.us-west-2.amazonaws.com", } var EUWest = Region{ @@ -108,6 +112,7 @@ var EUWest = Region{ "https://sts.amazonaws.com", "https://cloudformation.eu-west-1.amazonaws.com", "https://ecs.eu-west-1.amazonaws.com", + "https://streams.dynamodb.eu-west-1.amazonaws.com", } var EUCentral = Region{ @@ -130,6 +135,7 @@ var EUCentral = Region{ "https://sts.amazonaws.com", "https://cloudformation.eu-central-1.amazonaws.com", "https://ecs.eu-central-1.amazonaws.com", + "https://streams.dynamodb.eu-central-1.amazonaws.com", } var APSoutheast = Region{ @@ -152,6 +158,7 @@ var APSoutheast = Region{ "https://sts.amazonaws.com", "https://cloudformation.ap-southeast-1.amazonaws.com", "https://ecs.ap-southeast-1.amazonaws.com", + "https://streams.dynamodb.ap-southeast-1.amazonaws.com", } var APSoutheast2 = Region{ @@ -174,6 +181,7 @@ var APSoutheast2 = Region{ "https://sts.amazonaws.com", "https://cloudformation.ap-southeast-2.amazonaws.com", "https://ecs.ap-southeast-2.amazonaws.com", + "https://streams.dynamodb.ap-southeast-2.amazonaws.com", } var APNortheast = Region{ @@ -196,6 +204,7 @@ var APNortheast = Region{ "https://sts.amazonaws.com", "https://cloudformation.ap-northeast-1.amazonaws.com", "https://ecs.ap-northeast-1.amazonaws.com", + "https://streams.dynamodb.ap-northeast-1.amazonaws.com", } var SAEast = Region{ @@ -218,6 +227,7 @@ var SAEast = Region{ "https://sts.amazonaws.com", "https://cloudformation.sa-east-1.amazonaws.com", "https://ecs.sa-east-1.amazonaws.com", + "https://streams.dynamodb.sa-east-1.amazonaws.com", } var CNNorth = Region{ @@ -240,4 +250,5 @@ var CNNorth = Region{ "https://sts.cn-north-1.amazonaws.com.cn", "https://cloudformation.cn-north-1.amazonaws.com.cn", "https://ecs.cn-north-1.amazonaws.com.cn", + "https://streams.dynamodb.cn-north-1.amazonaws.com.cn", } diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi.go index 1533bda9d..348ead300 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi.go @@ -339,9 +339,23 @@ func (p completeParts) Len() int { return len(p) } func (p completeParts) Less(i, j int) bool { return p[i].PartNumber < p[j].PartNumber } func (p completeParts) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +type completeResponse struct { + // The element name: should be either CompleteMultipartUploadResult or Error. + XMLName xml.Name + // If the element was error, then it should have the following: + Code string + Message string + RequestId string + HostId string +} + // Complete assembles the given previously uploaded parts into the // final object. This operation may take several minutes. // +// The complete call to AMZ may still fail after returning HTTP 200, +// so even though it's unusued, the body of the reply must be demarshalled +// and checked to see whether or not the complete succeeded. +// // See http://goo.gl/2Z7Tw for details. func (m *Multi) Complete(parts []Part) error { params := map[string][]string{ @@ -356,6 +370,8 @@ func (m *Multi) Complete(parts []Part) error { if err != nil { return err } + + // Setting Content-Length prevents breakage on DreamObjects for attempt := m.Bucket.S3.AttemptStrategy.Start(); attempt.Next(); { req := &request{ method: "POST", @@ -363,11 +379,25 @@ func (m *Multi) Complete(parts []Part) error { path: m.Key, params: params, payload: bytes.NewReader(data), + headers: map[string][]string{ + "Content-Length": []string{strconv.Itoa(len(data))}, + }, } - err := m.Bucket.S3.query(req, nil) + + resp := &completeResponse{} + err := m.Bucket.S3.query(req, resp) if shouldRetry(err) && attempt.HasNext() { continue } + if err == nil && resp.XMLName.Local == "Error" { + err = &Error{ + StatusCode: 200, + Code: resp.Code, + Message: resp.Message, + RequestId: resp.RequestId, + HostId: resp.HostId, + } + } return err } panic("unreachable") diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi_test.go index efab302d6..5c788d9cc 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi_test.go @@ -300,7 +300,9 @@ func (s *S) TestMultiComplete(c *C) { c.Assert(err, IsNil) err = multi.Complete([]s3.Part{{2, `"ETag2"`, 32}, {1, `"ETag1"`, 64}}) - c.Assert(err, IsNil) + // returns InternalErrorDump in the payload, which should manifest as + // an error. + c.Assert(err, NotNil) testServer.WaitRequest() req := testServer.WaitRequest() diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3.go index 88ef975d1..9490c9b96 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3.go @@ -1101,10 +1101,14 @@ func shouldRetry(err error) bool { } case *Error: switch e.Code { - case "InternalError", "NoSuchUpload", "NoSuchBucket": + case "InternalError", "NoSuchUpload", "NoSuchBucket", "RequestTimeout": return true } + // let's handle tls handshake timeout issues and similar temporary errors + case net.Error: + return e.Temporary() } + return false } diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test/server.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test/server.go index 10d36924f..2016b5659 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test/server.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test/server.go @@ -594,6 +594,10 @@ func (objr objectResource) put(a *action) interface{} { obj.checksum = gotHash obj.mtime = time.Now() objr.bucket.objects[objr.name] = obj + + h := a.w.Header() + h.Set("ETag", fmt.Sprintf(`"%s"`, hex.EncodeToString(obj.checksum))) + return nil } diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign.go index c8e57a2f7..722d97d29 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign.go @@ -39,10 +39,37 @@ var s3ParamsToSign = map[string]bool{ "delete": true, } +type keySortableTupleList []keySortableTuple + +type keySortableTuple struct { + Key string + TupleString string +} + +func (l keySortableTupleList) StringSlice() []string { + slice := make([]string, len(l)) + for i, v := range l { + slice[i] = v.TupleString + } + return slice +} + +func (l keySortableTupleList) Len() int { + return len(l) +} + +func (l keySortableTupleList) Less(i, j int) bool { + return l[i].Key < l[j].Key +} + +func (l keySortableTupleList) Swap(i, j int) { + l[i], l[j] = l[j], l[i] +} + func sign(auth aws.Auth, method, canonicalPath string, params, headers map[string][]string) { var md5, ctype, date, xamz string var xamzDate bool - var sarray []string + var sarray keySortableTupleList for k, v := range headers { k = strings.ToLower(k) switch k { @@ -57,7 +84,7 @@ func sign(auth aws.Auth, method, canonicalPath string, params, headers map[strin default: if strings.HasPrefix(k, "x-amz-") { vall := strings.Join(v, ",") - sarray = append(sarray, k+":"+vall) + sarray = append(sarray, keySortableTuple{k, k + ":" + vall}) if k == "x-amz-date" { xamzDate = true date = "" @@ -66,8 +93,8 @@ func sign(auth aws.Auth, method, canonicalPath string, params, headers map[strin } } if len(sarray) > 0 { - sort.StringSlice(sarray).Sort() - xamz = strings.Join(sarray, "\n") + "\n" + sort.Sort(sarray) + xamz = strings.Join(sarray.StringSlice(), "\n") + "\n" } expires := false @@ -83,17 +110,17 @@ func sign(auth aws.Auth, method, canonicalPath string, params, headers map[strin if s3ParamsToSign[k] { for _, vi := range v { if vi == "" { - sarray = append(sarray, k) + sarray = append(sarray, keySortableTuple{k, k}) } else { // "When signing you do not encode these values." - sarray = append(sarray, k+"="+vi) + sarray = append(sarray, keySortableTuple{k, k + "=" + vi}) } } } } if len(sarray) > 0 { - sort.StringSlice(sarray).Sort() - canonicalPath = canonicalPath + "?" + strings.Join(sarray, "&") + sort.Sort(sarray) + canonicalPath = canonicalPath + "?" + strings.Join(sarray.StringSlice(), "&") } payload := method + "\n" + md5 + "\n" + ctype + "\n" + date + "\n" + xamz + canonicalPath |