commit 3289102d676003c17212bb8296d3d1fdd7ab2499 Author: Vihang Karajgaonkar Date: Wed Jan 18 16:55:08 2017 -0800 HIVE-15626 : beeline exits on ctrl-c instead of canceling the query diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index 65818dd48fa91b7cac2d3c07a3caa082b78e6365..abeff0290ebdc45a6d22f68cd7c05058cb9b89c4 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -123,7 +123,7 @@ public class BeeLine implements Closeable { private static final ResourceBundle resourceBundle = ResourceBundle.getBundle(BeeLine.class.getSimpleName()); - private final BeeLineSignalHandler signalHandler = null; + private final BeeLineSignalHandler signalHandler; private static final String separator = System.getProperty("line.separator"); private boolean exit = false; private final DatabaseConnections connections = new DatabaseConnections(); @@ -531,6 +531,7 @@ public BeeLine() { public BeeLine(boolean isBeeLine) { this.isBeeLine = isBeeLine; + this.signalHandler = new SunSignalHandler(this); } DatabaseConnection getDatabaseConnection() { diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLineSignalHandler.java b/beeline/src/java/org/apache/hive/beeline/BeeLineSignalHandler.java index 378f1b05512fc735b23d2a1933a6626df143e6ba..755510924521d6caadd6ce2d771d8eeb4a817f25 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLineSignalHandler.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLineSignalHandler.java @@ -25,7 +25,6 @@ import java.sql.Statement; - /** * BeeLineSignalHandler. * diff --git a/beeline/src/java/org/apache/hive/beeline/SunSignalHandler.java b/beeline/src/java/org/apache/hive/beeline/SunSignalHandler.java index 8d4097e61897c6b3684e2573ad71304443558fec..3fb93979fa90c489e57f9a32ffdf3fccc96596ef 100644 --- a/beeline/src/java/org/apache/hive/beeline/SunSignalHandler.java +++ b/beeline/src/java/org/apache/hive/beeline/SunSignalHandler.java @@ -30,20 +30,29 @@ public class SunSignalHandler implements BeeLineSignalHandler, SignalHandler { private Statement stmt = null; + private final BeeLine beeLine; - SunSignalHandler () { + SunSignalHandler (BeeLine beeLine) { + this.beeLine = beeLine; // Interpret Ctrl+C as a request to cancel the currently // executing query. Signal.handle (new Signal ("INT"), this); } + @Override public void setStatement(Statement stmt) { this.stmt = stmt; } + @Override public void handle (Signal signal) { try { - if (stmt != null) { + // exit the JVM if Ctrl+C is received + // and no current statement is executing + if(stmt == null || stmt.isClosed()) { + System.exit(127); + } else { + beeLine.info(beeLine.loc("interrupt-ctrl-c")); stmt.cancel(); } } catch (SQLException ex) { diff --git a/beeline/src/main/resources/BeeLine.properties b/beeline/src/main/resources/BeeLine.properties index 141f0c694e993aecc7c9bb6a1a6de144a33ddf82..af862844eff2f3c6684a31139bf3c040d4fdb926 100644 --- a/beeline/src/main/resources/BeeLine.properties +++ b/beeline/src/main/resources/BeeLine.properties @@ -151,6 +151,7 @@ server URI and if the URI is correct, then ask the administrator to check the se hs2-connection-timed-out: Connection timeout when communicating with HS2 server. hs2-unknown-connection-problem: Unknown HS2 problem when communicating with Thrift server. hs2-unexpected-error: Unexpected HS2 error when communicating with the Thrift server. +interrupt-ctrl-c: Interrupting... Please be patient this may take some time. cmd-usage: Usage: java org.apache.hive.cli.beeline.BeeLine \n \