[ZEPPELIN-5604] Interpreter scheduler may not be shutdown properly
diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
index 29c2a0b..6757179 100644
--- a/.github/workflows/core.yml
+++ b/.github/workflows/core.yml
@@ -62,6 +62,8 @@
channel-priority: strict
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
conda list
conda info
@@ -103,6 +105,8 @@
auto-activate-base: false
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
- name: verify interpreter
run: mvn verify -DskipRat -am -pl .,zeppelin-interpreter,zeppelin-interpreter-shaded,${INTERPRETERS} -Pscala-2.10 -B
@@ -136,6 +140,8 @@
auto-activate-base: false
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
- name: install environment
run: |
@@ -211,6 +217,8 @@
auto-activate-base: false
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
- name: install environment
run: |
@@ -252,6 +260,8 @@
auto-activate-base: false
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
- name: install environment
run: |
@@ -290,6 +300,8 @@
auto-activate-base: false
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
- name: install environment
run: |
@@ -331,6 +343,8 @@
auto-activate-base: false
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
- name: install environment
run: |
@@ -372,6 +386,8 @@
auto-activate-base: false
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
- name: install environment
run: mvn install -DskipTests -DskipRat -pl spark-submit,spark/spark-dependencies -am -Pspark-3.1 -Pspark-scala-2.12 -Phadoop2 -B
@@ -412,6 +428,8 @@
auto-activate-base: false
- name: Make IRkernel available to Jupyter
run: |
+ R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"
+ R -e "devtools::install_github('IRkernel/IRkernel')"
R -e "IRkernel::installspec()"
- name: install environment
run: mvn install -DskipTests -DskipRat -pl spark-submit,spark/spark-dependencies -am -Pspark-3.2 -Pspark-scala-2.12 -Phadoop2 -B
@@ -446,9 +464,6 @@
environment-file: testing/env_python_3_with_R.yml
python-version: 3.7
auto-activate-base: false
- - name: Make IRkernel available to Jupyter
- run: |
- R -e "IRkernel::installspec()"
- name: install environment
run: |
mvn install -DskipTests -DskipRat -pl livy -am -B
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroup.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroup.java
index fb17542..51aeab7 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroup.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroup.java
@@ -144,29 +144,28 @@
private void closeInterpreter(Interpreter interpreter) {
Scheduler scheduler = interpreter.getScheduler();
-
- if (Boolean.parseBoolean(
- interpreter.getProperty("zeppelin.interpreter.close.cancel_job", "true"))) {
- for (final Job job : scheduler.getAllJobs()) {
- if (!job.isTerminated()) {
- job.abort();
- job.setStatus(Job.Status.ABORT);
- LOGGER.info("Job {} aborted ", job.getJobName());
- }
- }
- } else {
- LOGGER.info("Keep job running while closing interpreter: {}", interpreter.getClassName());
- }
-
try {
+ if (Boolean.parseBoolean(
+ interpreter.getProperty("zeppelin.interpreter.close.cancel_job", "true"))) {
+ for (final Job job : scheduler.getAllJobs()) {
+ if (!job.isTerminated()) {
+ job.abort();
+ job.setStatus(Job.Status.ABORT);
+ LOGGER.info("Job {} aborted ", job.getJobName());
+ }
+ }
+ } else {
+ LOGGER.info("Keep job running while closing interpreter: {}", interpreter.getClassName());
+ }
+
LOGGER.info("Trying to close interpreter {}", interpreter.getClassName());
interpreter.close();
} catch (InterpreterException e) {
LOGGER.warn("Fail to close interpreter {}", interpreter.getClassName(), e);
+ } finally {
+ //TODO(zjffdu) move the close of schedule to Interpreter
+ SchedulerFactory.singleton().removeScheduler(scheduler.getName());
}
-
- //TODO(zjffdu) move the close of schedule to Interpreter
- SchedulerFactory.singleton().removeScheduler(scheduler.getName());
}
public synchronized List<Interpreter> getOrCreateSession(String user, String sessionId) {