Author: alexparvulescu Date: Fri Jan 29 12:07:28 2016 New Revision: 1727554
URL: http://svn.apache.org/viewvc?rev=1727554&view=rev Log: OAK-3956 Oak run extract the dummy BlobStore impl to be used by the readonly FileStore Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreDiff.java jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreHelper.java jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreDiff.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreDiff.java?rev=1727554&r1=1727553&r2=1727554&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreDiff.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreDiff.java Fri Jan 29 12:07:28 2016 @@ -30,13 +30,12 @@ import static org.apache.jackrabbit.oak. import static org.apache.jackrabbit.oak.commons.PathUtils.elements; import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE; import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.MISSING_NODE; +import static org.apache.jackrabbit.oak.plugins.segment.FileStoreHelper.newBasicReadOnlyBlobStore; import static org.apache.jackrabbit.oak.plugins.segment.FileStoreHelper.readRevisions; import static org.apache.jackrabbit.oak.plugins.segment.RecordId.fromString; -import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; @@ -48,7 +47,6 @@ import joptsimple.OptionSpec; import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.ReadOnlyStore; -import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.jackrabbit.oak.spi.state.NodeStateDiff; @@ -141,7 +139,7 @@ public class FileStoreDiff { + "'."); return; } - ReadOnlyStore store = new ReadOnlyStore(dir, new DummyBlobStore()); + ReadOnlyStore store = new ReadOnlyStore(dir, newBasicReadOnlyBlobStore()); RecordId idL = null; RecordId idR = null; try { @@ -333,43 +331,4 @@ public class FileStoreDiff { return "[N/A]"; } } - - private static class DummyBlobStore implements BlobStore { - @Override - public String writeBlob(InputStream in) throws IOException { - throw new UnsupportedOperationException(); - } - - @Override - public int readBlob(String blobId, long pos, byte[] buff, int off, - int length) throws IOException { - throw new UnsupportedOperationException(); - } - - @Override - public long getBlobLength(String blobId) throws IOException { - // best effort length extraction - int indexOfSep = blobId.lastIndexOf("#"); - if (indexOfSep != -1) { - return Long.valueOf(blobId.substring(indexOfSep + 1)); - } - return -1; - } - - @Override - public InputStream getInputStream(String blobId) throws IOException { - return new ByteArrayInputStream(new byte[0]); - } - - @Override - public String getBlobId(String reference) { - return reference; - } - - @Override - public String getReference(String blobId) { - return blobId; - } - } - } Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreHelper.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreHelper.java?rev=1727554&r1=1727553&r2=1727554&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreHelper.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreHelper.java Fri Jan 29 12:07:28 2016 @@ -26,8 +26,10 @@ import static java.util.Collections.sort import static org.apache.jackrabbit.oak.plugins.segment.SegmentVersion.LATEST_VERSION; import static org.apache.jackrabbit.oak.plugins.segment.file.FileStore.newFileStore; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.ArrayDeque; import java.util.Deque; @@ -47,9 +49,47 @@ public final class FileStoreHelper { public static final String newline = "\n"; public static final boolean TAR_STORAGE_MEMORY_MAPPED = Boolean.getBoolean("tar.memoryMapped"); - + public static final int TAR_SEGMENT_CACHE_SIZE = Integer.getInteger("cache", 256); + private static class BasicReadOnlyBlobStore implements BlobStore { + @Override + public String writeBlob(InputStream in) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public int readBlob(String blobId, long pos, byte[] buff, int off, + int length) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public long getBlobLength(String blobId) throws IOException { + // best effort length extraction + int indexOfSep = blobId.lastIndexOf("#"); + if (indexOfSep != -1) { + return Long.valueOf(blobId.substring(indexOfSep + 1)); + } + return -1; + } + + @Override + public InputStream getInputStream(String blobId) throws IOException { + return new ByteArrayInputStream(new byte[0]); + } + + @Override + public String getBlobId(String reference) { + return reference; + } + + @Override + public String getReference(String blobId) { + return blobId; + } + } + private FileStoreHelper() { } @@ -224,4 +264,14 @@ public final class FileStoreHelper { TAR_SEGMENT_CACHE_SIZE, TAR_STORAGE_MEMORY_MAPPED); } + public static ReadOnlyStore openReadOnlyFileStore(File directory, + BlobStore blobStore) throws IOException { + return new ReadOnlyStore(isValidFileStoreOrFail(directory), + TAR_SEGMENT_CACHE_SIZE, TAR_STORAGE_MEMORY_MAPPED, blobStore); + } + + public static BlobStore newBasicReadOnlyBlobStore() { + return new BasicReadOnlyBlobStore(); + } + } Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1727554&r1=1727553&r2=1727554&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original) +++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Fri Jan 29 12:07:28 2016 @@ -1406,8 +1406,16 @@ public class FileStore implements Segmen */ public static class ReadOnlyStore extends FileStore { - public ReadOnlyStore(File directory, int cacheSize, boolean memoryMapping) throws IOException { - super(null, directory, EMPTY_NODE, -1, cacheSize, memoryMapping, GCMonitor.EMPTY, StatisticsProvider.NOOP, true); + public ReadOnlyStore(File directory, int cacheSize, + boolean memoryMapping) throws IOException { + this(directory, cacheSize, memoryMapping, null); + } + + public ReadOnlyStore(File directory, int cacheSize, + boolean memoryMapping, BlobStore blobStore) throws IOException { + super(blobStore, directory, EMPTY_NODE, -1, cacheSize, + memoryMapping, GCMonitor.EMPTY, StatisticsProvider.NOOP, + true); } public ReadOnlyStore(File directory) throws IOException {
