Author: alexparvulescu
Date: Fri Jun 24 11:46:26 2016
New Revision: 1750076

URL: http://svn.apache.org/viewvc?rev=1750076&view=rev
Log:
OAK-4505 Offline compaction clearer output values


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

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java?rev=1750076&r1=1750075&r2=1750076&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java
 Fri Jun 24 11:46:26 2016
@@ -17,17 +17,22 @@
 
 package org.apache.jackrabbit.oak.run;
 
+import static com.google.common.collect.Sets.difference;
+import static com.google.common.collect.Sets.newHashSet;
+
 import java.io.File;
-import java.util.Arrays;
+import java.util.Date;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
-import com.google.common.base.Stopwatch;
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.oak.commons.IOUtils;
 
+import com.google.common.base.Stopwatch;
+
 class CompactCommand implements Command {
 
     @Override
@@ -37,7 +42,7 @@ class CompactCommand implements Command
                 "Path to segment store (required)").ofType(String.class);
         OptionSpec<Void> forceFlag = parser.accepts(
                 "force", "Force compaction and ignore non matching segment 
version");
-        OptionSpec segmentTar = parser.accepts("segment-tar", "Use 
oak-segment-tar instead of oak-segment");
+        OptionSpec<?> segmentTar = parser.accepts("segment-tar", "Use 
oak-segment-tar instead of oak-segment");
         OptionSet options = parser.parse(args);
 
         String path = directoryArg.value(options);
@@ -50,23 +55,60 @@ class CompactCommand implements Command
         File directory = new File(path);
         boolean force = options.has(forceFlag);
 
+        boolean success = false;
+        Set<String> beforeLs = newHashSet();
+        Set<String> afterLs = newHashSet();
         Stopwatch watch = Stopwatch.createStarted();
 
-        if (options.has(segmentTar)) {
-            SegmentTarUtils.compact(directory, force);
-        } else {
-            SegmentUtils.compact(directory, force);
-        }
-
-        watch.stop();
-        System.out.println("    after  "
-                + Arrays.toString(directory.list()));
-        long sizeAfter = FileUtils.sizeOfDirectory(directory);
+        System.out.println("Compacting " + directory);
+        System.out.println("    before ");
+        beforeLs.addAll(list(directory));
+        long sizeBefore = FileUtils.sizeOfDirectory(directory);
         System.out.println("    size "
-                + IOUtils.humanReadableByteCount(sizeAfter) + " (" + sizeAfter
+                + IOUtils.humanReadableByteCount(sizeBefore) + " (" + 
sizeBefore
                 + " bytes)");
-        System.out.println("    duration  " + watch.toString() + " ("
-                + watch.elapsed(TimeUnit.SECONDS) + "s).");
+        System.out.println("    -> compacting");
+
+        try {
+            if (options.has(segmentTar)) {
+                SegmentTarUtils.compact(directory, force);
+            } else {
+                SegmentUtils.compact(directory, force);
+            }
+            success = true;
+        } catch (Throwable e) {
+            System.out.println("Compaction failure stack trace:");
+            e.printStackTrace(System.out);
+        } finally {
+            watch.stop();
+            if (success) {
+                System.out.println("    after ");
+                afterLs.addAll(list(directory));
+                long sizeAfter = FileUtils.sizeOfDirectory(directory);
+                System.out.println("    size "
+                        + IOUtils.humanReadableByteCount(sizeAfter) + " ("
+                        + sizeAfter + " bytes)");
+                System.out.println("    removed files " + difference(beforeLs, 
afterLs));
+                System.out.println("    added files " + difference(afterLs, 
beforeLs));
+                System.out.println("Compaction succeed in " + watch.toString()
+                        + " (" + watch.elapsed(TimeUnit.SECONDS) + "s).");
+            } else {
+                System.out.println("Compaction failed in " + watch.toString()
+                        + " (" + watch.elapsed(TimeUnit.SECONDS) + "s).");
+                System.exit(1);
+            }
+        }
+    }
+
+    private static Set<String> list(File directory) {
+        Set<String> files = newHashSet();
+        for (File f : directory.listFiles()) {
+            String d = new Date(f.lastModified()).toString();
+            String n = f.getName();
+            System.out.println("        " + d + ", " + n);
+            files.add(n);
+        }
+        return files;
     }
 
 }

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=1750076&r1=1750075&r2=1750076&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
 Fri Jun 24 11:46:26 2016
@@ -43,7 +43,6 @@ import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.RandomAccessFile;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
@@ -63,13 +62,11 @@ import ch.qos.logback.classic.Logger;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Queues;
 import com.google.common.io.Closer;
-import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.backup.FileStoreBackup;
 import org.apache.jackrabbit.oak.backup.FileStoreRestore;
-import org.apache.jackrabbit.oak.commons.IOUtils;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
 import org.apache.jackrabbit.oak.json.JsopDiff;
@@ -185,13 +182,6 @@ final class SegmentTarUtils {
         FileStore store = newFileStoreBuilder(directory.getAbsolutePath(),
                 force).withGCOptions(defaultGCOptions().setOffline()).build();
         try {
-            System.out.println("Compacting " + directory);
-            System.out.println("    before " + 
Arrays.toString(directory.list()));
-            long sizeBefore = FileUtils.sizeOfDirectory(directory);
-            System.out.println("    size "
-                    + IOUtils.humanReadableByteCount(sizeBefore) + " (" + 
sizeBefore
-                    + " bytes)");
-            System.out.println("    -> compacting");
             store.compact();
         } finally {
             store.close();

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java?rev=1750076&r1=1750075&r2=1750076&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentUtils.java
 Fri Jun 24 11:46:26 2016
@@ -44,7 +44,6 @@ import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.RandomAccessFile;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
@@ -63,11 +62,9 @@ import ch.qos.logback.classic.Logger;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Queues;
 import com.google.common.io.Closer;
-import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.commons.IOUtils;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
 import org.apache.jackrabbit.oak.json.JsopDiff;
@@ -172,15 +169,6 @@ class SegmentUtils {
         FileStore store = openFileStore(directory.getAbsolutePath(), force);
         try {
             boolean persistCM = Boolean.getBoolean("tar.PersistCompactionMap");
-            System.out.println("Compacting " + directory);
-            System.out.println("    before " + 
Arrays.toString(directory.list()));
-            long sizeBefore = FileUtils.sizeOfDirectory(directory);
-            System.out.println("    size "
-                    + IOUtils.humanReadableByteCount(sizeBefore) + " (" + 
sizeBefore
-                    + " bytes)");
-
-            System.out.println("    -> compacting");
-
             CompactionStrategy compactionStrategy = new CompactionStrategy(
                     false, CompactionStrategy.CLONE_BINARIES_DEFAULT,
                     CompactionStrategy.CleanupType.CLEAN_ALL, 0,


Reply via email to