[FLINK-6300] Use 'exec' in start-foreground calls

To avoid signal-handling issues in Docker, applications need to run as
a single executable or use a process manager that forwards signals
correctly, in either case running as PID 1.

Since Flink uses a number of chained scripts before the ultimate call
to `java`, we need to use `exec` so that the script executable is
replaced, ultimately resulting in a single `java` process as PID 1.

There's no need to run a process manager since Flink only actually
requires a single process.

This closes #3734


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/9d3f127e
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/9d3f127e
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/9d3f127e

Branch: refs/heads/master
Commit: 9d3f127e4f0ddd15ae7af393e0c5b0d3dd81d812
Parents: 2247502
Author: Patrick Lucas <m...@patricklucas.com>
Authored: Tue Apr 18 14:48:49 2017 +0200
Committer: Greg Hogan <c...@greghogan.com>
Committed: Tue Apr 18 09:58:26 2017 -0400

----------------------------------------------------------------------
 flink-dist/src/main/flink-bin/bin/flink-console.sh | 2 +-
 flink-dist/src/main/flink-bin/bin/jobmanager.sh    | 2 +-
 flink-dist/src/main/flink-bin/bin/taskmanager.sh   | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/9d3f127e/flink-dist/src/main/flink-bin/bin/flink-console.sh
----------------------------------------------------------------------
diff --git a/flink-dist/src/main/flink-bin/bin/flink-console.sh 
b/flink-dist/src/main/flink-bin/bin/flink-console.sh
index 71c5c35..e60b101 100644
--- a/flink-dist/src/main/flink-bin/bin/flink-console.sh
+++ b/flink-dist/src/main/flink-bin/bin/flink-console.sh
@@ -62,4 +62,4 @@ if [[ ${JAVA_VERSION} =~ ${IS_NUMBER} ]]; then
 fi
 
 echo "Starting $SERVICE as a console application on host $HOSTNAME."
-$JAVA_RUN $JVM_ARGS ${FLINK_ENV_JAVA_OPTS} "${log_setting[@]}" -classpath 
"`manglePathList "$FLINK_TM_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" 
${CLASS_TO_RUN} "${ARGS[@]}"
+exec $JAVA_RUN $JVM_ARGS ${FLINK_ENV_JAVA_OPTS} "${log_setting[@]}" -classpath 
"`manglePathList "$FLINK_TM_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" 
${CLASS_TO_RUN} "${ARGS[@]}"

http://git-wip-us.apache.org/repos/asf/flink/blob/9d3f127e/flink-dist/src/main/flink-bin/bin/jobmanager.sh
----------------------------------------------------------------------
diff --git a/flink-dist/src/main/flink-bin/bin/jobmanager.sh 
b/flink-dist/src/main/flink-bin/bin/jobmanager.sh
index 5c3ac71..f88b165 100755
--- a/flink-dist/src/main/flink-bin/bin/jobmanager.sh
+++ b/flink-dist/src/main/flink-bin/bin/jobmanager.sh
@@ -76,7 +76,7 @@ if [[ $STARTSTOP == "start" ]] || [[ $STARTSTOP == 
"start-foreground" ]]; then
 fi
 
 if [[ $STARTSTOP == "start-foreground" ]]; then
-    "${FLINK_BIN_DIR}"/flink-console.sh jobmanager "${args[@]}"
+    exec "${FLINK_BIN_DIR}"/flink-console.sh jobmanager "${args[@]}"
 else
     "${FLINK_BIN_DIR}"/flink-daemon.sh $STARTSTOP jobmanager "${args[@]}"
 fi

http://git-wip-us.apache.org/repos/asf/flink/blob/9d3f127e/flink-dist/src/main/flink-bin/bin/taskmanager.sh
----------------------------------------------------------------------
diff --git a/flink-dist/src/main/flink-bin/bin/taskmanager.sh 
b/flink-dist/src/main/flink-bin/bin/taskmanager.sh
index d4e9838..3bac51f 100755
--- a/flink-dist/src/main/flink-bin/bin/taskmanager.sh
+++ b/flink-dist/src/main/flink-bin/bin/taskmanager.sh
@@ -102,7 +102,7 @@ if [[ $STARTSTOP == "start" ]] || [[ $STARTSTOP == 
"start-foreground" ]]; then
 fi
 
 if [[ $STARTSTOP == "start-foreground" ]]; then
-    "${FLINK_BIN_DIR}"/flink-console.sh taskmanager "${args[@]}"
+    exec "${FLINK_BIN_DIR}"/flink-console.sh taskmanager "${args[@]}"
 else
     TM_COMMAND="${FLINK_BIN_DIR}/flink-daemon.sh $STARTSTOP taskmanager 
${args[@]}"
     

Reply via email to