defer r.HTTPResponse.Body.Close()
defer io.Copy(ioutil.Discard, r.HTTPResponse.Body)
- hostID := r.HTTPResponse.Header.Get("X-Amz-Id-2")
-
// Bucket exists in a different region, and request needs
// to be made to the correct region.
if r.HTTPResponse.StatusCode == http.StatusMovedPermanently {
- r.Error = requestFailure{
- RequestFailure: awserr.NewRequestFailure(
- awserr.New("BucketRegionError",
- fmt.Sprintf("incorrect region, the bucket is not in '%s' region",
- aws.StringValue(r.Config.Region)),
- nil),
- r.HTTPResponse.StatusCode,
- r.RequestID,
- ),
- hostID: hostID,
+ msg := fmt.Sprintf(
+ "incorrect region, the bucket is not in '%s' region at endpoint '%s'",
+ aws.StringValue(r.Config.Region),
+ aws.StringValue(r.Config.Endpoint),
+ )
+ if v := r.HTTPResponse.Header.Get("x-amz-bucket-region"); len(v) != 0 {
+ msg += fmt.Sprintf(", bucket is in '%s' region", v)
}
+ r.Error = awserr.NewRequestFailure(
+ awserr.New("BucketRegionError", msg, nil),
+ r.HTTPResponse.StatusCode,
+ r.RequestID,
+ )
return
}
errMsg = statusText
}
- r.Error = requestFailure{
- RequestFailure: awserr.NewRequestFailure(
- awserr.New(errCode, errMsg, err),
- r.HTTPResponse.StatusCode,
- r.RequestID,
- ),
- hostID: hostID,
- }
+ r.Error = awserr.NewRequestFailure(
+ awserr.New(errCode, errMsg, err),
+ r.HTTPResponse.StatusCode,
+ r.RequestID,
+ )
}
// A RequestFailure provides access to the S3 Request ID and Host ID values
// Host ID is the S3 Host ID needed for debug, and contacting support
HostID() string
}
-
-type requestFailure struct {
- awserr.RequestFailure
-
- hostID string
-}
-
-func (r requestFailure) Error() string {
- extra := fmt.Sprintf("status code: %d, request id: %s, host id: %s",
- r.StatusCode(), r.RequestID(), r.hostID)
- return awserr.SprintError(r.Code(), r.Message(), extra, r.OrigErr())
-}
-func (r requestFailure) String() string {
- return r.Error()
-}
-func (r requestFailure) HostID() string {
- return r.hostID
-}