From 2bf746e04d572c1880d986714a4d02ff03df3fbe Mon Sep 17 00:00:00 2001 From: Alexandru DAMIAN Date: Tue, 10 Dec 2013 18:24:18 +0000 Subject: [PATCH] bitbake: toaster: add two-stage commit startup logic Toaster start script lunches multiple process components of the toaster system. This patch adds logic into the startup script to safely fail startup and do proper cleanup on any error that may happen during system start. Bitbake needs to return 0 if it will successfully lunches the server-mode. (Bitbake rev: f43d284e7ae752049711d8215a6020bee6966d45) Signed-off-by: Alexandru DAMIAN Signed-off-by: Richard Purdie --- bitbake/bin/bitbake | 1 + bitbake/bin/toaster | 45 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake index d27fe84..cbfd2c9 100755 --- a/bitbake/bin/bitbake +++ b/bitbake/bin/bitbake @@ -343,6 +343,7 @@ def main(): server_connection.terminate() else: print("server address: %s, server port: %s" % (server.serverImpl.host, server.serverImpl.port)) + return 0 return 1 diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster index fc59fe5..38e71ac 100755 --- a/bitbake/bin/toaster +++ b/bitbake/bin/toaster @@ -51,6 +51,11 @@ function webserverStartAll() fi if [ $retval -eq 0 ]; then python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 ${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid + sleep 1 + if ! cat "${BUILDDIR}/.toastermain.pid" | xargs -I{} kill -0 {} ; then + retval=1 + rm "${BUILDDIR}/.toastermain.pid" + fi fi return $retval } @@ -120,9 +125,13 @@ else fi NOTOASTERUI=0 -if [ "x$2" == "xnoui" ]; then - NOTOASTERUI=1 -fi +for param in $*; do + case $param in + noui ) + NOTOASTERUI=1 + ;; + esac +done echo "The system will $CMD." @@ -157,22 +166,38 @@ fi case $CMD in start ) + start_success=1 addtoConfiguration "INHERIT+=\"toaster buildhistory\"" toaster.conf - webserverStartAll || return 4 + if ! webserverStartAll; then + echo "Failed ${CMD}." + return 4 + fi unset BBSERVER bitbake --postread conf/toaster.conf --server-only -t xmlrpc -B localhost:8200 - export BBSERVER=localhost:8200 - if [ $NOTOASTERUI == 0 ]; then # we start the TOASTERUI only if not inhibited - bitbake --observe-only -u toasterui >${BUILDDIR}/toaster_ui.log 2>&1 & echo $! >${BUILDDIR}/.toasterui.pid + if [ $? -ne 0 ]; then + start_success=0 + echo "Bitbake server start failed" + else + export BBSERVER=localhost:8200 + if [ $NOTOASTERUI == 0 ]; then # we start the TOASTERUI only if not inhibited + bitbake --observe-only -u toasterui >${BUILDDIR}/toaster_ui.log 2>&1 & echo $! >${BUILDDIR}/.toasterui.pid + fi + fi + if [ $start_success -eq 1 ]; then + # set fail safe stop system on terminal exit + trap stop_system SIGHUP + echo "Successful ${CMD}." + else + # failed start, do stop + stop_system + echo "Failed ${CMD}." fi - # stop system on terminal exit - trap stop_system SIGHUP ;; stop ) stop_system trap '' SIGHUP + echo "Successful ${CMD}." ;; esac -echo "Successful ${CMD}." -- 2.7.4