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);