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);