You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/08 07:06:19 UTC
[4/5] git commit: JCLOUDS-641 etag is content-md5 in swift.
JCLOUDS-641 etag is content-md5 in swift.
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/commit/90b4367f
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/90b4367f
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/90b4367f
Branch: refs/heads/master
Commit: 90b4367f8c71bc05a3ab0a6f4ae2d4ac63dd5d93
Parents: bde513f
Author: Adrian Cole <ac...@twitter.com>
Authored: Tue Oct 7 20:11:29 2014 -0700
Committer: Adrian Cole <ad...@apache.org>
Committed: Tue Oct 7 22:05:58 2014 -0700
----------------------------------------------------------------------
.../swift/v1/functions/ParseObjectFromResponse.java | 9 ++++++++-
.../swift/v1/functions/ParseObjectListFromResponse.java | 9 +++++++--
.../openstack/swift/v1/features/ObjectApiMockTest.java | 11 +++++++++++
3 files changed, 26 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/90b4367f/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java
----------------------------------------------------------------------
diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java
index 714a403..cc934e4 100644
--- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java
+++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectFromResponse.java
@@ -16,6 +16,7 @@
*/
package org.jclouds.openstack.swift.v1.functions;
+import static com.google.common.io.BaseEncoding.base16;
import static com.google.common.net.HttpHeaders.ETAG;
import static com.google.common.net.HttpHeaders.LAST_MODIFIED;
import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.OBJECT_DELETE_AT;
@@ -35,6 +36,7 @@ import org.jclouds.rest.InvocationContext;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import com.google.common.base.Function;
+import com.google.common.hash.HashCode;
public class ParseObjectFromResponse implements Function<HttpResponse, SwiftObject>,
InvocationContext<ParseObjectFromResponse> {
@@ -61,10 +63,15 @@ public class ParseObjectFromResponse implements Function<HttpResponse, SwiftObje
payload.setContentMetadata(contentMeta);
}
+ String etag = from.getFirstHeaderOrNull(ETAG);
+ if (etag != null) {
+ payload.getContentMetadata().setContentMD5(HashCode.fromBytes(base16().lowerCase().decode(etag)));
+ }
+
return SwiftObject.builder()
.uri(URI.create(uri))
.name(name)
- .etag(from.getFirstHeaderOrNull(ETAG))
+ .etag(etag)
.payload(payload)
.lastModified(dates.rfc822DateParse(from.getFirstHeaderOrNull(LAST_MODIFIED)))
.headers(from.getHeaders())
http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/90b4367f/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java
----------------------------------------------------------------------
diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java
index 73f5a29..ff12e0f 100644
--- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java
+++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/functions/ParseObjectListFromResponse.java
@@ -16,6 +16,7 @@
*/
package org.jclouds.openstack.swift.v1.functions;
+import static com.google.common.io.BaseEncoding.base16;
import static org.jclouds.http.Uris.uriBuilder;
import java.util.Date;
@@ -36,6 +37,7 @@ import org.jclouds.rest.internal.GeneratedHttpRequest;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
+import com.google.common.hash.HashCode;
import com.google.common.io.ByteSource;
public class ParseObjectListFromResponse implements Function<HttpResponse, ObjectList>,
@@ -81,7 +83,7 @@ public class ParseObjectListFromResponse implements Function<HttpResponse, Objec
.uri(uriBuilder(containerUri).clearQuery().appendPath(input.name).build())
.name(input.name)
.etag(input.hash)
- .payload(payload(input.bytes, input.content_type, input.expires))
+ .payload(payload(input.bytes, input.hash, input.content_type, input.expires))
.lastModified(input.last_modified).build();
}
}
@@ -98,11 +100,14 @@ public class ParseObjectListFromResponse implements Function<HttpResponse, Objec
return this;
}
- private static Payload payload(long bytes, String contentType, Date expires) {
+ private static Payload payload(long bytes, String hash, String contentType, Date expires) {
Payload payload = Payloads.newByteSourcePayload(ByteSource.empty());
payload.getContentMetadata().setContentLength(bytes);
payload.getContentMetadata().setContentType(contentType);
payload.getContentMetadata().setExpires(expires);
+ if (hash != null) {
+ payload.getContentMetadata().setContentMD5(HashCode.fromBytes(base16().lowerCase().decode(hash)));
+ }
return payload;
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/90b4367f/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
----------------------------------------------------------------------
diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
index ed73cd4..8c0e4d1 100644
--- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
+++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
@@ -17,6 +17,7 @@
package org.jclouds.openstack.swift.v1.features;
import static com.google.common.base.Charsets.US_ASCII;
+import static com.google.common.io.BaseEncoding.base16;
import static com.google.common.net.HttpHeaders.EXPIRES;
import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
import static org.jclouds.Constants.PROPERTY_RETRY_DELAY_START;
@@ -108,6 +109,11 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> {
assertEquals(objects.getContainer().getName(), "myContainer");
assertTrue(objects.getContainer().getAnybodyRead().get());
+ // Check MD5 is parsed from the ETag header.
+ SwiftObject object1 = objects.get(1);
+ assertEquals(base16().lowerCase().decode(object1.getETag()),
+ object1.getPayload().getContentMetadata().getContentMD5AsHashCode().asBytes());
+
assertEquals(server.getRequestCount(), 2);
assertAuthentication(server);
assertRequest(server.takeRequest(), "GET", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer");
@@ -259,6 +265,11 @@ public class ObjectApiMockTest extends BaseOpenStackMockTest<SwiftApi> {
SwiftObject object = api.getObjectApi("DFW", "myContainer").getWithoutBody("myObject");
assertEquals(object.getName(), "myObject");
assertEquals(object.getETag(), "8a964ee2a5e88be344f36c22562a6486");
+
+ // Check MD5 is parsed from the ETag header.
+ assertEquals(base16().lowerCase().decode(object.getETag()),
+ object.getPayload().getContentMetadata().getContentMD5AsHashCode().asBytes());
+
assertEquals(object.getLastModified(), dates.rfc822DateParse("Fri, 12 Jun 2010 13:40:18 GMT"));
for (Entry<String, String> entry : object.getMetadata().entrySet()) {
assertEquals(object.getMetadata().get(entry.getKey().toLowerCase()), entry.getValue());