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 fr...@apache.org on 2016/08/15 12:35:20 UTC

svn commit: r1756374 [1/2] - in /jackrabbit/oak/trunk: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/ oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/ oak-run/src/main/java/org/...

Author: frm
Date: Mon Aug 15 12:35:19 2016
New Revision: 1756374

URL: http://svn.apache.org/viewvc?rev=1756374&view=rev
Log:
OAK-4295 - Add a manifest file in the root folder of the segment store

Added:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/InvalidFileStoreVersionException.java   (with props)
    jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/InvalidFileStoreVersionException.java   (with props)
Modified:
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/LargeOperationIT.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferenceBinaryIT.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/Checkpoints.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/SegmentCheckpoints.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentExplorerBackend.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/FileStoreHelper.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStoreRevisionRecovery.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/SegmentUtils.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/TextExtractorMain.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/backup/FileStoreBackupTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/HeavyWriteIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentDataStoreBlobGCIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentGraphTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentOverflowExceptionIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SegmentReferenceLimitTestIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/ExternalToExternalMigrationTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/SegmentToExternalMigrationTest.java
    jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackup.java
    jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java
    jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
    jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
    jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java
    jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/RevisionHistory.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackupTest.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionAndCleanupIT.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/ExternalBlobIT.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/HeavyWriteIT.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/PartialCompactionMapTest.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCompactionIT.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentDataStoreBlobGCIT.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraphTest.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentOverflowExceptionIT.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentVersionTest.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStoreIT.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStoreTest.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/file/SegmentReferenceLimitTestIT.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/migration/ExternalToExternalMigrationTest.java
    jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/migration/SegmentToExternalMigrationTest.java
    jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTestUtils.java
    jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/standby/DataStoreTestBase.java
    jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/standby/ExternalPrivateStoreIT.java
    jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/standby/ExternalSharedStoreIT.java
    jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/standby/TestBase.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/node/SegmentFactory.java
    jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/container/SegmentNodeStoreContainer.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/LargeOperationIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/LargeOperationIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/LargeOperationIT.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/LargeOperationIT.java Mon Aug 15 12:35:19 2016
@@ -134,7 +134,7 @@ public class LargeOperationIT {
     }
 
     @Parameterized.Parameters
