Skip to content

Commit

Permalink
Merge pull request kubernetes#10611 from marekbiskup/addon-update-kil…
Browse files Browse the repository at this point in the history
…l-children

Addon update kill children
  • Loading branch information
vmarmol committed Jul 10, 2015
2 parents 2e871b8 + aa60825 commit cabecc1
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 16 deletions.
55 changes: 40 additions & 15 deletions cluster/saltbase/salt/kube-addons/initd
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Kubernetes Addon Object Manager"
NAME=kube-addons
DAEMON_LOG_FILE=/var/log/$NAME.log
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DAEMON_LOG_FILE=/var/log/${NAME}.log
PIDFILE=/var/run/${NAME}.pid
SCRIPTNAME=/etc/init.d/${NAME}
KUBE_ADDONS_SH=/etc/kubernetes/kube-addons.sh

# Define LSB log_* functions.
Expand All @@ -34,44 +34,69 @@ KUBE_ADDONS_SH=/etc/kubernetes/kube-addons.sh
#
do_start()
{
${KUBE_ADDONS_SH} </dev/null >>${DAEMON_LOG_FILE} 2>&1 &
echo $! > ${PIDFILE}
disown
# use setsid to make sure the new daemon has its own group (I suppose
# start-stop-daemon does create a process group, but let's stay on the
# safe side).
setsid start-stop-daemon --start --verbose --background --no-close --make-pidfile --pidfile "${PIDFILE}" --startas "${KUBE_ADDONS_SH}" </dev/null >> ${DAEMON_LOG_FILE} 2>&1
}

#
# Function that stops the daemon/service
#
do_stop()
{
kill $(cat ${PIDFILE})
rm ${PIDFILE}
# start-stop-daemon is not used because we have to stop all children
# limitations:
# - stop does not work if the pid file is missing
# - stop does not work if the daemon process is missing (children will not
# be killed)
# This is sufficient - remaining processes will end after a while.

local pid
pid=$(cat "${PIDFILE}" 2> /dev/null)
if [[ $? != 0 ]]; then
return 1
fi
local pgrp
# find the process group for the service and kill entire group
# o - output format: pgpg - process group
pgrp=$(ps --no-headers --pid "${pid}" -o pgrp 2>/dev/null)
if [[ $? != 0 ]] || [[ "${pgrp}" == "" ]]; then
return 1
fi
pgrp=$(echo -e ${pgrp}) # strip whitespaces (that's why there are no quotes around pgrp)
# negative pid is for killing entire group
kill -- -${pgrp} 2> /dev/null
if [[ $? != 0 ]]; then
return 2
fi
rm -f "${PIDFILE}"
return
}

case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
log_daemon_msg "Starting ${DESC}" "${NAME}"
do_start
case "$?" in
0|1) log_end_msg 0 || exit 0 ;;
2) log_end_msg 1 || exit 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
log_daemon_msg "Stopping ${DESC}" "${NAME}"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) exit 1 ;;
0|1) log_end_msg 0 || exit 0 ;;
2) log_end_msg 1 || exit 1 ;;
esac
;;
status)
status_of_proc -p $PIDFILE $KUBE_ADDONS_SH $NAME
status_of_proc -p "${PIDFILE}" "${KUBE_ADDONS_SH}" "${NAME}"
;;

restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
log_daemon_msg "Restarting ${DESC}" "${NAME}"
do_stop
case "$?" in
0|1)
Expand All @@ -89,7 +114,7 @@ case "$1" in
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
echo "Usage: ${SCRIPTNAME} {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
6 changes: 5 additions & 1 deletion cluster/saltbase/salt/kube-addons/kube-addon-update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,11 @@ function wait-for-jobs() {
local rv=0
local pid
for pid in $(jobs -p); do
wait ${pid} || (rv=1; log ERR "error in pid ${pid}")
wait ${pid}
if [[ $? -ne 0 ]]; then
rv=1;
log ERR "error in pid ${pid}"
fi
log DB2 "pid ${pid} completed, current error code: ${rv}"
done
return ${rv}
Expand Down

0 comments on commit cabecc1

Please sign in to comment.