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;
}