This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch 1.22
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/1.22 by this push:
new 7e3c638d20 OAK-8901: oak-run command checkpoints should support
RDBDocumentStore (patch by Manfred Badke)
7e3c638d20 is described below
commit 7e3c638d2063d222c5915c185fab50c9deab041d
Author: Julian Reschke <[email protected]>
AuthorDate: Mon Feb 24 12:16:58 2020 +0000
OAK-8901: oak-run command checkpoints should support RDBDocumentStore
(patch by Manfred Badke)
git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/oak/trunk@1874442
13f79535-47bb-0310-9956-ffa450edef68
---
.../jackrabbit/oak/run/CheckpointsCommand.java | 95 +++++++++++++---------
1 file changed, 56 insertions(+), 39 deletions(-)
diff --git
a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckpointsCommand.java
b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckpointsCommand.java
index a63fb1bf4a..3b74c3ac80 100644
---
a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckpointsCommand.java
+++
b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckpointsCommand.java
@@ -22,58 +22,60 @@ import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
-import org.apache.jackrabbit.oak.checkpoint.Checkpoints;
-import org.apache.jackrabbit.oak.run.commons.Command;
-import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
-
import com.google.common.io.Closer;
-import com.mongodb.MongoClient;
-import com.mongodb.MongoClientURI;
-import com.mongodb.MongoURI;
-import joptsimple.OptionParser;
-import joptsimple.OptionSet;
+import org.apache.jackrabbit.oak.checkpoint.Checkpoints;
+import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBuilder;
+import org.apache.jackrabbit.oak.run.commons.Command;
-import static
org.apache.jackrabbit.oak.plugins.document.mongo.MongoDocumentNodeStoreBuilder.newMongoDocumentNodeStoreBuilder;
class CheckpointsCommand implements Command {
@Override
public void execute(String... args) throws Exception {
- OptionParser parser = new OptionParser();
- OptionSet options = parser.parse(args);
- if (options.nonOptionArguments().isEmpty()) {
- System.out.println("usage: checkpoints {<path>|<mongo-uri>}
[list|rm-all|rm-unreferenced|rm <checkpoint>|info <checkpoint>|set <checkpoint>
<name> [<value>]] [--segment]");
+ CheckpointsOptions options = new CheckpointsOptions("checkpoints
{<path>|<mongo-uri>|<jdbc-uri>} [list|rm-all|rm-unreferenced|rm
<checkpoint>|info <checkpoint>|set <checkpoint> <name> [<value>]]
[--segment]").parse(args);;
+ if (options.isHelp()) {
+ options.printHelpOn(System.out);
+ System.exit(0);
+ }
+
+ String storeArg = options.getStoreArg();
+ if (storeArg == null || storeArg.length() == 0) {
+ System.err.println("Missing nodestore path/URI");
System.exit(1);
}
+ List<String> opArg = options.getOtherArgs();
boolean success = false;
Checkpoints cps;
Closer closer = Utils.createCloserWithShutdownHook();
try {
- String op = "list";
- if (options.nonOptionArguments().size() >= 2) {
- op = options.nonOptionArguments().get(1).toString();
+ String op = "list"; //default operation
+ if (opArg.size() > 0) {
+ op = opArg.get(0);
if (!"list".equals(op) && !"rm-all".equals(op) &&
!"rm-unreferenced".equals(op) && !"rm".equals(op) && !"info".equals(op) &&
!"set".equals(op)) {
- failWith("Unknown command.");
+ failWith("Unknown operation: " + op);
}
}
- String connection = options.nonOptionArguments().get(0).toString();
- if (connection.startsWith(MongoURI.MONGODB_PREFIX)) {
- MongoClientURI uri = new MongoClientURI(connection);
- MongoClient client = new MongoClient(uri);
- final DocumentNodeStore store =
newMongoDocumentNodeStoreBuilder()
- .setMongoDB(client, uri.getDatabase())
- .build();
- closer.register(Utils.asCloseable(store));
- cps = Checkpoints.onDocumentMK(store);
+ boolean isDocumentNodeStore = storeArg.startsWith("jdbc:") ||
storeArg.startsWith("mongodb:");
+
+ if (isDocumentNodeStore) {
+ DocumentNodeStoreBuilder<?> builder =
Utils.createDocumentMKBuilder(options, closer);
+ if (builder == null) {
+ System.err.println("Could not create
DocumentNodeStoreBuilder");
+ System.exit(1);
+ }
+ DocumentNodeStore nodeStore = builder.build();
+ closer.register(Utils.asCloseable(nodeStore));
+ cps = Checkpoints.onDocumentMK(nodeStore);
} else {
- cps = Checkpoints.onSegmentTar(new File(connection), closer);
+ cps = Checkpoints.onSegmentTar(new File(storeArg), closer);
}
- System.out.println("Checkpoints " + connection);
+ System.out.println("Checkpoints " + storeArg);
if ("list".equals(op)) {
int cnt = 0;
for (Checkpoints.CP cp : cps.list()) {
@@ -103,10 +105,10 @@ class CheckpointsCommand implements Command {
failWith("Failed to remove unreferenced checkpoints.");
}
} else if ("rm".equals(op)) {
- if (options.nonOptionArguments().size() < 3) {
+ if (opArg.size() < 2) {
failWith("Missing checkpoint id");
} else {
- String cp = options.nonOptionArguments().get(2).toString();
+ String cp = opArg.get(1);
long time = System.currentTimeMillis();
int cnt = cps.remove(cp);
time = System.currentTimeMillis() - time;
@@ -122,10 +124,10 @@ class CheckpointsCommand implements Command {
}
}
} else if ("info".equals(op)) {
- if (options.nonOptionArguments().size() < 3) {
+ if (opArg.size() < 2) {
failWith("Missing checkpoint id");
} else {
- String cp = options.nonOptionArguments().get(2).toString();
+ String cp = opArg.get(1);
Map<String, String> info = cps.getInfo(cp);
if (info != null) {
for (Map.Entry<String, String> e : info.entrySet()) {
@@ -136,15 +138,14 @@ class CheckpointsCommand implements Command {
}
}
} else if ("set".equals(op)) {
- if (options.nonOptionArguments().size() < 4) {
+ if (opArg.size() < 3) {
failWith("Missing checkpoint id");
} else {
- List<?> l = options.nonOptionArguments();
- String cp = l.get(2).toString();
- String name = l.get(3).toString();
+ String cp = opArg.get(1);
+ String name = opArg.get(2);
String value = null;
- if (l.size() >= 5) {
- value = l.get(4).toString();
+ if (opArg.size() >= 4) {
+ value = opArg.get(3);
}
long time = System.currentTimeMillis();
int cnt = cps.setInfoProperty(cp, name, value);
@@ -176,4 +177,20 @@ class CheckpointsCommand implements Command {
throw new RuntimeException(message);
}
+ private static final class CheckpointsOptions extends
Utils.NodeStoreOptions {
+
+ CheckpointsOptions(String usage) {
+ super(usage);
+ }
+
+ @Override
+ public CheckpointsCommand.CheckpointsOptions parse(String[] args) {
+ super.parse(args);
+ return this;
+ }
+
+ boolean isHelp() {
+ return options.has(help);
+ }
+ }
}
\ No newline at end of file