Michael Blow has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/2464

Change subject: [NO ISSUE][TX][FAIL] Halt on LogFlusher failure
......................................................................

[NO ISSUE][TX][FAIL] Halt on LogFlusher failure

Change-Id: I69c4bf6c9669601e6613a9435de046d72b0baf6d
---
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
3 files changed, 22 insertions(+), 4 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/64/2464/1

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: newchange
Gerrit-Change-Id: I69c4bf6c9669601e6613a9435de046d72b0baf6d
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow <[email protected]>

Reply via email to