Michael Blow has submitted this change and it was merged. Change subject: [NO ISSUE][TX][FAIL] Halt on LogFlusher failure ......................................................................
[NO ISSUE][TX][FAIL] Halt on LogFlusher failure - user model changes: no - storage format changes: no - interface changes: no - cures cancer: no Change-Id: I69c4bf6c9669601e6613a9435de046d72b0baf6d Reviewed-on: https://asterix-gerrit.ics.uci.edu/2464 Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: abdullah alamoudi <bamou...@gmail.com> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> --- M asterixdb/asterix-transactions/pom.xml M asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCShutdownHook.java M hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java 4 files changed, 26 insertions(+), 4 deletions(-) Approvals: abdullah alamoudi: Looks good to me, approved Jenkins: Verified; No violations found; ; Verified Objections: Anon. E. Moose #1000171: Violations found diff --git a/asterixdb/asterix-transactions/pom.xml b/asterixdb/asterix-transactions/pom.xml index 57332ba..ad044cb 100644 --- a/asterixdb/asterix-transactions/pom.xml +++ b/asterixdb/asterix-transactions/pom.xml @@ -155,5 +155,9 @@ <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </dependency> + <dependency> + <groupId>org.apache.hyracks</groupId> + <artifactId>hyracks-util</artifactId> + </dependency> </dependencies> </project> diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java index e3788b7..ce65de0 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogManager.java @@ -56,6 +56,7 @@ import org.apache.asterix.common.transactions.TxnLogFile; import org.apache.hyracks.api.lifecycle.ILifeCycleComponent; import org.apache.hyracks.api.util.InvokeUtil; +import org.apache.hyracks.util.ExitUtil; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Logger; @@ -714,8 +715,9 @@ emptyQ.add(flushPage.getLogPageSize() == logMgr.getLogPageSize() ? flushPage : stashQ.remove()); } } catch (Exception e) { - LOGGER.log(Level.ERROR, "LogFlusher is terminating abnormally. System is in unusable state.", e); - throw e; + LOGGER.log(Level.ERROR, "LogFlusher is terminating abnormally. System is in unusable state; halting", e); + ExitUtil.halt(44); + throw new AssertionError("not reachable"); } finally { if (interrupted) { Thread.currentThread().interrupt(); diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCShutdownHook.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCShutdownHook.java index 020e564..ccac00e 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCShutdownHook.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NCShutdownHook.java @@ -18,6 +18,7 @@ */ package org.apache.hyracks.control.nc; +import org.apache.hyracks.util.ExitUtil; import org.apache.hyracks.util.ThreadDumpUtil; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; @@ -52,11 +53,11 @@ try { LOGGER.info("Watchdog is angry. Killing shutdown hook"); } finally { - Runtime.getRuntime().halt(66); // NOSONAR last resort + ExitUtil.halt(ExitUtil.EXIT_CODE_SHUTDOWN_TIMED_OUT); } } } catch (Throwable th) { // NOSONAR must catch them all - Runtime.getRuntime().halt(77); // NOSONAR last resort + ExitUtil.halt(ExitUtil.EXIT_CODE_WATCHDOG_FAILED); } }; } diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java index c54c9dc..523480a 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ExitUtil.java @@ -28,6 +28,9 @@ private static final ExitThread exitThread = new ExitThread(); + public static final int EXIT_CODE_SHUTDOWN_TIMED_OUT = 66; + public static final int EXIT_CODE_WATCHDOG_FAILED = 77; + private ExitUtil() { } @@ -40,6 +43,18 @@ exitThread.start(); } + @SuppressWarnings("squid:S2142") // catch interrupted + public static void halt(int status) { + LOGGER.fatal("JVM halting with status " + status + "; bye!", new Throwable("halt stacktrace")); + try { + // try to give time for the log to be emitted... + Thread.sleep(2000); + } catch (InterruptedException e) { + // ignore + } + Runtime.getRuntime().halt(status); + } + private static class ExitThread extends Thread { private int status; -- To view, visit https://asterix-gerrit.ics.uci.edu/2464 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: I69c4bf6c9669601e6613a9435de046d72b0baf6d Gerrit-PatchSet: 4 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Michael Blow <mb...@apache.org> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Gerrit-Reviewer: Michael Blow <mb...@apache.org> Gerrit-Reviewer: Murtadha Hubail <mhub...@apache.org> Gerrit-Reviewer: abdullah alamoudi <bamou...@gmail.com>