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,
