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 ba...@apache.org on 2014/08/26 17:39:17 UTC
svn commit: r1620637 - in /jackrabbit/oak/trunk/oak-run: pom.xml
src/main/java/org/apache/jackrabbit/oak/run/Main.java
Author: baedke
Date: Tue Aug 26 15:39:16 2014
New Revision: 1620637
URL: http://svn.apache.org/r1620637
Log:
OAK-1915: TarMK failover 2.0
New runmode "syncslave" for oak-run to start a standalone FailoverClient.
Modified:
jackrabbit/oak/trunk/oak-run/pom.xml
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/Main.java
Modified: jackrabbit/oak/trunk/oak-run/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/pom.xml?rev=1620637&r1=1620636&r2=1620637&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-run/pom.xml Tue Aug 26 15:39:16 2014
@@ -243,6 +243,11 @@
<version>${project.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-tarmk-failover</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
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=1620637&r1=1620636&r2=1620637&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 Tue Aug 26 15:39:16 2014
@@ -36,16 +36,17 @@ import java.util.Properties;
import java.util.Queue;
import java.util.Set;
import java.util.UUID;
+import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.jcr.Repository;
import com.google.common.base.Joiner;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Queues;
import com.google.common.io.Closer;
+import com.google.common.util.concurrent.AbstractScheduledService;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.MongoURI;
@@ -75,6 +76,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.segment.SegmentId;
import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.plugins.segment.failover.client.FailoverClient;
import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
import org.apache.jackrabbit.oak.scalability.ScalabilityRunner;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -146,6 +148,9 @@ public class Main {
case EXPLORE:
Explorer.main(args);
break;
+ case SYNCSLAVE:
+ syncslave(args);
+ break;
case CHECKPOINTS:
checkpoints(args);
break;
@@ -218,6 +223,79 @@ public class Main {
}
}
+ //TODO react to state changes of FailoverClient (triggered via JMX), once the state model of FailoverClient is complete.
+ private static class ScheduledSyncService extends AbstractScheduledService {
+
+ private final FailoverClient failoverClient;
+ private final int interval;
+
+ public ScheduledSyncService(FailoverClient failoverClient, int interval) {
+ this.failoverClient = failoverClient;
+ this.interval = interval;
+ }
+
+ @Override
+ public void runOneIteration() throws Exception {
+ failoverClient.run();
+ }
+
+ @Override
+ protected Scheduler scheduler() {
+ return Scheduler.newFixedDelaySchedule(0, interval, TimeUnit.SECONDS);
+ }
+ }
+
+ private static void syncslave(String[] args) throws Exception {
+
+ final String defaultHost = "127.0.0.1";
+ final int defaultPort = 8023;
+
+ final OptionParser parser = new OptionParser();
+ final OptionSpec<String> host = parser.accepts("host", "master host").withRequiredArg().ofType(String.class).defaultsTo(defaultHost);
+ final OptionSpec<Integer> port = parser.accepts("port", "master port").withRequiredArg().ofType(Integer.class).defaultsTo(defaultPort);
+ final OptionSpec<Integer> interval = parser.accepts("interval", "interval between successive executions").withRequiredArg().ofType(Integer.class);
+ final OptionSpec help = parser.acceptsAll(asList("h", "?", "help"), "show help").forHelp();
+ final OptionSpec<String> nonOption = parser.nonOptions(Mode.SYNCSLAVE + " <path to repository>");
+
+ final OptionSet options = parser.parse(args);
+ final List<String> nonOptions = nonOption.values(options);
+
+ if (options.has(help)) {
+ parser.printHelpOn(System.out);
+ System.exit(0);
+ }
+
+ if (nonOptions.isEmpty()) {
+ parser.printHelpOn(System.err);
+ System.exit(1);
+ }
+
+ FileStore store = null;
+ FailoverClient failoverClient = null;
+ ScheduledSyncService syncService = null;
+ try {
+ store = new FileStore(new File(nonOptions.get(0)), 256);
+ failoverClient = new FailoverClient(
+ options.has(host)? options.valueOf(host) : defaultHost,
+ options.has(port)? options.valueOf(port) : defaultPort,
+ store);
+ if (!options.has(interval)) {
+ failoverClient.run();
+ } else {
+ syncService = new ScheduledSyncService(failoverClient, options.valueOf(interval));
+ syncService.startAsync();
+ syncService.awaitTerminated();
+ }
+ } finally {
+ if (store != null) {
+ store.close();
+ }
+ if (failoverClient != null) {
+ failoverClient.close();
+ }
+ }
+ }
+
public static NodeStore bootstrapNodeStore(String[] args, Closer closer,
String h) throws IOException {
//TODO add support for other NodeStore flags
@@ -811,6 +889,7 @@ public class Main {
UPGRADE("upgrade"),
SCALABILITY("scalability"),
EXPLORE("explore"),
+ SYNCSLAVE("syncslave"),
HELP("help"),
CHECKPOINTS("checkpoints");
Re: svn commit: r1620637 - in /jackrabbit/oak/trunk/oak-run: pom.xml
src/main/java/org/apache/jackrabbit/oak/run/Main.java
Posted by Michael Dürig <md...@apache.org>.
On 26.8.14 5:39 , baedke@apache.org wrote:
> + SYNCSLAVE("syncslave"),
Please also update the readme with a section explaining this new run mode.
Michael