Index: oak-api/src/main/java/org/apache/jackrabbit/oak/api/Blob.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-api/src/main/java/org/apache/jackrabbit/oak/api/Blob.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-api/src/main/java/org/apache/jackrabbit/oak/api/Blob.java (date 1566540722000) @@ -87,4 +87,10 @@ */ @Nullable String getContentIdentity(); + + /** + * Checks if the external blob is inlined in the id itself + * @return + */ + boolean isInlined(); } Index: oak-api/src/main/java/org/apache/jackrabbit/oak/api/package-info.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-api/src/main/java/org/apache/jackrabbit/oak/api/package-info.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-api/src/main/java/org/apache/jackrabbit/oak/api/package-info.java (date 1566466035000) @@ -18,7 +18,7 @@ /** * Oak repository API */ -@Version("3.2.0") +@Version("4.0.0") package org.apache.jackrabbit.oak.api; import org.osgi.annotation.versioning.Version; Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java (date 1566540662000) @@ -31,6 +31,7 @@ import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob; +import org.apache.jackrabbit.oak.plugins.blob.datastore.InMemoryDataRecord; import org.apache.jackrabbit.oak.plugins.memory.AbstractBlob; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.jetbrains.annotations.NotNull; @@ -140,6 +141,11 @@ return null; } + @Override + public boolean isInlined() { + return isExternal() && InMemoryDataRecord.isInstance(getBlobId()); + } + public boolean isExternal() { Segment segment = getSegment(); byte head = segment.readByte(getRecordNumber()); Index: oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileBlob.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileBlob.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileBlob.java (date 1566540685000) @@ -48,6 +48,11 @@ return null; } + @Override + public boolean isInlined() { + return false; + } + @NotNull @Override public InputStream getNewStream() { Index: oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryBasedBlob.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryBasedBlob.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryBasedBlob.java (date 1566540747000) @@ -93,4 +93,9 @@ public String getContentIdentity() { return null; } + + @Override + public boolean isInlined() { + return false; + } } Index: oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreBlob.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreBlob.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreBlob.java (date 1566540722000) @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; +import org.apache.jackrabbit.oak.plugins.blob.datastore.InMemoryDataRecord; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.api.Blob; import org.jetbrains.annotations.NotNull; @@ -79,6 +80,11 @@ return blobId; } + @Override + public boolean isInlined() { + return InMemoryDataRecord.isInstance(blobId); + } + public String getBlobId() { return blobId; } Index: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/binary/BinaryAccessTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/binary/BinaryAccessTest.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/binary/BinaryAccessTest.java (date 1566467486000) @@ -189,6 +189,10 @@ public String getContentIdentity() { return DigestUtils.md5Hex(blobContent.toString()); } + + @Override public boolean isInlined() { + return false; + } }; } Index: oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BigInlinedBinaryIT.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BigInlinedBinaryIT.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BigInlinedBinaryIT.java (date 1566540803000) @@ -111,7 +111,12 @@ public String getContentIdentity() { return null; } - }; + + @Override + public boolean isInlined() { + return false; + } + }; } } Index: oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/BinaryImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/BinaryImpl.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/BinaryImpl.java (date 1566467900000) @@ -93,7 +93,7 @@ @Override public URI getURI(@NotNull BinaryDownloadOptions downloadOptions) throws RepositoryException { - if (null == getReference()) { + if (value.getBlob().isInlined()) { // Binary is inlined, we cannot return a URI for it return null; } Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/SegmentBlob.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/SegmentBlob.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/proc/SegmentBlob.java (date 1566465536000) @@ -65,4 +65,8 @@ return null; } + @Override public boolean isInlined() { + return false; + } + } Index: oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java (revision 206f2ad2605b155e39227d0559a91a7daf3a0534) +++ oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java (date 1566540824000) @@ -79,6 +79,11 @@ public long length() { return blob.length(); } + + @Override public boolean isInlined() { + return blob.isInlined(); + } + @NotNull @Override public InputStream getNewStream() { @@ -111,6 +116,11 @@ return hashCode; } + @Override + public boolean isInlined() { + return false; + } + /** * This hash code implementation returns the hash code of the underlying stream * @return a byte array of the hash