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/01/28 11:49:00 UTC

svn commit: r1727305 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java

Author: frm
Date: Thu Jan 28 10:48:59 2016
New Revision: 1727305

URL: http://svn.apache.org/viewvc?rev=1727305&view=rev
Log:
OAK-3927 - Check the segment version when running the primary and standby commands

Modified:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.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/run/Main.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java?rev=1727305&r1=1727304&r2=1727305&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java Thu Jan 28 10:48:59 2016
@@ -365,6 +365,8 @@ public final class Main {
             System.exit(1);
         }
 
+        checkFileStoreVersionOrFail(nonOptions.get(0));
+
         FileStore store = null;
         StandbyClient failoverClient = null;
         try {
@@ -415,6 +417,7 @@ public final class Main {
             System.exit(1);
         }
 
+        checkFileStoreVersionOrFail(nonOptions.get(0));
 
         List<String> admissibleSlaves = options.has(admissible) ? options.valuesOf(admissible) : Collections.EMPTY_LIST;
 
@@ -639,6 +642,36 @@ public final class Main {
                 .create();
     }
 
+    private static FileStore openReadOnlyFileStore(File directory) throws IOException {
+        return new ReadOnlyStore(directory, 256, TAR_STORAGE_MEMORY_MAPPED);
+    }
+
+    private static void checkFileStoreVersionOrFail(String directory) throws IOException {
+        checkFileStoreVersionOrFail(new File(directory));
+    }
+
+    private static void checkFileStoreVersionOrFail(File directory) throws IOException {
+        if (!directory.exists()) {
+            return;
+        }
+
+        if (!directory.isDirectory()) {
+            return;
+        }
+
+        FileStore store = openReadOnlyFileStore(directory);
+
+        try {
+            SegmentVersion segmentVersion = getSegmentVersion(store);
+
+            if (segmentVersion != LATEST_VERSION) {
+                failWith(String.format("Segment version mismatch. Found %s, expected %s. Aborting.", segmentVersion, LATEST_VERSION));
+            }
+        } finally {
+            store.close();
+        }
+    }
+
     private static void checkpoints(String[] args) throws IOException {
         if (args.length == 0) {
             System.out
@@ -785,7 +818,7 @@ public final class Main {
             closer.close();
         }
     }
-    
+
     private static void repair(String[] args) throws IOException {
         Closer closer = Closer.create();
         String h = "repair mongodb://host:port/database path";
@@ -1178,7 +1211,7 @@ public final class Main {
 
     /**
      * Checks if the provided directory is a valid FileStore
-     * 
+     *
      * @return true if the provided directory is a valid FileStore
      */
     private static boolean isValidFileStore(String path) {

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=1727305&r1=1727304&r2=1727305&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 Thu Jan 28 10:48:59 2016
@@ -233,6 +233,7 @@ public class FileStore implements Segmen
         private boolean memoryMapping;
         private final LoggingGCMonitor gcMonitor = new LoggingGCMonitor();
         private StatisticsProvider statsProvider = StatisticsProvider.NOOP;
+        private boolean readOnly = false;
 
         private Builder(File directory) {
             this.directory = directory;
@@ -1406,6 +1407,10 @@ 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) throws IOException {
             super(null, directory, EMPTY_NODE, -1, 0, MEMORY_MAPPING_DEFAULT,
                     GCMonitor.EMPTY, StatisticsProvider.NOOP, true);