From 6a7e20147cc39ed4689809ca7d674d3d408f2a17 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 8 Jun 2014 20:18:49 -0700 Subject: [PATCH] init-ceph: continue after failure doing osd data mount If we are starting many daemons and hit an error, we normally note it and move on. Do the same when doing the pre-mount step. Fixes: #8554 Signed-off-by: Sage Weil --- src/ceph_common.sh | 18 ++++++++++++++++++ src/init-ceph.in | 8 ++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/ceph_common.sh b/src/ceph_common.sh index 01781b75415..d78f831f5e8 100644 --- a/src/ceph_common.sh +++ b/src/ceph_common.sh @@ -137,6 +137,24 @@ do_root_cmd() { fi } +do_root_cmd_okfail() { + ERR=0 + if [ -z "$ssh" ]; then + [ $verbose -eq 1 ] && echo "--- $host# $1" + ulimit -c unlimited + whoami=`whoami` + if [ "$whoami" = "root" ]; then + bash -c "$1" || { [ -z "$3" ] && echo "failed: '$1'" && ERR=1 && return 1; } + else + sudo bash -c "$1" || { [ -z "$3" ] && echo "failed: '$1'" && ERR=1 && return 1; } + fi + else + [ $verbose -eq 1 ] && echo "--- $rootssh $2 \"if [ ! -d $sshdir ]; then mkdir -p $sshdir; fi; cd $sshdir ; ulimit -c unlimited ; $1\"" + $rootssh $2 "if [ ! -d $sshdir ]; then mkdir -p $sshdir; fi; cd $sshdir ; ulimit -c unlimited ; $1" || { [ -z "$3" ] && echo "failed: '$rootssh $1'" && ERR=1 && return 1; } + fi + return 0 +} + get_local_daemon_list() { type=$1 if [ -d "/var/lib/ceph/$type" ]; then diff --git a/src/init-ceph.in b/src/init-ceph.in index 666af0334a5..86eb87ffc22 100644 --- a/src/init-ceph.in +++ b/src/init-ceph.in @@ -311,10 +311,14 @@ for name in $what; do if [ "$fs_type" = "btrfs" ]; then echo Mounting Btrfs on $host:$fs_path - do_root_cmd "modprobe btrfs ; btrfs device scan || btrfsctl -a ; egrep -q '^[^ ]+ $fs_path' /proc/mounts || mount -t btrfs $fs_opt $first_dev $fs_path" + do_root_cmd_okfail "modprobe btrfs ; btrfs device scan || btrfsctl -a ; egrep -q '^[^ ]+ $fs_path' /proc/mounts || mount -t btrfs $fs_opt $first_dev $fs_path" else echo Mounting $fs_type on $host:$fs_path - do_root_cmd "modprobe $fs_type ; egrep -q '^[^ ]+ $fs_path' /proc/mounts || mount -t $fs_type $fs_opt $first_dev $fs_path" + do_root_cmd_okfail "modprobe $fs_type ; egrep -q '^[^ ]+ $fs_path' /proc/mounts || mount -t $fs_type $fs_opt $first_dev $fs_path" + fi + if [ "$ERR" != "0" ]; then + EXIT_STATUS=$ERR + continue fi fi