Author: frm
Date: Tue Nov 21 14:34:25 2017
New Revision: 1815926

URL: http://svn.apache.org/viewvc?rev=1815926&view=rev
Log:
OAK-6784 - Propagate exceptions thrown by Compact

The Compact tool backend should not swallow the exceptions thrown during its
execution. This way the tool frontend can handle error conditions meaningfully,
e.g. by printing a user-friendly error message or by retrying the operation
with different parameters.

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-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.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=1815926&r1=1815925&r2=1815926&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
 Tue Nov 21 14:34:25 2017
@@ -132,9 +132,8 @@ class CompactCommand implements Command
         try {
             SegmentTarUtils.compact(directory, 
fileAccessMode.getMemoryMapped(), force);
             success = true;
-        } catch (Throwable e) {
-            System.out.println("Compaction failure stack trace:");
-            e.printStackTrace(System.out);
+        } catch (Exception e) {
+            e.printStackTrace(System.err);
         } finally {
             watch.stop();
             if (success) {

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=1815926&r1=1815925&r2=1815926&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 Nov 21 14:34:25 2017
@@ -174,7 +174,7 @@ final class SegmentTarUtils {
                 .run();
     }
 
-    static void compact(@Nonnull File directory, @Nullable Boolean mmap, 
boolean force) {
+    static void compact(@Nonnull File directory, @Nullable Boolean mmap, 
boolean force) throws IOException, InvalidFileStoreVersionException {
         Compact.builder()
                 .withPath(directory)
                 .withMmap(mmap)

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java?rev=1815926&r1=1815925&r2=1815926&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java
 Tue Nov 21 14:34:25 2017
@@ -39,7 +39,8 @@ import org.apache.jackrabbit.oak.segment
 /**
  * Perform an offline compaction of an existing segment store.
  */
-public class Compact implements Runnable {
+public class Compact {
+
     private final long logAt = Long.getLong("compaction-progress-log", 150000);
 
     /**
@@ -120,7 +121,7 @@ public class Compact implements Runnable
          *
          * @return an instance of {@link Runnable}.
          */
-        public Runnable build() {
+        public Compact build() {
             checkNotNull(path);
             return new Compact(this);
         }
@@ -143,16 +144,7 @@ public class Compact implements Runnable
         this.strictVersionCheck = !builder.force;
     }
 
-    @Override
-    public void run() {
-        try {
-            compact();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private void compact() throws IOException, 
InvalidFileStoreVersionException {
+    public void run() throws IOException, InvalidFileStoreVersionException {
         try (FileStore store = newFileStore()) {
             store.compactFull();
         }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java?rev=1815926&r1=1815925&r2=1815926&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/upgrade/UpgradeIT.java
 Tue Nov 21 14:34:25 2017
@@ -42,6 +42,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.tar.IOMonitorAdapter;
 import org.apache.jackrabbit.oak.segment.file.tar.TarFiles;
 import org.apache.jackrabbit.oak.segment.tool.Compact;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -111,12 +112,17 @@ public class UpgradeIT {
     public void offRCUpgradesRequiresForce() throws IOException, 
InvalidFileStoreVersionException {
         checkSegmentVersion(V_12);
         checkStoreVersion(1);
-        Compact.builder()
+
+        try {
+            Compact.builder()
                 .withPath(fileStoreHome.getRoot())
                 .withMmap(true)
                 .withForce(false)
                 .build()
                 .run();
+        } catch (Exception e) {
+            // The exception is not relevant to this test.
+        }
 
         // Not upgraded
         checkStoreVersion(1);


Reply via email to