[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-API] Bug#680588: xcp-xapi: startup race condition between xcp-xapi and xcp-networkd on slave
Package: xcp-xapi Version: 1.3.2-8 Severity: important Tags: patch Found race condition (specific only to slave hosts): xcp-xapi can start earlier than xcp-networkd due lack of dependency in init.d script. Syptoms: After reboot slave's xcp does not work: xe (anything): The host failed to acquire an IP address on its management interface and therefore cannot contact the master. log: /var/log/xcp-xapi.log:[20120707T01:36:51.361Z| warn|lab-xh3|0 thread_zero|bringing up management interface D:065e1b39b653|xapi] Failed to acquire a management IP address That bug appears only on slave host. Patch: --- /tmp/xcp-xapi 2012-07-07 06:13:47.000000000 +0400 +++ /etc/init.d/xcp-xapi 2012-07-07 06:08:05.000000000 +0400 @@ -1,7 +1,7 @@ #! /bin/sh ### BEGIN INIT INFO # Provides: xcp-xapi -# Required-Start: $remote_fs $syslog xcp-squeezed xcp-v6d xcp-fe +# Required-Start: $remote_fs $syslog xcp-squeezed xcp-v6d xcp-fe xcp-networkd # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 (after applying exec 'update-rc.d xcp-xapi defaults') -- System Information: Debian Release: wheezy/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Kernel: Linux 3.2.0-3-686-pae (SMP w/8 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages xcp-xapi depends on: ii hwdata 0.233-1 ii libc6 2.13-34 ii libpam0g 1.1.3-7.1 ii libuuid1 2.20.1-5.1 ii libvhd0 2.0.90-1 ii libxen-4.1 4.1.3~rc1+hg-20120614.a9c0a89c08f2-4 ii libxenstore3.0 4.1.3~rc1+hg-20120614.a9c0a89c08f2-4 ii lsb-base 4.1+Debian7 ii pciutils 1:3.1.9-5 ii python 2.7.3-1 ii python-xenapi 1.3.2-8 ii stunnel4 [stunnel] 3:4.53-1 ii xcp-eliloader 0.1-4 ii xcp-fe 0.5.2-3+b1 ii xcp-networkd 1.3.2-8 ii xcp-squeezed 1.3.2-8 ii xcp-storage-managers 0.1.1-2 ii xcp-v6d 1.3.2-8 ii xcp-xe 1.3.2-8 ii xen-hypervisor-4.1-amd64 [xen-hypervi 4.1.3~rc1+hg-20120614.a9c0a89c08f2-4 ii xen-utils-4.1 4.1.3~rc1+hg-20120614.a9c0a89c08f2-4 ii zlib1g 1:1.2.7.dfsg-13 Versions of packages xcp-xapi recommends: ii cifs-utils 2:5.5-1 ii xcp-guest-templates 0.1-3 ii xcp-vncterm 0.1-2 xcp-xapi suggests no packages. -- Configuration Files: /etc/init.d/xcp-xapi changed: XAPI_INIT_COMPLETE_COOKIE=/var/run/xapi_init_complete.cookie XAPI_STARTUP_COOKIE=/var/run/xapi_startup.cookie PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="The XenAPI server" NAME=xapi DAEMON=/usr/sbin/$NAME DAEMON_ARGS="-daemon -writereadyfile $XAPI_STARTUP_COOKIE -writeinitcomplete $XAPI_INIT_COMPLETE_COOKIE -onsystemboot" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME TEMPLATES_MD5_STAMP=/var/lib/xcp/templates.md5 [ -x "$DAEMON" ] || exit 0 grep hypervisor /proc/cpuinfo > /dev/null || exit 0 [ -r /etc/default/$NAME ] && . /etc/default/$NAME [ -r /etc/default/xen ] && . /etc/default/xen . /lib/init/vars.sh . /lib/lsb/init-functions if [ "${TOOLSTACK}" != "xapi" ]; then log_failure_msg "Xen toolstack is not set to xapi! Exiting." exit 0 fi if [ -f /var/run/xend.pid ]; then log_failure_msg "/var/run/xend.pid exists; ${NAME} conflicts with xend" exit 1 fi wait_for_xapi() { MAX_RETRIES=50 RETRY=0 while [ ${RETRY} -lt ${MAX_RETRIES} ]; do if [ -e ${XAPI_STARTUP_COOKIE} ]; then return 0 fi sleep 1 RETRY=$(( ${RETRY} + 1 )) done return 1 } do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started modprobe xen-netback modprobe xen-blkback modprobe blktap mkdir -p /var/run/xend/boot mkdir -p /usr/share/xcp/packages/iso export OCAMLRUNPARAM=b rm -f $XAPI_STARTUP_COOKIE $XAPI_INIT_COMPLETE_COOKIE start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. wait_for_xapi # Do some standard setup, e.g. pif-scan, template creation (maybe) . /etc/xcp/inventory xe pif-scan host-uuid=${INSTALLATION_UUID} # Check whether the md5 of the create-templates binary matches the one # used previously. If not, recreate the templates. if [ -e /usr/lib/xcp/lib/create_templates ]; then if ! md5sum -c --status $TEMPLATES_MD5_STAMP ; then /usr/lib/xcp/lib/regenerate-templates start md5sum /usr/lib/xcp/lib/create_templates > $TEMPLATES_MD5_STAMP fi fi } do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac : /etc/xcp/pool.conf changed: slave:31.186.98.97 -- no debconf information _______________________________________________ Xen-api mailing list Xen-api@xxxxxxxxxxxxx http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |