You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2017/01/12 06:54:06 UTC
jclouds git commit: GetBucketLocation should use path-style requests.
Repository: jclouds
Updated Branches:
refs/heads/master 47350e354 -> 98ea91747
GetBucketLocation should use path-style requests.
When making a GetBucketLocation request, Amazon may route the request
to the bucket region. When making it with v4 signer, the request may
fail because of the region mismatch. Concretely, a request to
test.s3.amazonaws.com may resolve to s3-us-west-2-w.amazonaws.com. The
request itself is prepared for the us-east-1 region (s3.amazonaws.com
endpoint), but then fails when the DNS resolution points to a
us-west-2 endpoint.
Bucket-in-path works around this for the GetBucketLocation requests.
That means that every GetBucketLocation request will be of the form:
https://s3.amazonaws.com/{bucket}?location. This ensures that jclouds
requests will not be subjected to Amazon's routing/DNS pointers.
Fixes: JCLOUDS-1213
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/98ea9174
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/98ea9174
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/98ea9174
Branch: refs/heads/master
Commit: 98ea9174770693035158b5efba8efef1abe4a934
Parents: 47350e3
Author: Timur Alperovich <ti...@swiftstack.com>
Authored: Wed Jan 11 18:14:57 2017 -0800
Committer: Timur Alperovich <ti...@swiftstack.com>
Committed: Wed Jan 11 18:14:57 2017 -0800
----------------------------------------------------------------------
apis/s3/src/main/java/org/jclouds/s3/S3Client.java | 4 ++--
.../java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java | 5 ++---
.../src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java | 10 ++++------
3 files changed, 8 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/98ea9174/apis/s3/src/main/java/org/jclouds/s3/S3Client.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/S3Client.java b/apis/s3/src/main/java/org/jclouds/s3/S3Client.java
index cb1d9bd..7f80f3b 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/S3Client.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/S3Client.java
@@ -533,10 +533,10 @@ public interface S3Client extends Closeable {
@Named("GetBucketLocation")
@GET
@QueryParams(keys = "location")
- @Path("/")
+ @Path("/{bucket}")
@Endpoint(Bucket.class)
@XMLResponseParser(LocationConstraintHandler.class)
- String getBucketLocation(@Bucket @BinderParam(BindAsHostPrefixIfConfigured.class) @ParamValidators(
+ String getBucketLocation(@Bucket @PathParam("bucket") @ParamValidators(
BucketNameValidator.class) String bucketName);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/98ea9174/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java
index b4e493c..db1ed95 100644
--- a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java
+++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java
@@ -36,10 +36,9 @@ public class AWSS3ClientExpectTest extends BaseAWSS3ClientExpectTest {
HttpRequest bucketLocationRequest = HttpRequest.builder()
.method("GET")
- .endpoint("https://test.s3.amazonaws.com/?location")
- .addHeader("Host", "test.s3.amazonaws.com")
+ .endpoint("https://s3.amazonaws.com/test?location")
.addHeader("Date", CONSTANT_DATE)
- .addHeader("Authorization", "AWS identity:D1rymKrEdvzvhmZXeg+Z0R+tiug=").build();
+ .addHeader("Authorization", "AWS identity:sOZnJSLuwnMVn7CiEKcVmpFI0rU=").build();
HttpResponse bucketLocationResponse = HttpResponse.builder()
.statusCode(200)
http://git-wip-us.apache.org/repos/asf/jclouds/blob/98ea9174/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java
index 4d58afb..6b2f36f 100644
--- a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java
+++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java
@@ -80,8 +80,7 @@ public class AWSS3ClientTest extends S3ClientTest<AWSS3Client> {
Invokable<?, ?> method = method(AWSS3Client.class, "getBucketLocation", String.class);
GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of("bucket-eu-west-1"));
- assertRequestLineEquals(request, "GET https://bucket-eu-west-1.s3.amazonaws.com/?location HTTP/1.1");
- assertNonPayloadHeadersEqual(request, "Host: bucket-eu-west-1.s3.amazonaws.com\n");
+ assertRequestLineEquals(request, "GET https://s3.amazonaws.com/bucket-eu-west-1?location HTTP/1.1");
assertPayloadEquals(request, null, null, false);
assertResponseParserClassEquals(method, request, ParseSax.class);
@@ -116,16 +115,15 @@ public class AWSS3ClientTest extends S3ClientTest<AWSS3Client> {
Invokable<?, ?> method = method(AWSS3Client.class, "getBucketLocation", String.class);
GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of("bucket"));
- assertRequestLineEquals(request, "GET https://bucket.s3.amazonaws.com/?location HTTP/1.1");
- assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
+ assertRequestLineEquals(request, "GET https://s3.amazonaws.com/bucket?location HTTP/1.1");
assertPayloadEquals(request, null, null, false);
request = (GeneratedHttpRequest) filter.filter(request);
- assertRequestLineEquals(request, "GET https://bucket.s3.amazonaws.com/?location HTTP/1.1");
+ assertRequestLineEquals(request, "GET https://s3.amazonaws.com/bucket?location HTTP/1.1");
assertNonPayloadHeadersEqual(
request,
- "Authorization: AWS identity:2fFTeYJTDwiJmaAkKj732RjNbOg=\nDate: 2009-11-08T15:54:08.897Z\nHost: bucket.s3.amazonaws.com\n");
+ "Authorization: AWS identity:f1Pt8/8Yr/HZahuc6KPI1B2+Mw4=\nDate: 2009-11-08T15:54:08.897Z\n");
assertPayloadEquals(request, null, null, false);
assertResponseParserClassEquals(method, request, ParseSax.class);