Package: drbd8-utils
Version: 2:8.3.7-2.1
Severity: normal

Hi,

We're experiencing some trouble with the drbd init script. Specifically the line
that starts $DRBDADM wait-con-int. If the peer is not available, this shows the
dialog explaining drbd is waiting to connect and if one wants to continue with
the booting, to enter the word "yes". However, after entering "yes", the boot
still doesn't continue.

This doesn't happen when the initscript is started from the commandline
afterwards. Commenting the line out helps, booting continues and drbd keeps
polling for the other host anyway.

I couldn't find a config option for this, so I think this might be a bug.

Kind regards,
Tim

-- System Information:
Debian Release: 6.0
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/4 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 drbd8-utils depends on:
ii  debconf [debconf-2.0]         1.5.36.1   Debian configuration management sy
ii  libc6                         2.11.2-10  Embedded GNU C Library: Shared lib

drbd8-utils recommends no packages.

Versions of packages drbd8-utils suggests:
ii  heartbeat                     1:3.0.3-2  Subsystem for High-Availability Li

-- Configuration Files:
/etc/drbd.d/global_common.conf changed:
global {
        usage-count yes;
        # minor-count dialog-refresh disable-ip-verification
}
common {
        protocol C;
        handlers {
                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; 
/usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot 
-f";
                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; 
/usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot 
-f";
                local-io-error "/usr/lib/drbd/notify-io-error.sh; 
/usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt 
-f";
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target 
"/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target 
/usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }
        startup {
                # wfc-timeout degr-wfc-timeout outdated-wfc-timeout 
wait-after-sb;
                wfc-timeout 10s;
                degr-wfc-timeout 10s;
                outdated-wfc-timeout 10s;
        }
        disk {
                # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes
                # no-disk-drain no-md-flushes max-bio-bvecs   
        }
        net {
                # snd‐buf-size rcvbuf-size timeout connect-int ping-int 
ping-timeout max-buffers
                # max-epoch-size ko-count allow-two-primaries cram-hmac-alg 
shared-secret
                # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg 
no-tcp-cork
        }
        syncer {
                # rate after al-extents use-rle cpu-mask verify-alg csums-alg
                rate 80M;
        }
}

/etc/init.d/drbd changed:
DEFAULTFILE="/etc/default/drbd"
DRBDADM="/sbin/drbdadm"
DRBDSETUP="/sbin/drbdsetup"
PROC_DRBD="/proc/drbd"
MODPROBE="/sbin/modprobe"
RMMOD="/sbin/rmmod"
UDEV_TIMEOUT=10
ADD_MOD_PARAM=""
if [ -f $DEFAULTFILE ]; then
  . $DEFAULTFILE
fi
test -f $DRBDADM || exit 5
log_daemon_msg() { echo -n "${1:-}: ${2:-}"; }
log_end_msg() { echo "."; }
if [ -f /lib/lsb/init-functions ]; then
    . /lib/lsb/init-functions