-    public static Collection<Object[]> fixtures() throws IOException {
+    public static Collection<Object[]> fixtures() throws Exception {
         File file = new File(new File("target"), "tar." + System.nanoTime());
         SegmentStore segmentStore = FileStore.builder(file).withMaxFileSize(256).withMemoryMapping(true).build();
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferenceBinaryIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferenceBinaryIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferenceBinaryIT.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferenceBinaryIT.java Mon Aug 15 12:35:19 2016
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNotNull;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.Collection;
 import java.util.List;
 import java.util.Random;
@@ -134,7 +133,7 @@ public class ReferenceBinaryIT {
     }
 
     @Parameterized.Parameters
-    public static Collection<Object[]> fixtures() throws IOException {
+    public static Collection<Object[]> fixtures() throws Exception {
         File file = getTestDir("tar");
         SegmentStore segmentStore = FileStore.builder(file)
                 .withBlobStore(createBlobStore())

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java Mon Aug 15 12:35:19 2016
@@ -91,7 +91,7 @@ public class RefreshOnGCTest {
         this.fixture = fixtures;
     }
 
-    private NodeStore createSegmentStore(File directory, GCMonitor gcMonitor) throws IOException {
+    private NodeStore createSegmentStore(File directory, GCMonitor gcMonitor) throws Exception {
         CompactionStrategy strategy = new CompactionStrategy(
                 false, false, CLEAN_NONE, 0, CompactionStrategy.MEMORY_THRESHOLD_DEFAULT) {
             @Override
@@ -130,7 +130,7 @@ public class RefreshOnGCTest {
     }
 
     @Before
-    public void setup() throws IOException {
+    public void setup() throws Exception {
         File directory = createTempFile(getClass().getSimpleName(), "test", new File("target"));
         directory.delete();
         directory.mkdir();

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/Checkpoints.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/Checkpoints.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/Checkpoints.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/Checkpoints.java Mon Aug 15 12:35:19 2016
@@ -26,6 +26,7 @@ import com.google.common.io.Closer;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 /**
@@ -33,7 +34,7 @@ import org.apache.jackrabbit.oak.spi.sta
  */
 public abstract class Checkpoints {
 
-    public static Checkpoints onSegment(File path, Closer closer) throws IOException {
+    public static Checkpoints onSegment(File path, Closer closer) throws IOException, InvalidFileStoreVersionException {
         return SegmentCheckpoints.create(path, closer);
     }
 

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/SegmentCheckpoints.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/SegmentCheckpoints.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/SegmentCheckpoints.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/checkpoint/SegmentCheckpoints.java Mon Aug 15 12:35:19 2016
@@ -25,13 +25,14 @@ import com.google.common.collect.Lists;
 import com.google.common.io.Closer;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 final class SegmentCheckpoints extends Checkpoints {
 
-    static Checkpoints create(File path, Closer closer) throws IOException {
+    static Checkpoints create(File path, Closer closer) throws IOException, InvalidFileStoreVersionException {
         return new SegmentCheckpoints(closer.register(FileStore.builder(path).build()));
     }
 

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentExplorerBackend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentExplorerBackend.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentExplorerBackend.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/SegmentExplorerBackend.java Mon Aug 15 12:35:19 2016
@@ -39,6 +39,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStateHelper;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentPropertyState;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 class SegmentExplorerBackend implements ExplorerBackend {
@@ -55,7 +56,12 @@ class SegmentExplorerBackend implements
 
     @Override
     public void open() throws IOException {
-        store = FileStore.builder(path).buildReadOnly();
+        try {
+            store = FileStore.builder(path).buildReadOnly();
+        } catch (InvalidFileStoreVersionException e) {
+            throw new IllegalStateException(e);
+        }
+
         index = store.getTarReaderIndex();
     }
 

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=1756374&r1=1756373&r2=1756374&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 Mon Aug 15 12:35:19 2016
@@ -38,6 +38,7 @@ import java.util.UUID;
 
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.ReadOnlyStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.plugins.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.plugins.segment.file.tooling.BasicReadOnlyBlobStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
@@ -173,7 +174,7 @@ public final class FileStoreHelper {
         return false;
     }
 
-    public static File checkFileStoreVersionOrFail(String path, boolean force) throws IOException {
+    public static File checkFileStoreVersionOrFail(String path, boolean force) throws IOException, InvalidFileStoreVersionException {
         File directory = new File(path);
         if (!directory.exists()) {
             return directory;
@@ -199,19 +200,20 @@ public final class FileStoreHelper {
         return directory;
     }
 
-    public static FileStore openFileStore(String directory) throws IOException {
+    public static FileStore openFileStore(String directory) throws IOException, InvalidFileStoreVersionException {
         return openFileStore(directory, false);
     }
 
     public static FileStore openFileStore(String directory, boolean force)
-            throws IOException {
+            throws IOException, InvalidFileStoreVersionException {
         return FileStore.builder(checkFileStoreVersionOrFail(directory, force))
                 .withCacheSize(TAR_SEGMENT_CACHE_SIZE)
                 .withMemoryMapping(TAR_STORAGE_MEMORY_MAPPED).build();
     }
 
     public static FileStore openFileStore(String directory, boolean force,
-            BlobStore blobStore) throws IOException {
+            BlobStore blobStore
+    ) throws IOException, InvalidFileStoreVersionException {
         return FileStore.builder(checkFileStoreVersionOrFail(directory, force))
                 .withCacheSize(TAR_SEGMENT_CACHE_SIZE)
                 .withMemoryMapping(TAR_STORAGE_MEMORY_MAPPED)
@@ -219,7 +221,7 @@ public final class FileStoreHelper {
     }
 
     public static ReadOnlyStore openReadOnlyFileStore(File directory)
-            throws IOException {
+            throws IOException, InvalidFileStoreVersionException {
         return FileStore.builder(isValidFileStoreOrFail(directory))
                 .withCacheSize(TAR_SEGMENT_CACHE_SIZE)
                 .withMemoryMapping(TAR_STORAGE_MEMORY_MAPPED)
@@ -227,7 +229,8 @@ public final class FileStoreHelper {
     }
 
     public static ReadOnlyStore openReadOnlyFileStore(File directory,
-            BlobStore blobStore) throws IOException {
+            BlobStore blobStore
+    ) throws IOException, InvalidFileStoreVersionException {
         return FileStore.builder(isValidFileStoreOrFail(directory))
                 .withCacheSize(TAR_SEGMENT_CACHE_SIZE)
                 .withMemoryMapping(TAR_STORAGE_MEMORY_MAPPED)

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStoreRevisionRecovery.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStoreRevisionRecovery.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStoreRevisionRecovery.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStoreRevisionRecovery.java Mon Aug 15 12:35:19 2016
@@ -100,7 +100,7 @@ public class FileStoreRevisionRecovery {
 
     private static SortedMap<String, String> extractRoots(File dir,
             SortedMap<String, UUID> candidates, final SegmentVersion version)
-            throws IOException {
+            throws IOException, InvalidFileStoreVersionException {
 
         ReadOnlyStore store = FileStore.builder(dir).withSegmentVersion(version).buildReadOnly();
 

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/SegmentUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/SegmentUtils.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/SegmentUtils.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/SegmentUtils.java Mon Aug 15 12:35:19 2016
@@ -23,6 +23,7 @@ import java.io.IOException;
 import com.google.common.io.Closer;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
@@ -32,15 +33,15 @@ class SegmentUtils {
         // Prevent instantiation
     }
 
-    static NodeStore bootstrap(String path, BlobStore store, Closer closer) throws IOException {
+    static NodeStore bootstrap(String path, BlobStore store, Closer closer) throws IOException, InvalidFileStoreVersionException {
         return SegmentNodeStore.builder(fileStore(path, store, closer)).build();
     }
 
-    private static FileStore fileStore(String path, BlobStore store, Closer closer) throws IOException {
+    private static FileStore fileStore(String path, BlobStore store, Closer closer) throws IOException, InvalidFileStoreVersionException {
         return closer.register(fileStore(path, store));
     }
 
-    private static FileStore fileStore(String path, BlobStore store) throws IOException {
+    private static FileStore fileStore(String path, BlobStore store) throws IOException, InvalidFileStoreVersionException {
         return FileStore.builder(new File(path)).withBlobStore(store).build();
     }
 

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/TextExtractorMain.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/TextExtractorMain.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/TextExtractorMain.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/tika/TextExtractorMain.java Mon Aug 15 12:35:19 2016
@@ -52,6 +52,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.slf4j.Logger;
@@ -286,7 +287,7 @@ public class TextExtractorMain {
         return props;
     }
 
-    private static NodeStore bootStrapNodeStore(String src, boolean segmentTar, BlobStore blobStore, Closer closer) throws IOException {
+    private static NodeStore bootStrapNodeStore(String src, boolean segmentTar, BlobStore blobStore, Closer closer) throws IOException, InvalidFileStoreVersionException {
         if (src.startsWith(MongoURI.MONGODB_PREFIX)) {
             MongoClientURI uri = new MongoClientURI(src);
             if (uri.getDatabase() == null) {

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java Mon Aug 15 12:35:19 2016
@@ -84,6 +84,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.ReadOnlyStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.plugins.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.plugins.segment.file.tooling.RevisionHistory;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -98,7 +99,7 @@ class SegmentUtils {
         // Prevent instantiation
     }
 
-    static NodeStore bootstrapNodeStore(String path, Closer closer) throws IOException {
+    static NodeStore bootstrapNodeStore(String path, Closer closer) throws IOException, InvalidFileStoreVersionException {
         return SegmentNodeStore.builder(bootstrapFileStore(path, closer)).build();
     }
 
@@ -121,11 +122,11 @@ class SegmentUtils {
         }
     }
 
-    static void restore(File source, File target) throws IOException {
+    static void restore(File source, File target) throws IOException, InvalidFileStoreVersionException {
         FileStoreRestore.restore(source, target);
     }
 
-    static void debug(String... args) throws IOException {
+    static void debug(String... args) throws IOException, InvalidFileStoreVersionException {
         File file = new File(args[0]);
         System.out.println("Debug " + file);
         FileStore store = openReadOnlyFileStore(file);
@@ -154,18 +155,18 @@ class SegmentUtils {
         }
     }
 
-    static void history(File directory, File journal, String path, int depth) throws IOException {
+    static void history(File directory, File journal, String path, int depth) throws IOException, InvalidFileStoreVersionException {
         Iterable<RevisionHistory.HistoryElement> history = new RevisionHistory(directory).getHistory(journal, path);
         for (RevisionHistory.HistoryElement historyElement : history) {
             System.out.println(historyElement.toString(depth));
         }
     }
 
-    static void check(File dir, String journalFileName, boolean fullTraversal, long debugLevel, long binLen) throws IOException {
+    static void check(File dir, String journalFileName, boolean fullTraversal, long debugLevel, long binLen) throws IOException, InvalidFileStoreVersionException {
         checkConsistency(dir, journalFileName, fullTraversal, debugLevel, binLen);
     }
 
-    static void compact(File directory, boolean force) throws IOException {
+    static void compact(File directory, boolean force) throws IOException, InvalidFileStoreVersionException {
         FileStore store = openFileStore(directory.getAbsolutePath(), force);
         try {
             boolean persistCM = Boolean.getBoolean("tar.PersistCompactionMap");
@@ -225,7 +226,7 @@ class SegmentUtils {
         }
     }
 
-    static void diff(File store, File out, boolean listOnly, String interval, boolean incremental, String path, boolean ignoreSNFEs) throws IOException {
+    static void diff(File store, File out, boolean listOnly, String interval, boolean incremental, String path, boolean ignoreSNFEs) throws IOException, InvalidFileStoreVersionException {
         if (listOnly) {
             listRevs(store, out);
         } else {
@@ -233,11 +234,11 @@ class SegmentUtils {
         }
     }
 
-    private static FileStore bootstrapFileStore(String path, Closer closer) throws IOException {
+    private static FileStore bootstrapFileStore(String path, Closer closer) throws IOException, InvalidFileStoreVersionException {
         return closer.register(bootstrapFileStore(path));
     }
 
-    private static FileStore bootstrapFileStore(String path) throws IOException {
+    private static FileStore bootstrapFileStore(String path) throws IOException, InvalidFileStoreVersionException {
         return FileStore.builder(new File(path)).build();
     }
 
@@ -259,7 +260,7 @@ class SegmentUtils {
         }
     }
 
-    private static void diff(File dir, String interval, boolean incremental, File out, String filter, boolean ignoreSNFEs) throws IOException {
+    private static void diff(File dir, String interval, boolean incremental, File out, String filter, boolean ignoreSNFEs) throws IOException, InvalidFileStoreVersionException {
         System.out.println("Store " + dir);
         System.out.println("Writing diff to " + out);
         String[] tokens = interval.trim().split("\\.\\.");

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Utils.java Mon Aug 15 12:35:19 2016
@@ -49,12 +49,13 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
 class Utils {
 
-    public static NodeStore bootstrapNodeStore(String[] args, Closer closer, String h) throws IOException {
+    public static NodeStore bootstrapNodeStore(String[] args, Closer closer, String h) throws IOException, InvalidFileStoreVersionException {
         //TODO add support for other NodeStore flags
         OptionParser parser = new OptionParser();
         OptionSpec<Integer> clusterId = parser

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java Mon Aug 15 12:35:19 2016
@@ -38,6 +38,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.file.tooling.BasicReadOnlyBlobStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,7 +54,7 @@ public class FileStoreBackup {
     public static void backup(@Nonnull SegmentReader reader,
                               @Nonnull Revisions revisions,
                               @Nonnull File destination)
-            throws IOException {
+            throws IOException, InvalidFileStoreVersionException {
         Stopwatch watch = Stopwatch.createStarted();
         SegmentGCOptions gcOptions = SegmentGCOptions.defaultGCOptions()
                 .setOffline();

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java Mon Aug 15 12:35:19 2016
@@ -34,6 +34,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.WriterCacheManager;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,7 +48,7 @@ public class FileStoreRestore {
     private static final String JOURNAL_FILE_NAME = "journal.log";
 
     public static void restore(File source, File destination)
-            throws IOException {
+            throws IOException, InvalidFileStoreVersionException {
         if (!validFileStore(source)) {
             throw new IOException("Folder " + source
                     + " is not a valid FileStore directory");

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java Mon Aug 15 12:35:19 2016
@@ -76,6 +76,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.FileStoreGCMonitor;
 import org.apache.jackrabbit.oak.segment.file.FileStoreStatsMBean;
 import org.apache.jackrabbit.oak.segment.file.GCMonitorMBean;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.spi.commit.Observable;
@@ -387,7 +388,12 @@ public class SegmentNodeStoreService ext
             builder.withBlobStore(blobStore);
         }
 
-        store = builder.build();
+        try {
+            store = builder.build();
+        } catch (InvalidFileStoreVersionException e) {
+            log.error("The segment store data is not compatible with the current version. Please use oak-segment or a different version of oak-segment-tar.");
+            return false;
+        }
 
         // Expose an MBean to provide information about the gc options
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java Mon Aug 15 12:35:19 2016
@@ -76,6 +76,7 @@ import com.google.common.base.Predicate;
 import com.google.common.base.Stopwatch;
 import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableList;
+import com.google.common.io.Files;
 import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean;
 import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
@@ -108,6 +109,7 @@ import org.slf4j.LoggerFactory;
  * The storage implementation for tar files.
  */
 public class FileStore implements SegmentStore, Closeable {
+
     private static final Logger log = LoggerFactory.getLogger(FileStore.class);
 
     private static final int MB = 1024 * 1024;
@@ -119,6 +121,8 @@ public class FileStore implements Segmen
 
     private static final String LOCK_FILE_NAME = "repo.lock";
 
+    private static final String MANIFEST_FILE_NAME = "manifest";
+
     /**
      * GC counter for logging purposes
      */
@@ -232,7 +236,7 @@ public class FileStore implements Segmen
     };
 
     // FIXME OAK-4450: Properly split the FileStore into read-only and r/w variants
-    FileStore(FileStoreBuilder builder, final boolean readOnly) throws IOException {
+    FileStore(FileStoreBuilder builder, final boolean readOnly) throws InvalidFileStoreVersionException, IOException {
         this.tracker = new SegmentTracker();
         this.revisions = builder.getRevisions();
         this.blobStore = builder.getBlobStore();
@@ -274,7 +278,21 @@ public class FileStore implements Segmen
         this.gcListener = builder.getGcListener();
         this.gcOptions = builder.getGcOptions();
         this.gcJournal = new GCJournal(directory);
+
         Map<Integer, Map<Character, File>> map = collectFiles(directory);
+
+        File manifest = new File(directory, MANIFEST_FILE_NAME);
+
+        if (map.size() > 0) {
+            if (manifest.exists()) {
+                log.debug("The store folder is non empty and has a valid manifest file");
+            } else {
+                throw new InvalidFileStoreVersionException();
+            }
+        }
+
+        Files.touch(manifest);
+
         this.readers = newArrayListWithCapacity(map.size());
         Integer[] indices = map.keySet().toArray(new Integer[map.size()]);
         Arrays.sort(indices);
@@ -1452,7 +1470,7 @@ public class FileStore implements Segmen
     public static class ReadOnlyStore extends FileStore {
         private RecordId currentHead;
 
-        ReadOnlyStore(FileStoreBuilder builder) throws IOException {
+        ReadOnlyStore(FileStoreBuilder builder) throws InvalidFileStoreVersionException, IOException {
             super(builder, true);
         }
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java Mon Aug 15 12:35:19 2016
@@ -333,7 +333,7 @@ public class FileStoreBuilder {
      * @throws IOException
      */
     @Nonnull
-    public FileStore build() throws IOException {
+    public FileStore build() throws InvalidFileStoreVersionException, IOException {
         checkState(revisions == null, "Cannot re-use builder");
         directory.mkdir();
         revisions = new TarRevisions(false, directory);
@@ -359,7 +359,7 @@ public class FileStoreBuilder {
      * @throws IOException
      */
     @Nonnull
-    public ReadOnlyStore buildReadOnly() throws IOException {
+    public ReadOnlyStore buildReadOnly() throws InvalidFileStoreVersionException, IOException {
         checkState(revisions == null, "Cannot re-use builder");
         checkState(directory.exists() && directory.isDirectory());
         revisions = new TarRevisions(true, directory);

Added: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/InvalidFileStoreVersionException.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/InvalidFileStoreVersionException.java?rev=1756374&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/InvalidFileStoreVersionException.java (added)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/InvalidFileStoreVersionException.java Mon Aug 15 12:35:19 2016
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment.file;
+
+/**
+ * This exception can be thrown during the startup of the {@link FileStore} to
+ * indicate an incompatible version mismatch between the code that generated the
+ * data in the store and the current version of the {@link FileStore}.
+ */
+public class InvalidFileStoreVersionException extends Exception {
+
+}

Propchange: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/InvalidFileStoreVersionException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java Mon Aug 15 12:35:19 2016
@@ -43,6 +43,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStore.ReadOnlyStore;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -74,7 +75,7 @@ public class ConsistencyChecker implemen
      * @throws IOException
      */
     public static String checkConsistency(File directory, String journalFileName,
-            boolean fullTraversal, long debugInterval, long binLen) throws IOException {
+            boolean fullTraversal, long debugInterval, long binLen) throws IOException, InvalidFileStoreVersionException {
         print("Searching for last good revision in {}", journalFileName);
         Set<String> badPaths = newHashSet();
         try (
@@ -117,7 +118,7 @@ public class ConsistencyChecker implemen
      * @throws IOException
      */
     public ConsistencyChecker(File directory, long debugInterval)
-            throws IOException {
+            throws IOException, InvalidFileStoreVersionException {
         store = fileStoreBuilder(directory).buildReadOnly();
         this.debugInterval = debugInterval;
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/RevisionHistory.java Mon Aug 15 12:35:19 2016
@@ -39,6 +39,7 @@ import org.apache.jackrabbit.oak.json.Js
 import org.apache.jackrabbit.oak.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStore.ReadOnlyStore;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -54,7 +55,7 @@ public class RevisionHistory {
      * @param directory
      * @throws IOException
      */
-    public RevisionHistory(@Nonnull File directory) throws IOException {
+    public RevisionHistory(@Nonnull File directory) throws IOException, InvalidFileStoreVersionException {
         this.store = fileStoreBuilder(checkNotNull(directory)).buildReadOnly();
     }
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/backup/FileStoreBackupTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/backup/FileStoreBackupTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/backup/FileStoreBackupTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/backup/FileStoreBackupTest.java Mon Aug 15 12:35:19 2016
@@ -122,15 +122,14 @@ public class FileStoreBackupTest {
         return nodeStore.createBlob(new ByteArrayInputStream(data));
     }
 
-    private static FileStore newFileStore(File fs) throws IOException {
+    private static FileStore newFileStore(File fs) throws Exception {
         return fileStoreBuilder(fs)
                 .withMaxFileSize(1)
                 .withGCOptions(SegmentGCOptions.defaultGCOptions().setOffline())
                 .build();
     }
 
-    private static void compare(FileStore store, File destination)
-            throws IOException {
+    private static void compare(FileStore store, File destination) throws Exception {
         FileStore backup = fileStoreBuilder(destination).build();
         assertEquals(store.getHead(), backup.getHead());
         backup.close();

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java Mon Aug 15 12:35:19 2016
@@ -89,8 +89,7 @@ public class CompactionAndCleanupIT {
     }
 
     @Test
-    public void compactionNoBinaryClone()
-    throws IOException, CommitFailedException {
+    public void compactionNoBinaryClone() throws Exception {
         ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
                 .withGCOptions(defaultGCOptions().setRetainedGenerations(2))
@@ -176,8 +175,7 @@ public class CompactionAndCleanupIT {
     }
 
     @Test
-    public void offlineCompaction()
-    throws IOException, CommitFailedException {
+    public void offlineCompaction() throws Exception {
         SegmentGCOptions gcOptions = defaultGCOptions().setOffline();
         ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
@@ -269,8 +267,7 @@ public class CompactionAndCleanupIT {
      * that compacting checkpoints will not cause the size to explode
      */
     @Test
-    public void offlineCompactionCps() throws IOException,
-            CommitFailedException {
+    public void offlineCompactionCps() throws Exception {
         SegmentGCOptions gcOptions = defaultGCOptions().setOffline();
         ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
@@ -322,8 +319,7 @@ public class CompactionAndCleanupIT {
      * de-duplication capabilities of compaction.
      */
     @Test
-    public void offlineCompactionBinC1() throws IOException,
-            CommitFailedException {
+    public void offlineCompactionBinC1() throws Exception {
         SegmentGCOptions gcOptions = defaultGCOptions().setOffline()
                 .withBinaryDeduplication();
         ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
@@ -378,8 +374,7 @@ public class CompactionAndCleanupIT {
      * de-duplication capabilities of compaction.
      */
     @Test
-    public void offlineCompactionBinC2() throws IOException,
-            CommitFailedException {
+    public void offlineCompactionBinC2() throws Exception {
         int blobSize = 5 * 1024 * 1024;
 
         SegmentGCOptions gcOptions = defaultGCOptions().setOffline()
@@ -439,8 +434,7 @@ public class CompactionAndCleanupIT {
      * de-duplication capabilities of compaction
      */
     @Test
-    public void offlineCompactionBinR1() throws IOException,
-            CommitFailedException {
+    public void offlineCompactionBinR1() throws Exception {
         SegmentGCOptions gcOptions = defaultGCOptions().setOffline();
         ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
@@ -629,7 +623,7 @@ public class CompactionAndCleanupIT {
      * This is a regression introduced with OAK-1828.
      */
     @Test
-    public void cleanupCyclicGraph() throws IOException, ExecutionException, InterruptedException {
+    public void cleanupCyclicGraph() throws Exception {
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder()).build();
         final SegmentWriter writer = fileStore.getWriter();
         final SegmentNodeState oldHead = fileStore.getHead();
@@ -687,7 +681,7 @@ public class CompactionAndCleanupIT {
      * Test asserting OAK-3348: Cross gc sessions might introduce references to pre-compacted segments
      */
     @Test
-    public void preCompactionReferences() throws IOException, CommitFailedException, InterruptedException {
+    public void preCompactionReferences() throws Exception {
         for (String ref : new String[] {"merge-before-compact", "merge-after-compact"}) {
             File repoDir = new File(getFileStoreFolder(), ref);
             FileStore fileStore = fileStoreBuilder(repoDir)
@@ -846,7 +840,7 @@ public class CompactionAndCleanupIT {
     }
 
     @Test
-    public void propertyRetention() throws IOException, CommitFailedException {
+    public void propertyRetention() throws Exception {
         SegmentGCOptions gcOptions = defaultGCOptions();
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
                 .withMaxFileSize(1)
@@ -895,7 +889,7 @@ public class CompactionAndCleanupIT {
     }
 
     @Test
-    public void checkpointDeduplicationTest() throws IOException, CommitFailedException {
+    public void checkpointDeduplicationTest() throws Exception {
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder()).build();
         try {
             SegmentNodeStore nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java Mon Aug 15 12:35:19 2016
@@ -160,7 +160,7 @@ public class ExternalBlobIT {
         nodeStore = null;
     }
 
-    protected SegmentNodeStore getNodeStore(BlobStore blobStore) throws IOException {
+    protected SegmentNodeStore getNodeStore(BlobStore blobStore) throws Exception {
         if (nodeStore == null) {
             ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
             

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/HeavyWriteIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/HeavyWriteIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/HeavyWriteIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/HeavyWriteIT.java Mon Aug 15 12:35:19 2016
@@ -62,7 +62,7 @@ public class HeavyWriteIT {
     }
 
     @Test
-    public void heavyWrite() throws IOException, CommitFailedException, InterruptedException {
+    public void heavyWrite() throws Exception {
         final FileStore store = fileStoreBuilder(getFileStoreFolder()).withMaxFileSize(128).withMemoryMapping(false).build();
         final SegmentNodeStore nodeStore = SegmentNodeStoreBuilders.builder(store).build();
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java Mon Aug 15 12:35:19 2016
@@ -79,7 +79,7 @@ public class RecordTest {
     private final Random random = new Random(0xcafefaceL);
 
     @Before
-    public void setup() throws IOException {
+    public void setup() throws Exception {
         store = fileStoreBuilder(folder.getRoot()).build();
         writer = store.getWriter();
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java Mon Aug 15 12:35:19 2016
@@ -62,7 +62,6 @@ import java.util.concurrent.locks.Reentr
 import javax.management.InstanceAlreadyExistsException;
 import javax.management.MBeanRegistrationException;
 import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
 import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
 
@@ -220,8 +219,7 @@ public class SegmentCompactionIT {
     }
 
     @Before
-    public void setUp() throws IOException, MalformedObjectNameException, NotCompliantMBeanException,
-            InstanceAlreadyExistsException, MBeanRegistrationException {
+    public void setUp() throws Exception {
         assumeTrue(ENABLED);
 
         scheduler.scheduleAtFixedRate(new Runnable() {

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentDataStoreBlobGCIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentDataStoreBlobGCIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentDataStoreBlobGCIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentDataStoreBlobGCIT.java Mon Aug 15 12:35:19 2016
@@ -105,7 +105,7 @@ public class SegmentDataStoreBlobGCIT {
         assumeTrue(getFixtures().contains(SEGMENT_TAR));
     }
 
-    protected SegmentNodeStore getNodeStore(BlobStore blobStore) throws IOException {
+    protected SegmentNodeStore getNodeStore(BlobStore blobStore) throws Exception {
         if (nodeStore == null) {
             ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
             FileStoreBuilder builder = fileStoreBuilder(getWorkDir())

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentGraphTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentGraphTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentGraphTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentGraphTest.java Mon Aug 15 12:35:19 2016
@@ -31,7 +31,6 @@ import static org.apache.jackrabbit.oak.
 import static org.junit.Assert.assertEquals;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -65,7 +64,7 @@ public class SegmentGraphTest {
     }
 
     @Before
-    public void setup() throws IOException {
+    public void setup() throws Exception {
         FileStore store = fileStoreBuilder(getStoreFolder()).build();
         try {
             SegmentNodeState root = store.getHead();
@@ -127,7 +126,7 @@ public class SegmentGraphTest {
     private static UUID getSegmentId(SegmentNodeState root) {return root.getSegment().getSegmentId().asUUID();}
 
     @Test
-    public void testSegmentGraph() throws IOException {
+    public void testSegmentGraph() throws Exception {
         ReadOnlyStore store = fileStoreBuilder(getStoreFolder()).buildReadOnly();
         try {
             Graph<UUID> segmentGraph = parseSegmentGraph(store, Predicates.<UUID>alwaysTrue());
@@ -143,7 +142,7 @@ public class SegmentGraphTest {
     }
 
     @Test
-    public void testSegmentGraphWithFilter() throws IOException {
+    public void testSegmentGraphWithFilter() throws Exception {
         ReadOnlyStore store = fileStoreBuilder(getStoreFolder()).buildReadOnly();
         try {
             Predicate<UUID> filter = createRegExpFilter(".*(writer2|writer3).*", store);
@@ -160,7 +159,7 @@ public class SegmentGraphTest {
     }
 
     @Test
-    public void testGCGraph() throws IOException {
+    public void testGCGraph() throws Exception {
         // TODO Improve test coverage to non trivial cases with more than a single generation
         // This is quite tricky as there is no easy way to construct a file store with
         // a segment graphs having edges between generations (OAK-3348)

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentOverflowExceptionIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentOverflowExceptionIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentOverflowExceptionIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentOverflowExceptionIT.java Mon Aug 15 12:35:19 2016
@@ -93,7 +93,7 @@ public class SegmentOverflowExceptionIT
     };
 
     @Test
-    public void run() throws IOException, CommitFailedException, InterruptedException {
+    public void run() throws Exception {
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder()).withGCMonitor(gcMonitor).build();
         try {
             final SegmentNodeStore nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentSizeTest.java Mon Aug 15 12:35:19 2016
@@ -53,7 +53,7 @@ public class SegmentSizeTest {
     private FileStore store;
 
     @Before
-    public void setup() throws IOException {
+    public void setup() throws Exception {
         store = fileStoreBuilder(folder.getRoot()).build();
     }
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java Mon Aug 15 12:35:19 2016
@@ -66,16 +66,16 @@ public class FileStoreIT {
     }
 
     @Test
-    public void testRestartAndGCWithoutMM() throws IOException {
+    public void testRestartAndGCWithoutMM() throws Exception {
         testRestartAndGC(false);
     }
 
     @Test
-    public void testRestartAndGCWithMM() throws IOException {
+    public void testRestartAndGCWithMM() throws Exception {
         testRestartAndGC(true);
     }
 
-    public void testRestartAndGC(boolean memoryMapping) throws IOException {
+    public void testRestartAndGC(boolean memoryMapping) throws Exception {
         FileStore store = fileStoreBuilder(getFileStoreFolder()).withMaxFileSize(1).withMemoryMapping(memoryMapping).build();
         store.close();
 
@@ -101,7 +101,7 @@ public class FileStoreIT {
     }
 
     @Test
-    public void testRecovery() throws IOException {
+    public void testRecovery() throws Exception {
         FileStore store = fileStoreBuilder(getFileStoreFolder()).withMaxFileSize(1).withMemoryMapping(false).build();
         store.flush();
 
@@ -171,7 +171,7 @@ public class FileStoreIT {
     }
 
     @Test  // See OAK-2049
-    public void segmentOverflow() throws IOException {
+    public void segmentOverflow() throws Exception {
         for (int n = 1; n < 255; n++) {  // 255 = ListRecord.LEVEL_SIZE
             FileStore store = fileStoreBuilder(getFileStoreFolder()).withMaxFileSize(1).withMemoryMapping(false).build();
             SegmentWriter writer = store.getWriter();
@@ -204,7 +204,7 @@ public class FileStoreIT {
     }
 
     @Test
-    public void nonBlockingROStore() throws IOException {
+    public void nonBlockingROStore() throws Exception {
         FileStore store = fileStoreBuilder(getFileStoreFolder()).withMaxFileSize(1).withMemoryMapping(false).build();
         store.flush(); // first 1kB
         SegmentNodeState base = store.getHead();
@@ -226,7 +226,7 @@ public class FileStoreIT {
     }
 
     @Test
-    public void setRevisionTest() throws IOException {
+    public void setRevisionTest() throws Exception {
         try (FileStore store = fileStoreBuilder(getFileStoreFolder()).build()) {
             RecordId id1 = store.getRevisions().getHead();
             SegmentNodeState base = store.getHead();

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreTest.java Mon Aug 15 12:35:19 2016
@@ -22,7 +22,6 @@ package org.apache.jackrabbit.oak.segmen
 import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
 
 import java.io.File;
-import java.io.IOException;
 
 import org.apache.jackrabbit.oak.segment.SegmentId;
 import org.junit.Rule;
@@ -39,7 +38,7 @@ public class FileStoreTest {
     }
 
     @Test
-    public void containsSegment() throws IOException {
+    public void containsSegment() throws Exception {
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder()).build();
         try {
             SegmentId id = new SegmentId(fileStore, 0, 0);

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SegmentReferenceLimitTestIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SegmentReferenceLimitTestIT.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SegmentReferenceLimitTestIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/SegmentReferenceLimitTestIT.java Mon Aug 15 12:35:19 2016
@@ -27,10 +27,8 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.FutureTask;
 
-import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
@@ -75,7 +73,7 @@ public class SegmentReferenceLimitTestIT
     }
 
     @Test
-    public void corruption() throws IOException, CommitFailedException, ExecutionException, InterruptedException {
+    public void corruption() throws Exception {
         FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
                 .withMaxFileSize(1)
                 .withSegmentCacheSize(0)

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarRevisionsTest.java Mon Aug 15 12:35:19 2016
@@ -64,7 +64,7 @@ public class TarRevisionsTest {
     }
 
     @Before
-    public void setup() throws IOException {
+    public void setup() throws Exception {
         store = FileStoreBuilder.fileStoreBuilder(getFileStoreFolder()).build();
         revisions = store.getRevisions();
         reader = store.getReader();

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/ExternalToExternalMigrationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/ExternalToExternalMigrationTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/ExternalToExternalMigrationTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/ExternalToExternalMigrationTest.java Mon Aug 15 12:35:19 2016
@@ -27,6 +27,7 @@ import java.io.IOException;
 import org.apache.jackrabbit.oak.plugins.blob.migration.AbstractMigratorTest;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.FileBlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -38,7 +39,13 @@ public class ExternalToExternalMigration
     @Override
     protected NodeStore createNodeStore(BlobStore blobStore, File repository) throws IOException {
         File segmentDir = new File(repository, "segmentstore");
-        store = fileStoreBuilder(segmentDir).withBlobStore(blobStore).build();
+
+        try {
+            store = fileStoreBuilder(segmentDir).withBlobStore(blobStore).build();
+        } catch (InvalidFileStoreVersionException e) {
+            throw new IllegalStateException(e);
+        }
+
         return SegmentNodeStoreBuilders.builder(store).build();
     }
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/SegmentToExternalMigrationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/SegmentToExternalMigrationTest.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/SegmentToExternalMigrationTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/migration/SegmentToExternalMigrationTest.java Mon Aug 15 12:35:19 2016
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.FileBlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -43,7 +44,13 @@ public class SegmentToExternalMigrationT
         if (blobStore != null) {
             builder.withBlobStore(blobStore);
         }
-        store = builder.build();
+
+        try {
+            store = builder.build();
+        } catch (InvalidFileStoreVersionException e) {
+            throw new IllegalStateException(e);
+        }
+
         return SegmentNodeStoreBuilders.builder(store).build();
     }
 

Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackup.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackup.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackup.java (original)
+++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackup.java Mon Aug 15 12:35:19 2016
@@ -27,6 +27,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.plugins.segment.file.tooling.BasicReadOnlyBlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -42,8 +43,7 @@ public class FileStoreBackup {
 
     public static boolean USE_FAKE_BLOBSTORE = Boolean.getBoolean("oak.backup.UseFakeBlobStore");
 
-    public static void backup(NodeStore store, File destination)
-            throws IOException {
+    public static void backup(NodeStore store, File destination) throws IOException, InvalidFileStoreVersionException {
         checkArgument(store instanceof SegmentNodeStore);
         Stopwatch watch = Stopwatch.createStarted();
         NodeState current = ((SegmentNodeStore) store).getSuperRoot();

Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java (original)
+++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java Mon Aug 15 12:35:19 2016
@@ -26,6 +26,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.ReadOnlyStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,8 +40,7 @@ public class FileStoreRestore {
 
     private static final String JOURNAL_FILE_NAME = "journal.log";
 
-    public static void restore(File source, File destination)
-            throws IOException {
+    public static void restore(File source, File destination) throws IOException, InvalidFileStoreVersionException {
         if (!validFileStore(source)) {
             throw new IOException("Folder " + source
                     + " is not a valid FileStore directory");

Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java Mon Aug 15 12:35:19 2016
@@ -82,6 +82,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStoreGCMonitor;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStoreStatsMBean;
 import org.apache.jackrabbit.oak.plugins.segment.file.GCMonitorMBean;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.spi.commit.Observable;
@@ -435,7 +436,12 @@ public class SegmentNodeStoreService ext
             builder.withBlobStore(blobStore);
         }
 
-        store = builder.build();
+        try {
+            store = builder.build();
+        } catch (InvalidFileStoreVersionException e) {
+            log.error("The segment store data is not compatible with the current version. Please use oak-segment-tar or a different version of oak-segment.");
+            return false;
+        }
 
         // Create a compaction strategy
 

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=1756374&r1=1756373&r2=1756374&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 Mon Aug 15 12:35:19 2016
@@ -104,6 +104,8 @@ public class FileStore implements Segmen
 
     private static final String LOCK_FILE_NAME = "repo.lock";
 
+    private static final String MANIFEST_FILE_NAME = "manifest";
+
     /**
      * GC counter for logging purposes
      */
@@ -368,17 +370,17 @@ public class FileStore implements Segmen
          * @throws IOException
          */
         @Nonnull
-        public FileStore build() throws IOException {
+        public FileStore build() throws IOException, InvalidFileStoreVersionException {
             return new FileStore(this, false);
         }
 
-        public ReadOnlyStore buildReadOnly() throws IOException {
+        public ReadOnlyStore buildReadOnly() throws IOException, InvalidFileStoreVersionException {
             return new ReadOnlyStore(this);
         }
 
     }
 
-    private FileStore(Builder builder, boolean readOnly) throws IOException {
+    private FileStore(Builder builder, boolean readOnly) throws IOException, InvalidFileStoreVersionException {
         this.version = builder.version;
 
         if (readOnly) {
@@ -401,15 +403,18 @@ public class FileStore implements Segmen
         this.memoryMapping = builder.memoryMapping;
         this.gcMonitor = builder.gcMonitor;
 
-        if (readOnly) {
-            journalFile = new RandomAccessFile(new File(directory,
-                    JOURNAL_FILE_NAME), "r");
-        } else {
-            journalFile = new RandomAccessFile(new File(directory,
-                    JOURNAL_FILE_NAME), "rw");
+        Map<Integer, Map<Character, File>> map = collectFiles(directory);
+
+        File manifest = new File(directory, MANIFEST_FILE_NAME);
+
+        if (map.size() > 0) {
+            if (manifest.exists()) {
+                throw new InvalidFileStoreVersionException();
+            } else {
+                log.debug("The store folder is non empty and does not have manifest file");
+            }
         }
 
-        Map<Integer, Map<Character, File>> map = collectFiles(directory);
         this.readers = newArrayListWithCapacity(map.size());
         Integer[] indices = map.keySet().toArray(new Integer[map.size()]);
         Arrays.sort(indices);
@@ -440,6 +445,14 @@ public class FileStore implements Segmen
             this.writer = new TarWriter(writeFile, stats);
         }
 
+        if (readOnly) {
+            journalFile = new RandomAccessFile(new File(directory,
+                    JOURNAL_FILE_NAME), "r");
+        } else {
+            journalFile = new RandomAccessFile(new File(directory,
+                    JOURNAL_FILE_NAME), "rw");
+        }
+
         RecordId id = null;
         JournalReader journalReader = new JournalReader(new File(directory, JOURNAL_FILE_NAME));
         try {
@@ -1394,7 +1407,7 @@ public class FileStore implements Segmen
      */
     public static class ReadOnlyStore extends FileStore {
 
-        private ReadOnlyStore(Builder builder) throws IOException {
+        private ReadOnlyStore(Builder builder) throws IOException, InvalidFileStoreVersionException {
             super(builder, true);
         }
 

Added: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/InvalidFileStoreVersionException.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/InvalidFileStoreVersionException.java?rev=1756374&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/InvalidFileStoreVersionException.java (added)
+++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/InvalidFileStoreVersionException.java Mon Aug 15 12:35:19 2016
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.plugins.segment.file;
+
+/**
+ * This exception can be thrown during the startup of the {@link FileStore} to
+ * indicate an incompatible version mismatch between the code that generated the
+ * data in the store and the current version of the {@link FileStore}.
+ */
+public class InvalidFileStoreVersionException extends Exception {
+
+}

Propchange: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/InvalidFileStoreVersionException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java (original)
+++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java Mon Aug 15 12:35:19 2016
@@ -41,6 +41,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.ReadOnlyStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.plugins.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -71,8 +72,8 @@ public class ConsistencyChecker {
      * @return  the latest consistent revision out of the revisions listed in the journal.
      * @throws IOException
      */
-    public static String checkConsistency(File directory, String journalFileName,
-            boolean fullTraversal, long debugInterval, long binLen) throws IOException {
+    public static String checkConsistency(File directory, String journalFileName, boolean fullTraversal, long debugInterval, long binLen)
+            throws IOException, InvalidFileStoreVersionException {
         print("Searching for last good revision in {}", journalFileName);
         JournalReader journal = new JournalReader(new File(directory, journalFileName));
         Set<String> badPaths = newHashSet();
@@ -116,8 +117,7 @@ public class ConsistencyChecker {
      *                         the console during the full traversal phase.
      * @throws IOException
      */
-    public ConsistencyChecker(File directory, long debugInterval)
-            throws IOException {
+    public ConsistencyChecker(File directory, long debugInterval) throws IOException, InvalidFileStoreVersionException {
         store = FileStore.builder(directory).buildReadOnly();
         this.debugInterval = debugInterval;
     }

Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/RevisionHistory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/RevisionHistory.java?rev=1756374&r1=1756373&r2=1756374&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/RevisionHistory.java (original)
+++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/RevisionHistory.java Mon Aug 15 12:35:19 2016
@@ -37,6 +37,7 @@ import org.apache.jackrabbit.oak.json.Js
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.ReadOnlyStore;
+import org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.plugins.segment.file.JournalReader;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -52,7 +53,7 @@ public class RevisionHistory {
      * @param directory
      * @throws IOException
      */
-    public RevisionHistory(@Nonnull File directory) throws IOException {
+    public RevisionHistory(@Nonnull File directory) throws IOException, InvalidFileStoreVersionException {
         this.store = FileStore.builder(checkNotNull(directory)).buildReadOnly();
     }