]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
initscripts: make mkcephfs and initscript behave on cosd*
authorSage Weil <sage@newdream.net>
Sun, 1 Mar 2009 00:06:27 +0000 (16:06 -0800)
committerSage Weil <sage@newdream.net>
Sun, 1 Mar 2009 00:06:27 +0000 (16:06 -0800)
src/ceph-daemons
src/ceph_common.sh
src/cosd.conf [new file with mode: 0644]
src/cosdruntime.conf [new file with mode: 0644]
src/mkcephfs

index ddc7793a187939f8c0bf81f8954f5577a8057ac0..feb2bb3f4ef5d249397894a603d7a976d87f5c5a 100755 (executable)
@@ -27,25 +27,25 @@ stop_daemon() {
     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
@@ -54,13 +54,16 @@ monaddr=
 
 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)
@@ -100,39 +103,23 @@ for name in $what; do
     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
 
@@ -140,32 +127,31 @@ for name in $what; do
        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)
index 28508187ace27fc1196e143d2c3c09026e575598..58e517b3f04835e340b9f275338d013d15d8b552 100644 (file)
@@ -7,6 +7,42 @@ runtime_conf=$ETCDIR"/ceph.conf"
 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
 
diff --git a/src/cosd.conf b/src/cosd.conf
new file mode 100644 (file)
index 0000000..38c76de
--- /dev/null
@@ -0,0 +1,35 @@
+[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
diff --git a/src/cosdruntime.conf b/src/cosdruntime.conf
new file mode 100644 (file)
index 0000000..67c97f9
--- /dev/null
@@ -0,0 +1,9 @@
+; 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
+
index 27e1898a8afb9b319f596887694f5aa9a6999b04..bc4aaf84f7042ad2dbf1304f0b6d8fecdac4f455 100755 (executable)
@@ -26,7 +26,7 @@ numosd=
 
 while [ $# -ge 1 ]; do
 case $1 in
-    --allhosts)
+    --allhosts | -a)
            allhosts=1
            ;;
     --clobber_old_data)
@@ -84,37 +84,33 @@ for name in $what; do
     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