Author: jukka
Date: Fri Oct 18 20:39:10 2013
New Revision: 1533623

URL: http://svn.apache.org/r1533623
Log:
OAK-987: Implement the MicroKernel API

Fix blob hash calculation

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java?rev=1533623&r1=1533622&r2=1533623&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java
 Fri Oct 18 20:39:10 2013
@@ -52,16 +52,23 @@ public abstract class AbstractBlob imple
         }
     }
 
-    public static HashCode calculateSha256(Blob blob) {
+    public static HashCode calculateSha256(final Blob blob) {
+        AbstractBlob ab;
         if (blob instanceof AbstractBlob) {
-            return ((AbstractBlob) blob).getSha256();
+            ab = ((AbstractBlob) blob);
         } else {
-            try {
-                return ByteStreams.hash(supplier(blob), Hashing.sha256());
-            } catch (IOException e) {
-                throw new IllegalStateException("Hash calculation failed", e);
-            }
+            ab = new AbstractBlob() {
+                @Override
+                public long length() {
+                    return blob.length();
+                }
+                @Override
+                public InputStream getNewStream() {
+                    return blob.getNewStream();
+                }
+            };
         }
+        return ab.getSha256();
     }
 
     private HashCode hashCode; // synchronized access
@@ -77,7 +84,11 @@ public abstract class AbstractBlob imple
     private synchronized HashCode getSha256() {
         // Blobs are immutable so we can safely cache the hash
         if (hashCode == null) {
-            hashCode = calculateSha256(this);
+            try {
+                hashCode = ByteStreams.hash(supplier(this), Hashing.sha256());
+            } catch (IOException e) {
+                throw new IllegalStateException("Hash calculation failed", e);
+            }
         }
         return hashCode;
     }


Reply via email to