fi
function assure_module_is_loaded
{
    [ -e "$PROC_DRBD" ] && return
    $MODPROBE -s drbd `$DRBDADM sh-mod-parms` $ADD_MOD_PARAM || {
        echo "Can not load the drbd module."$'\n'; exit 20
    }
    # tell klogd to reload module symbol information ...
    [ -e /var/run/klogd.pid ] && [ -x /sbin/klogd ] && /sbin/klogd -i
}
function adjust_with_progress
{
    IFS_O=$IFS
    NEWLINE='
'
    IFS=$NEWLINE
    local res
    COMMANDS=`$DRBDADM -d -n res adjust all` || exit 20
    echo -n "[ "
    for CMD in $COMMANDS; do
        case "$CMD" in
                res=*)          eval "$CMD";;
                *\ disk\ *)     echo -n "d($res) " ;;
                *\ syncer\ *)   echo -n "s($res) " ;;
                *\ net\ *)      echo -n "n($res) " ;;
                *)              echo ".. " ;;
        esac
        if ! eval "$CMD"; then
            echo -e "\n[$res] cmd $CMD failed - continuing!\n "
        fi
    done
    echo -n "]"
    IFS=$IFS_O
}
drbd_pretty_status()
{
        local proc_drbd=$1
        # add resource names
        if ! type column &> /dev/null ||
           ! type paste &> /dev/null ||
           ! type join &> /dev/null ||
           ! type sed &> /dev/null ||
           ! type tr &> /dev/null
        then
                cat "$proc_drbd"
                return
        fi
        sed -e '2q' < "$proc_drbd"
        sed_script=$(
                i=0;
                _sh_status_process() {
                        let i++ ;
                        
stacked=${_stacked_on:+"^^${_stacked_on_minor:-${_stacked_on//[!a-zA-Z0-9_ 
-]/_}}"}
                        printf "s|^ *%u:|%6u\t&%s%s|\n" \
                                $_minor $i \
                                "${_res_name//[!a-zA-Z0-9_ -]/_}" "$stacked"
                };
                eval "$(drbdadm sh-status)" )
        p() {
                sed -e "1,2d" \
                      -e "$sed_script" \
                      -e '/^ *[0-9]\+: cs:Unconfigured/d;' \
                      -e 's/^\(.* cs:.*[^ ]\)   \([rs]...\)$/\1 - \2/g' \
                      -e 's/^\(.* \)cs:\([^ ]* \)st:\([^ ]* \)ds:\([^ 
]*\)/\1\2\3\4/' \
                      -e 's/^\(.* \)cs:\([^ ]* \)ro:\([^ ]* \)ds:\([^ 
]*\)/\1\2\3\4/' \
                      -e 's/^\(.* \)cs:\([^ ]*\)$/\1\2/' \
                      -e 's/^ *[0-9]\+:/ x &??not-found??/;' \
                      -e '/^$/d;/ns:.*nr:.*dw:/d;/resync:/d;/act_log:/d;' \
                      -e 's/^\(.\[.*\)\(sync.ed:\)/... ... \2/;/^.finish:/d;' \
                      -e 's/^\(.[0-9 %]*oos:\)/... ... \1/' \
                      < "$proc_drbd" | tr -s '\t ' '  ' 
        }
        m() {
                join -1 2 -2 1 -o 1.1,2.2,2.3 \
                        <( ( drbdadm sh-dev all ; drbdadm -S sh-dev all ) | cat 
-n | sort -k2,2) \
                        <(sort < /proc/mounts ) |
                        sort -n | tr -s '\t ' '  ' | sed -e 's/^ *//'
        }
        # echo "=== p ==="
        # p
        # echo "=== m ==="
        # m
        # echo "========="
        # join -a1 <(p|sort) <(m|sort)
        # echo "========="
        (
        echo m:res cs ro ds p mounted fstype
        join -a1 <(p|sort) <(m|sort) | cut -d' ' -f2-6,8- | sort -k1,1n -k2,2
        ) | column -t
}
case "$1" in
    start)
        # Just in case drbdadm want to display any errors in the configuration
        # file, or we need to ask the user about registering this installation
        # at http://usage.drbd.org, we call drbdadm here without any IO
        # redirection.
        $DRBDADM sh-nop
        log_daemon_msg "Starting DRBD resources"
        assure_module_is_loaded
        adjust_with_progress
        # make sure udev has time to create the device files
        for RESOURCE in `$DRBDADM sh-resources`; do
            for DEVICE in `$DRBDADM sh-dev $RESOURCE`; do
                UDEV_TIMEOUT_LOCAL=$UDEV_TIMEOUT
                while [ ! -e $DEVICE ] && [ $UDEV_TIMEOUT_LOCAL -gt 0 ] ; do
                    sleep 1
                UDEV_TIMEOUT_LOCAL=$(( $UDEV_TIMEOUT_LOCAL-1 ))
                done
            done
        done
        [ -d /var/lock/subsys ] && touch /var/lock/subsys/drbd  # for RedHat
        #$DRBDADM wait-con-int # User interruptible version of wait-connect all
        $DRBDADM sh-b-pri all # Become primary if configured
        log_end_msg 0
        ;;
    stop)
        $DRBDADM sh-nop
        log_daemon_msg "Stopping all DRBD resources"
        if [ -e $PROC_DRBD ] ; then
                # bypass drbdadm and drbd config file and everything,
                # to avoid leaving devices around that are not referenced by
                # the current config file, or in case the current config file
                # does not parse for some reason.
                for d in /dev/drbd* ; do
                        [ -L "$d" ] && continue
                        [ -b "$d" ] || continue
                        M=$(umount "$d" 2>&1)
                        case $M in
                        *" not mounted") :;;
                        *) echo "$M" >&2 ;;
                        esac
                        $DRBDSETUP "$d" down
                done
                $RMMOD drbd
        fi
        [ -f /var/lock/subsys/drbd ] && rm /var/lock/subsys/drbd
        log_end_msg 0
        ;;
    status)
        # NEEDS to be heartbeat friendly...
        # so: put some "OK" in the output.
        if [ -e $PROC_DRBD ]; then
            echo "drbd driver loaded OK; device status:"
            drbd_pretty_status $PROC_DRBD 2>/dev/null
            exit 0
        else
            echo >&2 "drbd not loaded"
            exit 3
        fi
        ;;
    reload)
        $DRBDADM sh-nop
        log_daemon_msg  "Reloading DRBD configuration"
        $DRBDADM adjust all
        log_end_msg 0
        ;;
    restart|force-reload)
        $DRBDADM sh-nop
        log_daemon_msg "Restarting all DRBD resources"
        $DRBDADM down all
        $RMMOD drbd
        assure_module_is_loaded
        $DRBDADM up all
        log_end_msg 0
        ;;
    *)
        echo "Usage: /etc/init.d/drbd 
{start|stop|status|reload|restart|force-reload}"
        exit 1
        ;;
esac
exit 0


-- no debconf information



--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to