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());