daemon=$2
pidfile=$3
echo -n "Stopping ceph $name on $host..."
- while [ 1 ]; do
+ do_cmd "while [ 1 ]; do
[ -e $pidfile ] || break
pid=`cat $pidfile`
- while [ -e /proc/$pid ] && grep -q $daemon /proc/$pid/cmdline ; do
- cmd="kill $pid"
- [[ $host != $hostname ]] && cmd="ssh $host $cmd"
- echo -n $cmd...
- $cmd
+ while [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline ; do
+ cmd=\"kill \$pid\"
+ echo -n \$cmd...
+ \$cmd
sleep 1
continue
done
break
- done
+ done"
echo done
}
## command line options
options=
+version=0
dovalgrind=0
docrun=1
allhosts=0
while [[ $1 =~ '-' ]]; do # FIXME: why not '^-'?
case $1 in
+ -v | --verbose)
+ verbose=1
+ ;;
--valgrind)
dovalgrind=1
;;
--novalgrind)
dovalgrind=0
;;
- --allhosts)
+ --allhosts | -a)
allhosts=1;
;;
--restart)
num=`echo $name | cut -c 4-`
sections="$name $type global"
- # this host?
- host=`$CCONF --conf_file $conf -s $name -s $type -s global host`
- ssh=""
- cmd=""
- if [[ $host != "" ]]; then
- echo host for $name is $host, i am $hostname
- if [[ $host != $hostname ]]; then
- # skip, unless we're starting remote daemons too
- if [[ $allhosts -eq 0 ]]; then
- continue;
- fi
-
- # we'll need to ssh into that host
- ssh="ssh root@$host"
- cd_path=`$CCONF --conf_file $conf -s $name -s $type -s global "ssh path"`
- fi
- else
- host=$hostname
- fi
+ check_host || continue
get_conf pid_file "/var/run/ceph/$name.pid" "pid file" $sections
get_conf conf_file "$runtime_conf" "conf file" $sections
+
get_conf mon_addr "$monaddr" "mon addr" $sections
[ "$mon_addr" != "" ] && mon_addr_cmd="-m $mon_addr"
+
# extract name-specific options from $conf
if [[ $name =~ "mon" ]]; then
- get_conf mon_path "" "mon path" $sections
- module_opt="$mon_path"
+ get_conf mon_data "" "mon data" $sections
+ module_opt="$mon_data"
module_bin="$BINDIR/cmon"
fi
if [[ $name =~ "mds" ]]; then
- module_opt="--conf_file $conf_file $mon_addr_cmd"
+ module_opt="$mon_addr_cmd"
module_bin="$BINDIR/cmds"
fi
get_conf osd_data "" "osd data" $sections
get_conf osd_journal "" "osd journal" $sections
[ "$osd_journal" != "" ] && osd_journal_cmd="-j $osd_journal" || osd_journal_cmd=""
- module_opt="--conf_file $conf_file \
- $mon_addr_cmd $osd_data $osd_journal_cmd"
+ module_opt="$mon_addr_cmd $osd_data $osd_journal_cmd"
module_bin="$BINDIR/cosd"
fi
- # build final command
- wrap=""
- runflags="-d"
- runmode=""
-
- get_conf_bool crun "$docrun" "restart on core dump" $sections
- [[ $crun -eq 1 ]] && wrap="$BINDIR/crun"
-
- get_conf_bool valgrind "$dovalgrind" "valgrind" $sections
- echo valgrind=$valgrind
- [[ $valgrind -eq 1 ]] && wrap="$wrap valgrind"
-
- [[ $wrap != "" ]] && runflags="-f" && runmode="&"
-
- cmd="$ssh $wrap $module_bin $runflags $module_opt $runmode"
+ module_opt="-p $pid_file -c $conf_file $module_opt"
case "$command" in
start)
+ # build final command
+ wrap=""
+ runflags="-d"
+ runmode=""
+
+ get_conf_bool crun "$docrun" "restart on core dump" $sections
+ [[ $crun -eq 1 ]] && wrap="$BINDIR/crun"
+
+ get_conf_bool valgrind "$dovalgrind" "valgrind" $sections
+ [[ $valgrind -eq 1 ]] && wrap="$wrap valgrind"
+
+ [[ $wrap != "" ]] && runflags="-f" && runmode="&"
+
+ cmd="$wrap $module_bin $runflags $module_opt $runmode"
+
echo Starting ceph $name on $host...
- echo $cmd
- eval $cmd
+ do_cmd "$cmd"
;;
stop)
hostname=`hostname | cut -d . -f 1`
+check_host() {
+ # what host is this daemon assigned to?
+ host=`$CCONF -c $conf -s $name -s $type host`
+ ssh=""
+ dir=$PWD
+ if [[ $host != "" ]]; then
+ #echo host for $name is $host, i am $hostname
+ if [[ $host != $hostname ]]; then
+ # skip, unless we're starting remote daemons too
+ if [[ $allhosts -eq 0 ]]; then
+ return 1
+ fi
+
+ # we'll need to ssh into that host
+ ssh="ssh root@$host"
+ get_conf dir "$dir" "ssh path" $sections
+ fi
+ else
+ host=$hostname
+ fi
+
+ echo -n "=== $name === "
+
+ return 0
+}
+
+do_cmd() {
+ [[ $verbose = 1 ]] && echo "--- $host:$dir# $1"
+ if [[ $ssh = "" ]]; then
+ ulimit -c unlimited
+ bash -c "$1" || (echo failed. ; exit 1)
+ else
+ $ssh "cd $dir ; ulimit -c unlimited ; $1" || (echo failed. ; exit 1)
+ fi
+}
+
get_name_list() {
orig=$1
--- /dev/null
+[global]
+ pid file = /home/sage/ceph/src/out/$name.pid
+ restart on core dump = false
+ conf file = cosdruntime.conf
+
+[mon]
+[mon0]
+ mon addr = 10.3.14.95:6789
+ mon data = /home/sage/ceph/src/mondata/mon$num
+
+[osd]
+[osd0]
+ host = cosd1
+ osd data = devm/osd0
+ btrfs devs = /dev/disk/by-path/pci-0000:05:01.0-scsi-2:0:0:0
+ btrfs path = devm/osd0
+[osd4]
+ host = cosd2
+ osd data = devm/osd4
+ btrfs devs = /dev/disk/by-path/pci-0000:05:01.0-scsi-2:0:0:0
+
+[osd9]
+ host = cosd3
+ osd data = devm/osd9
+ btrfs devs = /dev/disk/by-path/pci-0000:05:01.0-scsi-3:0:0:0
+[osd13]
+ host = cosd4
+ osd data = devm/osd13
+ btrfs devs = /dev/disk/by-path/pci-0000:05:01.0-scsi-3:0:0:0
+[osd17]
+ host = cosd5
+ osd data = devm/osd17
+ btrfs devs = /dev/disk/by-path/pci-0000:05:01.0-scsi-3:0:0:0
+
+[mds0]
\ No newline at end of file
--- /dev/null
+; runtime options
+
+[global]
+ logger dir = /home/sage/ceph/src/log
+ dout dir = /home/sage/ceph/src/out
+ dout sym dir = /home/sage/ceph/src/out
+ monmap file = /home/sage/ceph/src/mondata/mon0/monmap/1
+ chdir root = false
+
while [ $# -ge 1 ]; do
case $1 in
- --allhosts)
+ --allhosts | -a)
allhosts=1
;;
--clobber_old_data)
num=`echo $name | cut -c 4-`
sections="$name $type global"
- # what host is this daemon assigned to?
- host=`$CCONF -c $conf -s $name -s $type host`
- ssh=""
- if [[ $host != "" ]]; then
- #echo host for $name is $host, i am $hostname
- if [[ $host != $hostname ]]; then
- # skip, unless we're starting remote daemons too
- if [[ $allhosts -eq 0 ]]; then
- continue;
- fi
-
- # we'll need to ssh into that host
- ssh="ssh root@$host"
- fi
- else
- host=$hostname
- fi
+ check_host || continue
get_conf conf_file "$runtime_conf" "conf file" $sections
+ if [[ $ssh = 1 ]] && [[ ! $pushed_to =~ " $host " ]]; then
+ scp $osdmap $host:$osdmap
+ scp $monmap $host:$monmap
+ pushed_to="$pushed_to $host "
+ fi
+
if [[ $type = "mon" ]]; then
- get_conf mon_path "" "mon data" $sections
- $BINDIR/mkmonfs -c $conf_file $clobber $mon_path --mon $num \
- --monmap $monmap --osdmap $osdmap || exit 1
+ get_conf mon_data "" "mon data" $sections
+ do_cmd "$BINDIR/mkmonfs $clobber $mon_data --mon $num --monmap $monmap --osdmap $osdmap"
fi
if [[ $type = "osd" ]]; then
get_conf osd_path "" "osd data" $sections
+ get_conf btrfs_path "$osd_path" "btrfs path" $sections # mount point defaults so osd path
+ get_conf btrfs_devs "" "btrfs devs" $sections
+ first_dev=`echo $btrfs_devs | cut '-d ' -f 1`
+
+ if [ $mkbtrfs -eq 1 ]; then
+ do_cmd "modprobe btrfs ; umount $btrfs_path ; mkfs.btrfs $btrfs_devs ; mount -t btrfs $first_dev $btrfs_path"
+ fi
+
[[ $ssh != "" ]] && scp $monmap $host:$monmap
- $ssh $BINDIR/cosd -c $conf_file --monmap_file $monmap \
- --mkfs_for_osd $num $osd_path || exit 1
+ do_cmd "$BINDIR/cosd -c $conf_file --monmap_file $monmap --mkfs_for_osd $num $osd_path"
fi
done