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/05/31 08:19:47 UTC

svn commit: r1746252 - in /jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run: DumpDataStoreReferencesCommand.java SegmentTarUtils.java

Author: frm
Date: Tue May 31 08:19:47 2016
New Revision: 1746252

URL: http://svn.apache.org/viewvc?rev=1746252&view=rev
Log:
OAK-4342 - Add a flag to choose between segment store implementations in the "dumpdatastorerefs" command

Modified:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DumpDataStoreReferencesCommand.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DumpDataStoreReferencesCommand.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DumpDataStoreReferencesCommand.java?rev=1746252&r1=1746251&r2=1746252&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DumpDataStoreReferencesCommand.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DumpDataStoreReferencesCommand.java Tue May 31 08:19:47 2016
@@ -35,6 +35,9 @@ import com.google.common.io.Files;
 import com.mongodb.MongoClient;
 import com.mongodb.MongoClientURI;
 import com.mongodb.MongoURI;
+import joptsimple.OptionParser;
+import joptsimple.OptionSet;
+import joptsimple.OptionSpec;
 import org.apache.jackrabbit.oak.commons.IOUtils;
 import org.apache.jackrabbit.oak.plugins.blob.BlobReferenceRetriever;
 import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
@@ -50,34 +53,43 @@ class DumpDataStoreReferencesCommand imp
 
     @Override
     public void execute(String... args) throws Exception {
-        if (args.length == 0) {
-            System.out
-                    .println("usage: dumpdatastorerefs {<path>|<mongo-uri>} <dump_path>]");
+        OptionParser parser = new OptionParser();
+        OptionSpec segmentTar = parser.accepts("segment-tar", "Use oak-segment-tar instead of oak-segment");
+        OptionSet options = parser.parse(args);
+
+        if (options.nonOptionArguments().isEmpty()) {
+            System.out.println("usage: dumpdatastorerefs {<path>|<mongo-uri>} <dump_path>]");
             System.exit(1);
         }
 
         Closer closer = Closer.create();
         try {
-            BlobReferenceRetriever marker = null;
+            BlobReferenceRetriever marker;
             BlobStore blobStore = null;
 
-            if (args[0].startsWith(MongoURI.MONGODB_PREFIX)) {
-                MongoClientURI uri = new MongoClientURI(args[0]);
+            String source = options.nonOptionArguments().get(0).toString();
+
+            if (source.startsWith(MongoURI.MONGODB_PREFIX)) {
+                MongoClientURI uri = new MongoClientURI(source);
                 MongoClient client = new MongoClient(uri);
                 final DocumentNodeStore store = new DocumentMK.Builder().setMongoDB(client.getDB(uri.getDatabase())).getNodeStore();
                 blobStore = store.getBlobStore();
                 closer.register(Utils.asCloseable(store));
                 marker = new DocumentBlobReferenceRetriever(store);
+            } else if (options.has(segmentTar)) {
+                marker = SegmentTarUtils.newBlobReferenceRetriever(source, closer);
             } else {
-                FileStore store = openFileStore(args[0]);
+                FileStore store = openFileStore(source);
                 closer.register(Utils.asCloseable(store));
                 marker = new SegmentBlobReferenceRetriever(store.getTracker());
             }
 
             String dumpPath = StandardSystemProperty.JAVA_IO_TMPDIR.value();
-            if (args.length == 2) {
-                dumpPath = args[1];
+
+            if (options.nonOptionArguments().size() >= 2) {
+                dumpPath = options.nonOptionArguments().get(1).toString();
             }
+
             File dumpFile = new File(dumpPath, "marked-" + System.currentTimeMillis());
             final BufferedWriter writer = Files.newWriter(dumpFile, Charsets.UTF_8);
             final AtomicInteger count = new AtomicInteger();

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java?rev=1746252&r1=1746251&r2=1746252&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java Tue May 31 08:19:47 2016
@@ -72,10 +72,12 @@ import org.apache.jackrabbit.oak.commons
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
 import org.apache.jackrabbit.oak.json.JsopDiff;
+import org.apache.jackrabbit.oak.plugins.blob.BlobReferenceRetriever;
 import org.apache.jackrabbit.oak.segment.RecordId;
 import org.apache.jackrabbit.oak.segment.RecordUsageAnalyser;
 import org.apache.jackrabbit.oak.segment.Segment;
 import org.apache.jackrabbit.oak.segment.SegmentBlob;
+import org.apache.jackrabbit.oak.segment.SegmentBlobReferenceRetriever;
 import org.apache.jackrabbit.oak.segment.SegmentId;
 import org.apache.jackrabbit.oak.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
@@ -107,6 +109,10 @@ final class SegmentTarUtils {
         return SegmentNodeStore.builder(bootstrapFileStore(path, closer)).build();
     }
 
+    static BlobReferenceRetriever newBlobReferenceRetriever(String path, Closer closer) throws IOException {
+        return new SegmentBlobReferenceRetriever(closer.register(openFileStore(path, false)));
+    }
+
     static void backup(File source, File target) throws IOException {
         Closer closer = Closer.create();
         try {