Re: [libvirt] [PATCH v2] libvirt-guests: Add parallel startup and shutdown of guests
On 03/03/2012 03:03 AM, Eric Blake wrote: On 03/01/2012 07:23 AM, Peter Krempa wrote: With this patch, it's possible to shut down guests in parallel. Parallel startup was possible before, but this functionality was not documented properly. To enable parallel startup set the START_DELAY to 0. Parallel shutdown has a configurable parameter PARALLEL_SHUTDOWN that defines the number of machines being shut down in parallel. Enabling this feature changes the semantics of SHUTDOWN_TIMEOUT parameter that is applied as a cumulative timeout to shutdown all guests on a URI. --- +# shutdown_guests_parallel URI GUESTS +# Shutdown guests GUESTS on machine URI in parallel +shutdown_guests_parallel() +{ +uri=$1 +guests=$2 + +on_shutdown= check_timeout=false +timeout=$SHUTDOWN_TIMEOUT if [ $timeout -gt 0 ]; then check_timeout=true fi +while [ -n $on_shutdown ] || [ -n $guests ]; do +while [ -n $guests ] + [ $(guest_count $on_shutdown) -lt $PARALLEL_SHUTDOWN ]; do +set -- $guests +guest=$1 +shift +guests=$* +shutdown_guest_async $uri $guest +on_shutdown=$on_shutdown $guest +done +sleep 1 if $check_timeout; then +timeout=$(($timeout - 1)) +if [ $timeout -le 0 ]; then +eval_gettext Timeout expired while shutting down domains; echo +RETVAL=1 +return +fi fi +on_shutdown_prev=$on_shutdown +on_shutdown=$(check_guests_shutdown $uri $on_shutdown) +print_guests_shutdown $uri $on_shutdown_prev $on_shutdown +done +} + -# number of seconds we're willing to wait for a guest to shut down +# If set to non-zero, shutdown will suspend guests concurrently. Number of +# guests on shutdown at any time will not exceed number set in this variable. +#PARALLEL_SHUTDOWN=0 + +# Number of seconds we're willing to wait for a guest to shut down. If parallel +# shutdown is enabled, this timeout applies as a timeout for shutting down all +# guests on a single URI defined in the variable URIS. This must be set to +# a nonzero positive value if the shutdown action is requested. Change the last sentence: If this is 0, then there is no time out (use with caution, as guests might not respond to a shutdown request). (Hmm, maybe we want to default to 300 [5 minutes], and document our non-zero default, so that you have to explicitly request 0 to avoid timeouts.) ACK with those lines added to shutdown_guests_parallel, and the wording change to the config file, and with the optional change to the timeout default. The same check for the timeout was also needed in shutdown_guest(). I added the checks, changed the wording in the config file and set the default SHUTDOWN_TIMEOUT to 300 (with a note in the docs) and pushed the result. Thanks Peter -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2] libvirt-guests: Add parallel startup and shutdown of guests
On 03/01/2012 07:23 AM, Peter Krempa wrote: With this patch, it's possible to shut down guests in parallel. Parallel startup was possible before, but this functionality was not documented properly. To enable parallel startup set the START_DELAY to 0. Parallel shutdown has a configurable parameter PARALLEL_SHUTDOWN that defines the number of machines being shut down in parallel. Enabling this feature changes the semantics of SHUTDOWN_TIMEOUT parameter that is applied as a cumulative timeout to shutdown all guests on a URI. --- +# shutdown_guests_parallel URI GUESTS +# Shutdown guests GUESTS on machine URI in parallel +shutdown_guests_parallel() +{ +uri=$1 +guests=$2 + +on_shutdown= check_timeout=false +timeout=$SHUTDOWN_TIMEOUT if [ $timeout -gt 0 ]; then check_timeout=true fi +while [ -n $on_shutdown ] || [ -n $guests ]; do +while [ -n $guests ] + [ $(guest_count $on_shutdown) -lt $PARALLEL_SHUTDOWN ]; do +set -- $guests +guest=$1 +shift +guests=$* +shutdown_guest_async $uri $guest +on_shutdown=$on_shutdown $guest +done +sleep 1 if $check_timeout; then +timeout=$(($timeout - 1)) +if [ $timeout -le 0 ]; then +eval_gettext Timeout expired while shutting down domains; echo +RETVAL=1 +return +fi fi +on_shutdown_prev=$on_shutdown +on_shutdown=$(check_guests_shutdown $uri $on_shutdown) +print_guests_shutdown $uri $on_shutdown_prev $on_shutdown +done +} + -# number of seconds we're willing to wait for a guest to shut down +# If set to non-zero, shutdown will suspend guests concurrently. Number of +# guests on shutdown at any time will not exceed number set in this variable. +#PARALLEL_SHUTDOWN=0 + +# Number of seconds we're willing to wait for a guest to shut down. If parallel +# shutdown is enabled, this timeout applies as a timeout for shutting down all +# guests on a single URI defined in the variable URIS. This must be set to +# a nonzero positive value if the shutdown action is requested. Change the last sentence: If this is 0, then there is no time out (use with caution, as guests might not respond to a shutdown request). (Hmm, maybe we want to default to 300 [5 minutes], and document our non-zero default, so that you have to explicitly request 0 to avoid timeouts.) ACK with those lines added to shutdown_guests_parallel, and the wording change to the config file, and with the optional change to the timeout default. -- Eric Blake ebl...@redhat.com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list