Author: waldi Date: Sun Apr 22 20:13:10 2012 New Revision: 987 Log: debian/xen-utils-common.xendomains.init - Use more LSB output. - Replace stop code. Modified: trunk/xen/debian/xen-utils-common.xendomains.init Modified: trunk/xen/debian/xen-utils-common.xendomains.init =============================================================================--- trunk/xen/debian/xen-utils-common.xendomains.init Sun Apr 22 19:28:06 2012 (r986) +++ trunk/xen/debian/xen-utils-common.xendomains.init Sun Apr 22 20:13:10 2012 (r987) @@ -250,124 +250,54 @@ echo -e . } -stop() +coproc_timeout() { - exec 3>&2 2> /dev/null - - # Collect list of domains to shut down - if test "$XENDOMAINS_AUTO_ONLY" = "true"; then - rdnames - fi - echo -n "Shutting down Xen domains:" - while read id name rest; do - echo -n " $name" - if test "$XENDOMAINS_AUTO_ONLY" = "true"; then - eval " - case \"\$name\" in - ($NAMES) - # nothing - ;; - (*) - echo -e ''(skip)'' - continue - ;; - esac - " - fi - # XENDOMAINS_SYSRQ chould be something like just "s" - # or "s e i u" or even "s e s i u o" - # for the latter, you should set XENDOMAINS_USLEEP to 1200000 or so - if test -n "$XENDOMAINS_SYSRQ"; then - for sysrq in $XENDOMAINS_SYSRQ; do - echo -n "(SR-$sysrq)" - XMR=`xen sysrq $id $sysrq 2>&1 1>/dev/null` - if test $? -ne 0; then - echo -e "\nAn error occurred while doing sysrq on domain:\n$XMR\n" - rc_failed $? - echo -n ''!'' - fi - # usleep just ignores empty arg - usleep $XENDOMAINS_USLEEP - done - fi - if test "$state" = "-b---d" -o "$state" = "-----d"; then - echo -n "(zomb)" - continue - fi - if test -n "$XENDOMAINS_MIGRATE"; then - echo -n "(migr)" - watchdog_xencmd migrate & - WDOG_PID=$! - XMR=`xen migrate $id $XENDOMAINS_MIGRATE 2>&1 1>/dev/null` - if test $? -ne 0; then - echo -e "\nAn error occurred while migrating domain:\n$XMR\n" - rc_failed $? - echo -e ''!'' - - kill $WDOG_PID >/dev/null 2>&1 - else - kill $WDOG_PID >/dev/null 2>&1 - - echo -e . - usleep 1000 - continue - fi - fi - if test -n "$XENDOMAINS_SAVE"; then - echo -n "(save)" - watchdog_xencmd save & - WDOG_PID=$! - mkdir -p "$XENDOMAINS_SAVE" - XMR=`xen save $id $XENDOMAINS_SAVE/$name 2>&1 1>/dev/null` - if test $? -ne 0; then - echo -e "\nAn error occurred while saving domain:\n$XMR\n" - rc_failed $? - echo -e ''!'' - kill $WDOG_PID >/dev/null 2>&1 - else - kill $WDOG_PID >/dev/null 2>&1 - echo -e . - usleep 1000 - continue - fi - fi - if test -n "$XENDOMAINS_SHUTDOWN"; then - # XENDOMAINS_SHUTDOWN should be "--halt --wait" - echo -n "(shut)" - watchdog_xencmd shutdown & - WDOG_PID=$! - XMR=`xen shutdown $id $XENDOMAINS_SHUTDOWN 2>&1 1>/dev/null` - if test $? -ne 0; then - echo -e "\nAn error occurred while shutting down domain:\n$XMR\n" - rc_failed $? - echo -e ''!'' - fi - kill $WDOG_PID >/dev/null 2>&1 - fi - done < <(/usr/lib/xen-common/bin/xen-init-list) + for no in `seq 0 $XENDOMAINS_STOP_MAXWAIT`; do + if [ -z "$COPROC_PID" ]; then return 0; fi + sleep 1 + log_action_cont_msg + done + kill "$COPROC_PID" >/dev/null 2>&1 + return 1 +} - # NB. this shuts down ALL Xen domains (politely), not just the ones in - # AUTODIR/* - # This is because it''s easier to do ;-) but arguably if this script is run - # on system shutdown then it''s also the right thing to do. - if ! all_zombies && test -n "$XENDOMAINS_SHUTDOWN_ALL"; then - # XENDOMAINS_SHUTDOWN_ALL should be "--all --halt --wait" - echo -n " SHUTDOWN_ALL " - watchdog_xencmd shutdown 1 false & - WDOG_PID=$! - XMR=`xen shutdown $XENDOMAINS_SHUTDOWN_ALL 2>&1 1>/dev/null` - if test $? -ne 0; then - echo -e "\nAn error occurred while shutting down all domains: $XMR\n" - rc_failed $? - echo -e ''!'' - fi - kill $WDOG_PID >/dev/null 2>&1 - fi +do_stop_migrate() +{ + while read id name rest; do + log_action_begin_msg "Migrating Xen domain $name ($id)" + coproc xen migrate $id $XENDOMAINS_MIGRATE 2>&1 1>/dev/null + coproc_timeout + log_action_end_msg $? + done < <(/usr/lib/xen-common/bin/xen-init-list) +} + +do_stop_save() +{ + while read id name rest; do + log_action_begin_msg "Saving Xen domain $name ($id)" + mkdir -p "$XENDOMAINS_SAVE" + coproc xen save $id $XENDOMAINS_SAVE/$name 2>&1 1>/dev/null + coproc_timeout + log_action_end_msg $? + done < <(/usr/lib/xen-common/bin/xen-init-list) +} + +do_stop_shutdown_all() +{ + log_action_begin_msg "Shutting down all Xen domains" + coproc xen shutdown --all $XENDOMAINS_SHUTDOWN_ALL 2>&1 1>/dev/null + coproc_timeout + log_action_end_msg $? +} + +do_stop() +{ + if test -n "$XENDOMAINS_MIGRATE"; then do_stop_migrate; fi + if test -n "$XENDOMAINS_SAVE"; then do_stop_save; fi + do_stop_shutdown_all - # Unconditionally delete lock file - rm -f $LOCKFILE - - exec 2>&3 + # Unconditionally delete lock file + rm -f $LOCKFILE } check_domain_up() @@ -425,7 +355,7 @@ restart() { - stop + do_stop start } @@ -443,8 +373,7 @@ ;; stop) - stop - rc_status -v + do_stop ;; restart)