You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2014/04/01 15:27:28 UTC
svn commit: r1583661 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
api/ kernel/ plugins/blob/ plugins/memory/ plugins/segment/
plugins/segment/file/ plugins/value/
Author: mduerig
Date: Tue Apr 1 13:27:27 2014
New Revision: 1583661
URL: http://svn.apache.org/r1583661
Log:
OAK-1489: ValueImpl should implement JackrabbitValue
Add and use Blob.getContentIdentity such that Blob implementations can optimise the way the identifier is calculated
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelBlob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreBlob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java?rev=1583661&r1=1583660&r2=1583661&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java Tue Apr 1 13:27:27 2014
@@ -67,4 +67,24 @@ public interface Blob {
@CheckForNull
String getReference();
+ /**
+ * A unique identifier of the content of this value. Usually this is a
+ * message digest of the content (a cryptographically secure one-way hash).
+ * This allows to avoid processing large binary values multiple times.
+ * <p>
+ * This method returns null if the identifier is unknown. The identifier may
+ * not always be available, for example if the value has not yet been saved
+ * or processed. Once an identifier is available, it will never change
+ * because values are immutable.
+ * <p>
+ * If two values have the same identifier, the content of the value is
+ * guaranteed to be the same. However it is not guaranteed that two values
+ * with the same content will return the same identifier.
+ * <p>
+ * The identifier is opaque, meaning it can have any format and size.
+ *
+ * @return the unique identifier or null
+ */
+ @CheckForNull
+ String getContentIdentity();
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelBlob.java?rev=1583661&r1=1583660&r2=1583661&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelBlob.java Tue Apr 1 13:27:27 2014
@@ -69,6 +69,11 @@ public class KernelBlob extends Abstract
return binaryID;
}
+ @Override
+ public String getContentIdentity() {
+ return binaryID;
+ }
+
/**
* This implementation delegates back to the underlying {@code Microkernel}
* if other is also of type {@code KernelBlob}.
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreBlob.java?rev=1583661&r1=1583660&r2=1583661&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreBlob.java Tue Apr 1 13:27:27 2014
@@ -65,6 +65,11 @@ public class BlobStoreBlob implements Bl
return blobStore.getReference(blobId);
}
+ @Override
+ public String getContentIdentity() {
+ return blobId;
+ }
+
public String getBlobId() {
return blobId;
}
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=1583661&r1=1583660&r2=1583661&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 Tue Apr 1 13:27:27 2014
@@ -117,7 +117,12 @@ public abstract class AbstractBlob imple
return null;
}
- //------------------------------------------------------------< Object >--
+ @Override
+ public String getContentIdentity() {
+ return null;
+ }
+
+//------------------------------------------------------------< Object >--
/**
* To {@code Blob} instances are considered equal iff they have the
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java?rev=1583661&r1=1583660&r2=1583661&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBlob.java Tue Apr 1 13:27:27 2014
@@ -21,6 +21,8 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.plugins.segment.Segment.SMALL_LIMIT;
import static org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.BLOCK_SIZE;
+import java.io.InputStream;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -28,8 +30,6 @@ import org.apache.jackrabbit.oak.api.Blo
import org.apache.jackrabbit.oak.plugins.memory.AbstractBlob;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
-import java.io.InputStream;
-
class SegmentBlob extends Record implements Blob {
SegmentBlob(RecordId id) {
@@ -120,6 +120,12 @@ class SegmentBlob extends Record impleme
return null;
}
+
+ @Override
+ public String getContentIdentity() {
+ return getRecordId().toString();
+ }
+
public String getBlobId() {
Segment segment = getSegment();
int offset = getOffset();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java?rev=1583661&r1=1583660&r2=1583661&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java Tue Apr 1 13:27:27 2014
@@ -16,15 +16,15 @@
*/
package org.apache.jackrabbit.oak.plugins.segment.file;
-import org.apache.jackrabbit.oak.api.Blob;
-
-import javax.annotation.Nonnull;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.oak.api.Blob;
+
public class FileBlob implements Blob {
private final String path;
@@ -38,6 +38,11 @@ public class FileBlob implements Blob {
return path; // FIXME: should be a secure reference
}
+ @Override
+ public String getContentIdentity() {
+ return null;
+ }
+
@Nonnull
@Override
public InputStream getNewStream() {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java?rev=1583661&r1=1583660&r2=1583661&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java Tue Apr 1 13:27:27 2014
@@ -18,7 +18,6 @@ package org.apache.jackrabbit.oak.plugin
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
-import static org.apache.jackrabbit.oak.plugins.memory.AbstractBlob.calculateSha256;
import java.io.InputStream;
import java.math.BigDecimal;
@@ -262,7 +261,7 @@ public class ValueImpl implements Jackra
@Override
public String getContentIdentity() {
- return calculateSha256(getBlob()).toString();
+ return getBlob().getContentIdentity();
}
//-------------------------------------------------------------< Object >---