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 {


Reply via email to