]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph.sh: startup script that uses conf file
authorYehuda Sadeh <yehuda@hq.newdream.net>
Thu, 29 Jan 2009 21:55:33 +0000 (13:55 -0800)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Thu, 29 Jan 2009 21:55:33 +0000 (13:55 -0800)
src/cconf.cc
src/ceph.sh [new file with mode: 0755]
src/config.cc
src/config.h

index 6112f8aec6add520397065a0e8f5a8c40ef46ac4..736002fed2f3bbd78955dfc664f739684b6cb01c 100644 (file)
@@ -65,7 +65,7 @@ int main(int argc, const char **argv)
     usage();
 
   ConfFile cf(fname);
-  cf.parse();
+  parse_config_file(&cf, true);
 
   for (unsigned i=0; i<sections.size(); i++) {
     cf.read(sections[i], key, (char **)&val, NULL);
diff --git a/src/ceph.sh b/src/ceph.sh
new file mode 100755 (executable)
index 0000000..d712735
--- /dev/null
@@ -0,0 +1,222 @@
+#!/bin/bash
+
+
+[ "$CCONF_BIN" == "" ] && CCONF_BIN=`dirname $0`/cconf
+
+get_val() {
+  if [ "$2" != "" ]; then
+       export $1=$2
+  else
+       export $1=`$CCONF "$3" "$4" "$5"`
+  fi
+}
+
+get_val_bool() {
+  if [ "$2" != "" ]; then
+       export $1=$2
+  else
+       tmp=`$CCONF "$3" "$4" "$5"`
+       export $1=$5
+
+       [ "$tmp" == "0" ] && export $1=0
+       [ "$tmp" == "false" ] && export $1=0
+       [ "$tmp" == "1" ] && export $1=1
+       [ "$tmp" == "true" ] && export $1=1
+  fi
+}
+
+get_conf() {
+       var=$1
+       def=$2
+       key=$3
+       shift; shift; shift
+
+       tmp=""
+       while [ $# -ge 1 ]; do
+               tmp=$tmp" -s $1"
+       shift
+       done
+       eval $var=`$CCONF $tmp "$key" "$def"`
+}
+
+get_conf_bool() {
+       get_conf $*
+
+       eval "val=$"$1
+       [ "$val" == "0" ] && export $1=0
+       [ "$val" == "false" ] && export $1=0
+       [ "$val" == "1" ] && export $1=1
+       [ "$val" == "true" ] && export $1=1
+}
+
+let debug=0
+let start_all=1
+let start_mon=0
+let start_mds=0
+let start_osd=0
+let localhost=0
+norestart=""
+valgrind=""
+MON_ADDR=""
+
+usage="usage: $0 [option]... [mon] [mds] [osd]\n"
+usage=$usage"options:\n"
+usage=$usage"\t-d, --debug\n"
+usage=$usage"\t--norestart\n"
+usage=$usage"\t--valgrind\n"
+usage=$usage"\t-m ip:port\t\tspecify monitor address\n"
+usage=$usage"\t--conf_file filename\n"
+
+usage_exit() {
+       printf "$usage"
+       exit
+}
+
+while [ $# -ge 1 ]; do
+case $1 in
+       -d | --debug )
+       debug=1
+       ;;
+        -l | --localhost )
+       localhost=1
+       ;;
+       --norestart )
+       norestart="--norestart"
+       ;;
+       --valgrind )
+       valgrind="--valgrind"
+       ;;
+       mon | cmon )
+       start_mon=1
+       start_all=0
+       ;;
+       mds | cmds )
+       start_mds=1
+       start_all=0
+       ;;
+       osd | cosd )
+       start_osd=1
+       start_all=0
+       ;;
+       -m )
+       [ "$2" == "" ] && usage_exit
+       MON_ADDR=$2
+       shift
+       ;;
+       --conf_file )
+       [ "$2" == "" ] && usage_exit
+       startup_conf_file=$2
+       shift
+       ;;
+       * )
+       usage_exit
+esac
+shift
+done
+
+[ "$startup_conf_file" == "" ] && startup_conf_file="startup.conf"
+CCONF="$CCONF_BIN --conf_file $startup_conf_file"
+
+if [ $start_all -eq 1 ]; then
+       start_mon=1
+       start_mds=1
+       start_osd=1
+fi
+
+get_val CEPH_NUM_MON "$CEPH_NUM_MON" global num_mon 3
+get_val CEPH_NUM_OSD "$CEPH_NUM_OSD" global "osd num" 1
+get_val CEPH_NUM_MDS "$CEPH_NUM_MDS" global num_mds 3
+
+ARGS="-f"
+
+if [ $debug -eq 0 ]; then
+       CMON_ARGS="--debug_mon 10 --debug_ms 1"
+       COSD_ARGS=""
+       CMDS_ARGS="--debug_ms 1"
+else
+       echo "** going verbose **"
+       CMON_ARGS="--lockdep 1 --debug_mon 20 --debug_ms 1 --debug_paxos 20"
+       COSD_ARGS="--lockdep 1 --debug_osd 25 --debug_journal 20 --debug_filestore 10 --debug_ms 1" # --debug_journal 20 --debug_osd 20 --debug_filestore 20 --debug_ebofs 20
+       CMDS_ARGS="--lockdep 1 --mds_cache_size 500 --mds_log_max_segments 2 --debug_ms 1 --debug_mds 20 --mds_thrash_fragments 0 --mds_thrash_exports 1"
+fi
+
+get_val MON_ADDR "$MON_ADDR" global mon_addr 3
+
+if [ "$MON_ADDR" != "" ]; then
+       CMON_ARGS=$CMON_ARGS" -m "$MON_ADDR
+       COSD_ARGS=$COSD_ARGS" -m "$MON_ADDR
+       CMDS_ARGS=$CMDS_ARGS" -m "$MON_ADDR
+fi
+
+
+# lockdep everywhere?
+# export CEPH_ARGS="--lockdep 1"
+
+
+if [ $start_all -eq 1 ]; then
+       $SUDO ./stop.sh
+fi
+$SUDO rm -f core*
+
+test -d out || mkdir out
+$SUDO rm -f out/*
+test -d gmon && $SUDO rm -rf gmon/*
+
+
+# figure machine's ip
+if [ $localhost -eq 1 ]; then
+    IP="127.0.0.1"
+else
+    HOSTNAME=`hostname`
+    echo hostname $HOSTNAME
+    IP=`host $HOSTNAME | grep 'has address' | cut -d ' ' -f 4`
+fi
+echo "ip $IP"
+
+[ "$CEPH_BIN" == "" ] && CEPH_BIN=.
+[ "$CEPH_PORT" == "" ] && CEPH_PORT=6789
+
+#mon
+if [ $start_mon -eq 1 ]; then
+       for f in `seq 0 $((CEPH_NUM_MON-1))`; do
+               get_conf mon_data_path mondata "mon data path" mon$mon mon global
+               get_conf mon_data_file mon$mon "mon data file" mon$mon mon global
+               get_conf conf_file $startup_conf_file "conf file" mon$mon mon global
+
+               $CEPH_BIN/crun $norestart $valgrind $CEPH_BIN/cmon $ARGS $CMON_ARGS $mon_data_path/$mon_data_file &
+       done
+       sleep 1
+fi
+
+#osd
+if [ $start_osd -eq 1 ]; then
+       for osd in `seq 0 $((CEPH_NUM_OSD-1))`
+       do
+               get_conf_bool use_sudo 0 sudo osd$osd osd global
+               get_conf osd_dev dev/osd$osd "osd dev" osd$osd osd global
+               get_conf conf_file $startup_conf_file "conf file" osd$osd osd global
+               get_conf CEPH_PORT $CEPH_PORT "mon port" osd$osd osd global
+               get_conf CEPH_HOST $IP "mon host" osd$osd osd global
+
+               SUDO=""
+               [ "$use_sudo" != "0" ] && SUDO="sudo"
+
+               echo start osd$osd
+               $CEPH_BIN/crun $norestart $valgrind $SUDO $CEPH_BIN/cosd --conf_file $conf_file \
+                       -m $CEPH_HOST:$CEPH_PORT $osd_dev $ARGS $COSD_ARGS &
+       done
+fi
+
+# mds
+if [ $start_mds -eq 1 ]; then
+       for mds in `seq 0 $((CEPH_NUM_MDS-1))`
+       do
+               get_conf conf_file $startup_conf_file "conf file" mds$mds mds global
+               $CEPH_BIN/crun $norestart $valgrind $CEPH_BIN/cmds --conf_file $conf_file \
+                       -m $CEPH_HOST:$CEPH_PORT $ARGS $CMDS_ARGS &
+       done
+       $CEPH_BIN/ceph mds set_max_mds $CEPH_NUM_MDS
+fi
+
+echo "started. stop.sh to stop.  see out/* (e.g. 'tail -f out/????') for debug output."
+
index d8ed118cf473913f5b95a76c37f86201022e5fac..e5307a66a4a3a3bff30c9ae911150f5d9ba178c1 100644 (file)
@@ -604,250 +604,245 @@ void sighup_handler(int signum)
 
 
 #define CF_READ(section, var, inout) \
-  cf.read(section, var, &g_conf.inout, g_conf.inout)
+  cf->read(section, var, &g_conf.inout, g_conf.inout)
 
 #define CF_READ_TYPE(section, var, type, inout) \
-  cf.read(section, var, (type *)&g_conf.inout, (type)g_conf.inout)
+  cf->read(section, var, (type *)&g_conf.inout, (type)g_conf.inout)
 
 #define CF_READ_STR(section, var, inout) \
-  cf.read(section, var, (char **)&g_conf.inout, (char *)g_conf.inout)
+  cf->read(section, var, (char **)&g_conf.inout, (char *)g_conf.inout)
 
-void parse_config_file(const char *fname, bool dump_conf)
+void parse_config_file(ConfFile *cf, bool auto_update)
 {
-  ConfFile cf(fname);
+  cf->set_auto_update(true);
 
-  cf.set_auto_update(dump_conf);
+  cf->parse();
 
-  cf.parse();
-
-  CF_READ("global", "num_mon", num_mon);
-  CF_READ("global", "num_mds", num_mds);
-  CF_READ("global", "num_osd", num_osd);
+  CF_READ("global", "num mon", num_mon);
+  CF_READ("global", "num mds", num_mds);
+  CF_READ("global", "num osd", num_osd);
   CF_READ("global", "mkfs", mkfs);
   CF_READ("global", "daemonize", daemonize);
-  CF_READ("global", "file_logs", file_logs);
+  CF_READ("global", "file logs", file_logs);
   CF_READ("global", "log", log);
-  CF_READ("global", "log_interval", log_interval);
-  CF_READ_STR("global", "log_name", log_name);
-  CF_READ("global", "log_messages", log_messages);
-  CF_READ("global", "log_pins", log_pins);
-  CF_READ_STR("global", "dout_dir", dout_dir);
-  CF_READ_STR("global", "dout_sym_dir", dout_sym_dir);
+  CF_READ("global", "log interval", log_interval);
+  CF_READ_STR("global", "log name", log_name);
+  CF_READ("global", "log messages", log_messages);
+  CF_READ("global", "log pins", log_pins);
+  CF_READ_STR("global", "dout dir", dout_dir);
+  CF_READ_STR("global", "dout sym dir", dout_sym_dir);
 
   CF_READ("debug", "debug", debug);
-  CF_READ("debug", "debug_lockdep", debug_lockdep);
-  CF_READ("debug", "debug_mds", debug_mds);
-  CF_READ("debug", "debug_mds_balancer", debug_mds_balancer);
-  CF_READ("debug", "debug_mds_log_expire", debug_mds_log_expire);
-  CF_READ("debug", "debug_buffer", debug_buffer);
-  CF_READ("debug", "debug_filer", debug_filer);
-  CF_READ("debug", "debug_journaler", debug_journaler);
-  CF_READ("debug", "debug_client", debug_client);
-  CF_READ("debug", "debug_ebofs", debug_ebofs);
-  CF_READ("debug", "debug_journal", debug_journal);
-  CF_READ("debug", "debug_ns", debug_ns);
-  CF_READ("debug", "debug_mon", debug_mon);
-  CF_READ("debug", "debug_tp", debug_tp);
-  CF_READ("debug", "use_abspaths", use_abspaths);
-
-  CF_READ("clock", "clock_lock", clock_lock);
-  CF_READ("clock", "clock_tare", clock_tare);
-
-  CF_READ("messenger", "ms_tcp_nodelay", ms_tcp_nodelay);
-  CF_READ("messenger", "ms_retry_interval", ms_retry_interval);
-  CF_READ("messenger", "ms_fail_interval", ms_fail_interval);
-  CF_READ("messenger", "ms_die_on_failure", ms_die_on_failure);
-  CF_READ("messenger", "ms_stripe_osds", ms_stripe_osds);
-  CF_READ("messenger", "ms_skip_rank0", ms_skip_rank0);
-  CF_READ("messenger", "ms_overlay_clients", ms_overlay_clients);
-  CF_READ("messenger", "ms_no_crc", ms_nocrc);
-
-  CF_READ("mon", "mon_tick_interval", mon_tick_interval);
-  CF_READ("mon", "mon_osd_down_out_interval", mon_osd_down_out_interval);
-  CF_READ("mon", "mon_lease", mon_lease);
-  CF_READ("mon", "mon_lease_renew_interval", mon_lease_renew_interval);
-  CF_READ("mon", "mon_lease_ack_timeout", mon_lease_ack_timeout);
-  CF_READ("mon", "mon_lease_timeout", mon_lease_timeout);
-  CF_READ("mon", "mon_accept_timeout", mon_accept_timeout);
-  CF_READ("mon", "mon_stop_on_last_unmount", mon_stop_on_last_unmount);
-  CF_READ("mon", "mon_stop_with_last_mds", mon_stop_with_last_mds);
-  CF_READ("mon", "mon_allow_mds_bully", mon_allow_mds_bully);
-  CF_READ("mon", "mon_pg_create_interval", mon_pg_create_interval);
-
-  CF_READ("paxos", "paxos_propose_interval", paxos_propose_interval);
-  CF_READ("paxos", "paxos_observer_timeout", paxos_observer_timeout);
-
-  CF_READ("client", "client_cache_size", client_cache_size);
-  CF_READ("client", "client_cache_mid", client_cache_mid);
-  CF_READ("client", "client_cache_stat_ttl", client_cache_stat_ttl);
-  CF_READ("client", "client_cache_readdir_ttl", client_cache_readdir_ttl);
-  CF_READ("client", "client_use_random_mds", client_use_random_mds);
-  CF_READ("client", "client_mount_timeout", client_mount_timeout);
-  CF_READ("client", "client_tick_interval", client_tick_interval);
-  CF_READ("client", "client_hack_balance_reads", client_hack_balance_reads);
-  CF_READ_STR("client", "client_trace", client_trace);
-  CF_READ_TYPE("client", "client_readahead_min", long long, client_readahead_min);
-  CF_READ_TYPE("client", "client_readahead_max_bytes", long long, client_readahead_max_bytes);
-  CF_READ_TYPE("client", "client_readahead_max_periods", long long, client_readahead_max_periods);
-  CF_READ_STR("client", "client_snapdir", client_snapdir);
-
-  CF_READ("fuse", "fuse_direct_io", fuse_direct_io);
+  CF_READ("debug", "lockdep", debug_lockdep);
+  CF_READ("debug", "mds", debug_mds);
+  CF_READ("debug", "mds balancer", debug_mds_balancer);
+  CF_READ("debug", "mds log expire", debug_mds_log_expire);
+  CF_READ("debug", "buffer", debug_buffer);
+  CF_READ("debug", "filer", debug_filer);
+  CF_READ("debug", "journaler", debug_journaler);
+  CF_READ("debug", "client", debug_client);
+  CF_READ("debug", "ebofs", debug_ebofs);
+  CF_READ("debug", "journal", debug_journal);
+  CF_READ("debug", "ns", debug_ns);
+  CF_READ("debug", "mon", debug_mon);
+  CF_READ("debug", "tp", debug_tp);
+  CF_READ("debug", "use abspaths", use_abspaths);
+
+  CF_READ("clock", "lock", clock_lock);
+  CF_READ("clock", "tare", clock_tare);
+
+  CF_READ("messenger", "tcp nodelay", ms_tcp_nodelay);
+  CF_READ("messenger", "retry interval", ms_retry_interval);
+  CF_READ("messenger", "fail interval", ms_fail_interval);
+  CF_READ("messenger", "die on failure", ms_die_on_failure);
+  CF_READ("messenger", "stripe osds", ms_stripe_osds);
+  CF_READ("messenger", "skip rank0", ms_skip_rank0);
+  CF_READ("messenger", "overlay clients", ms_overlay_clients);
+  CF_READ("messenger", "no crc", ms_nocrc);
+
+  CF_READ("mon", "tick interval", mon_tick_interval);
+  CF_READ("mon", "osd down out interval", mon_osd_down_out_interval);
+  CF_READ("mon", "lease", mon_lease);
+  CF_READ("mon", "lease renew interval", mon_lease_renew_interval);
+  CF_READ("mon", "lease ack timeout", mon_lease_ack_timeout);
+  CF_READ("mon", "lease timeout", mon_lease_timeout);
+  CF_READ("mon", "accept timeout", mon_accept_timeout);
+  CF_READ("mon", "stop on last unmount", mon_stop_on_last_unmount);
+  CF_READ("mon", "stop with last mds", mon_stop_with_last_mds);
+  CF_READ("mon", "allow mds bully", mon_allow_mds_bully);
+  CF_READ("mon", "pg create interval", mon_pg_create_interval);
+
+  CF_READ("paxos", "propose interval", paxos_propose_interval);
+  CF_READ("paxos", "observer timeout", paxos_observer_timeout);
+
+  CF_READ("client", "cache size", client_cache_size);
+  CF_READ("client", "cache mid", client_cache_mid);
+  CF_READ("client", "cache stat ttl", client_cache_stat_ttl);
+  CF_READ("client", "cache readdir ttl", client_cache_readdir_ttl);
+  CF_READ("client", "use random mds", client_use_random_mds);
+  CF_READ("client", "mount timeout", client_mount_timeout);
+  CF_READ("client", "tick interval", client_tick_interval);
+  CF_READ("client", "hack balance reads", client_hack_balance_reads);
+  CF_READ_STR("client", "trace", client_trace);
+  CF_READ_TYPE("client", "readahead min", long long, client_readahead_min);
+  CF_READ_TYPE("client", "readahead max bytes", long long, client_readahead_max_bytes);
+  CF_READ_TYPE("client", "readahead max periods", long long, client_readahead_max_periods);
+  CF_READ_STR("client", "snapdir", client_snapdir);
+
+  CF_READ("fuse", "direct io", fuse_direct_io);
   CF_READ("fuse", "fuse_ll", fuse_ll);
 
-  CF_READ("client_oc", "client_oc", client_oc);
-  CF_READ("client_oc", "client_oc_size", client_oc_size);
-  CF_READ("client_oc", "client_oc_max_dirty", client_oc_max_dirty);
-  CF_READ("client_oc", "client_oc_target_dirty", client_oc_target_dirty);
-  CF_READ_TYPE("client_oc", "client_oc_max_sync_write", unsigned long long, client_oc_max_sync_write);
-
-  CF_READ("objecter", "objecter_buffer_uncommitted", objecter_buffer_uncommitted);
-  CF_READ("objecter", "objecter_map_request_interval", objecter_map_request_interval);
-  CF_READ("objecter", "objecter_tick_interval", objecter_tick_interval);
-  CF_READ("objecter", "objecter_timeout", objecter_timeout);
-
-  CF_READ("journaler", "journaler_allow_split_entries", journaler_allow_split_entries);
-  CF_READ("journaler", "journaler_safe", journaler_safe);
-  CF_READ("journaler", "journaler_write_head_interval", journaler_write_head_interval);
-  CF_READ("journaler", "journaler_cache", journaler_cache);
-  CF_READ("journaler", "journaler_prefetch_periods", journaler_prefetch_periods);
-  CF_READ("journaler", "journaler_batch_interval", journaler_batch_interval);
-  CF_READ_TYPE("journaler", "journaler_batch_max", unsigned long long, journaler_batch_max);
-
-  CF_READ("mds", "mds_cache_size", mds_cache_size);
-  CF_READ("mds", "mds_cache_mid", mds_cache_mid);
-  CF_READ("mds", "mds_decay_halflife", mds_decay_halflife);
-  CF_READ("mds", "mds_beacon_interval", mds_beacon_interval);
-  CF_READ("mds", "mds_beacon_grace", mds_beacon_grace);
-  CF_READ("mds", "mds_blacklist_interval", mds_blacklist_interval);
-  CF_READ("mds", "mds_session_timeout", mds_session_timeout);
-  CF_READ("mds", "mds_session_autoclose", mds_session_autoclose);
-  CF_READ("mds", "mds_client_lease", mds_client_lease);
-  CF_READ("mds", "mds_reconnect_timeout", mds_reconnect_timeout);
-  CF_READ("mds", "mds_tick_interval", mds_tick_interval);
-  CF_READ("mds", "mds_scatter_nudge_interval", mds_scatter_nudge_interval);
-  CF_READ("mds", "mds_client_prealloc_inos", mds_client_prealloc_inos);
-  CF_READ("mds", "mds_early_reply", mds_early_reply);
-  CF_READ("mds", "mds_log", mds_log);
-  CF_READ("mds", "mds_log_max_events", mds_log_max_events);
-  CF_READ("mds", "mds_log_max_segments", mds_log_max_segments);
-  CF_READ("mds", "mds_log_max_expiring", mds_log_max_expiring);
-  CF_READ("mds", "mds_log_pad_entry", mds_log_pad_entry);
-  CF_READ("mds", "mds_log_eopen_size", mds_log_eopen_size);
-  CF_READ("mds", "mds_bal_sample_interval", mds_bal_sample_interval);
-  CF_READ("mds", "mds_bal_replicate_threshold", mds_bal_replicate_threshold);
-  CF_READ("mds", "mds_bal_unreplicate_threshold", mds_bal_unreplicate_threshold);
-  CF_READ("mds", "mds_bal_frag", mds_bal_frag);
-  CF_READ("mds", "mds_bal_split_size", mds_bal_split_size);
-  CF_READ("mds", "mds_bal_split_rd", mds_bal_split_rd);
-  CF_READ("mds", "mds_bal_split_wr", mds_bal_split_wr);
-  CF_READ("mds", "mds_bal_merge_size", mds_bal_merge_size);
-  CF_READ("mds", "mds_bal_merge_rd", mds_bal_merge_rd);
-  CF_READ("mds", "mds_bal_merge_wr", mds_bal_merge_wr);
-  CF_READ("mds", "mds_bal_interval", mds_bal_interval);
-  CF_READ("mds", "mds_bal_fragment_interval", mds_bal_fragment_interval);
-  CF_READ("mds", "mds_bal_idle_threshold", mds_bal_idle_threshold);
-  CF_READ("mds", "mds_bal_max", mds_bal_max);
-  CF_READ("mds", "mds_bal_max_until", mds_bal_max_until);
-  CF_READ("mds", "mds_bal_mode", mds_bal_mode);
-  CF_READ("mds", "mds_bal_min_rebalance", mds_bal_min_rebalance);
-  CF_READ("mds", "mds_bal_min_start", mds_bal_min_start);
-  CF_READ("mds", "mds_bal_need_min", mds_bal_need_min);
-  CF_READ("mds", "mds_bal_need_max", mds_bal_need_max);
-  CF_READ("mds", "mds_bal_midchunk", mds_bal_midchunk);
-  CF_READ("mds", "mds_bal_minchunk", mds_bal_minchunk);
-  CF_READ("mds", "mds_trim_on_rejoin", mds_trim_on_rejoin);
-  CF_READ("mds", "mds_shutdown_check", mds_shutdown_check);
-  CF_READ("mds", "mds_verify_export_dirauth", mds_verify_export_dirauth);
-  CF_READ("mds", "mds_local_osd", mds_local_osd);
-  CF_READ("mds", "mds_thrash_exports", mds_thrash_exports);
-  CF_READ("mds", "mds_thrash_fragments", mds_thrash_fragments);
-  CF_READ("mds", "mds_dump_cache_on_map", mds_dump_cache_on_map);
-  CF_READ("mds", "mds_dump_cache_after_rejoin", mds_dump_cache_after_rejoin);
-  CF_READ("mds", "mds_hack_log_expire_for_better_stats", mds_hack_log_expire_for_better_stats);
-
-  CF_READ("osd", "osd_rep", osd_rep);
-  CF_READ("osd", "osd_balance_reads", osd_balance_reads);
-  CF_READ("osd", "osd_flash_crowd_iat_threshold", osd_flash_crowd_iat_threshold);
-  CF_READ("osd", "osd_flash_crowd_iat_alpha", osd_flash_crowd_iat_alpha);
-  CF_READ("osd", "osd_balance_reads_temp", osd_balance_reads_temp);
-  CF_READ("osd", "osd_shed_reads", osd_shed_reads);
-  CF_READ("osd", "osd_shed_reads_min_latency", osd_shed_reads_min_latency);
-  CF_READ("osd", "osd_shed_reads_min_latency_diff", osd_shed_reads_min_latency_diff);
-  CF_READ("osd", "osd_shed_reads_min_latency_ratio", osd_shed_reads_min_latency_ratio);
-  CF_READ("osd", "osd_immediate_read_from_cache", osd_immediate_read_from_cache);
-  CF_READ("osd", "osd_exclusive_caching", osd_exclusive_caching);
-  CF_READ("osd", "osd_stat_refresh_interval", osd_stat_refresh_interval);
-  CF_READ("osd", "osd_min_pg_size_without_alive", osd_min_pg_size_without_alive);
-  CF_READ("osd", "osd_pg_bits", osd_pg_bits);
-  CF_READ("osd", "osd_lpg_bits", osd_lpg_bits);
-  CF_READ("osd", "osd_object_layout", osd_object_layout);
-  CF_READ("osd", "osd_pg_layout", osd_pg_layout);
-  CF_READ("osd", "osd_min_rep", osd_min_rep);
-  CF_READ("osd", "osd_max_rep", osd_max_rep);
-  CF_READ("osd", "osd_min_raid_width", osd_min_raid_width);
-  CF_READ("osd", "osd_max_raid_width", osd_max_raid_width);
-  CF_READ("osd", "osd_maxthreads", osd_maxthreads);
-  CF_READ("osd", "osd_max_opq", osd_max_opq);
-  CF_READ("osd", "osd_mkfs", osd_mkfs);
-  CF_READ("osd", "osd_age", osd_age);
-  CF_READ("osd", "osd_age_time", osd_age_time);
-  CF_READ("osd", "osd_heartbeat_interval", osd_heartbeat_interval);
-  CF_READ("osd", "osd_mon_heartbeat_interval", osd_mon_heartbeat_interval);
-  CF_READ("osd", "osd_heartbeat_grace", osd_heartbeat_grace);
-  CF_READ("osd", "osd_mon_report_interval", osd_mon_report_interval);
-  CF_READ("osd", "osd_replay_window", osd_replay_window);
-  CF_READ("osd", "osd_max_pull", osd_max_pull);
-  CF_READ("osd", "osd_preserve_trimmed_log", osd_preserve_trimmed_log);
-  CF_READ("osd", "osd_recovery_delay_start", osd_recovery_delay_start);
-  CF_READ("osd", "osd_recovery_max_active", osd_recovery_max_active);
-  CF_READ("osd", "osd_auto_weight", osd_auto_weight);
+  CF_READ("client oc", "oc", client_oc);
+  CF_READ("client oc", "oc size", client_oc_size);
+  CF_READ("client oc", "oc max dirty", client_oc_max_dirty);
+  CF_READ("client oc", "oc target dirty", client_oc_target_dirty);
+  CF_READ_TYPE("client oc", "oc max sync write", unsigned long long, client_oc_max_sync_write);
+
+  CF_READ("objecter", "buffer uncommitted", objecter_buffer_uncommitted);
+  CF_READ("objecter", "map request interval", objecter_map_request_interval);
+  CF_READ("objecter", "tick interval", objecter_tick_interval);
+  CF_READ("objecter", "timeout", objecter_timeout);
+
+  CF_READ("journaler", "allow split entries", journaler_allow_split_entries);
+  CF_READ("journaler", "safe", journaler_safe);
+  CF_READ("journaler", "write head interval", journaler_write_head_interval);
+  CF_READ("journaler", "cache", journaler_cache);
+  CF_READ("journaler", "prefetch periods", journaler_prefetch_periods);
+  CF_READ("journaler", "batch interval", journaler_batch_interval);
+  CF_READ_TYPE("journaler", "batch max", unsigned long long, journaler_batch_max);
+
+  CF_READ("mds", "cache size", mds_cache_size);
+  CF_READ("mds", "cache mid", mds_cache_mid);
+  CF_READ("mds", "decay halflife", mds_decay_halflife);
+  CF_READ("mds", "beacon interval", mds_beacon_interval);
+  CF_READ("mds", "beacon grace", mds_beacon_grace);
+  CF_READ("mds", "blacklist interval", mds_blacklist_interval);
+  CF_READ("mds", "session timeout", mds_session_timeout);
+  CF_READ("mds", "session autoclose", mds_session_autoclose);
+  CF_READ("mds", "client lease", mds_client_lease);
+  CF_READ("mds", "reconnect timeout", mds_reconnect_timeout);
+  CF_READ("mds", "tick interval", mds_tick_interval);
+  CF_READ("mds", "scatter nudge interval", mds_scatter_nudge_interval);
+  CF_READ("mds", "client prealloc inos", mds_client_prealloc_inos);
+  CF_READ("mds", "early reply", mds_early_reply);
+  CF_READ("mds", "log", mds_log);
+  CF_READ("mds", "log max events", mds_log_max_events);
+  CF_READ("mds", "log max segments", mds_log_max_segments);
+  CF_READ("mds", "log max expiring", mds_log_max_expiring);
+  CF_READ("mds", "log pad entry", mds_log_pad_entry);
+  CF_READ("mds", "log eopen size", mds_log_eopen_size);
+  CF_READ("mds", "bal sample interval", mds_bal_sample_interval);
+  CF_READ("mds", "bal replicate threshold", mds_bal_replicate_threshold);
+  CF_READ("mds", "bal unreplicate threshold", mds_bal_unreplicate_threshold);
+  CF_READ("mds", "bal frag", mds_bal_frag);
+  CF_READ("mds", "bal split size", mds_bal_split_size);
+  CF_READ("mds", "bal split rd", mds_bal_split_rd);
+  CF_READ("mds", "bal split wr", mds_bal_split_wr);
+  CF_READ("mds", "bal merge size", mds_bal_merge_size);
+  CF_READ("mds", "bal merge rd", mds_bal_merge_rd);
+  CF_READ("mds", "bal merge wr", mds_bal_merge_wr);
+  CF_READ("mds", "bal interval", mds_bal_interval);
+  CF_READ("mds", "bal fragment interval", mds_bal_fragment_interval);
+  CF_READ("mds", "bal idle threshold", mds_bal_idle_threshold);
+  CF_READ("mds", "bal max", mds_bal_max);
+  CF_READ("mds", "bal max until", mds_bal_max_until);
+  CF_READ("mds", "bal mode", mds_bal_mode);
+  CF_READ("mds", "bal min rebalance", mds_bal_min_rebalance);
+  CF_READ("mds", "bal min start", mds_bal_min_start);
+  CF_READ("mds", "bal need min", mds_bal_need_min);
+  CF_READ("mds", "bal need max", mds_bal_need_max);
+  CF_READ("mds", "bal midchunk", mds_bal_midchunk);
+  CF_READ("mds", "bal minchunk", mds_bal_minchunk);
+  CF_READ("mds", "trim on rejoin", mds_trim_on_rejoin);
+  CF_READ("mds", "shutdown check", mds_shutdown_check);
+  CF_READ("mds", "verify export dirauth", mds_verify_export_dirauth);
+  CF_READ("mds", "local osd", mds_local_osd);
+  CF_READ("mds", "thrash exports", mds_thrash_exports);
+  CF_READ("mds", "thrash fragments", mds_thrash_fragments);
+  CF_READ("mds", "dump cache on map", mds_dump_cache_on_map);
+  CF_READ("mds", "dump cache after rejoin", mds_dump_cache_after_rejoin);
+  CF_READ("mds", "hack log expire for better stats", mds_hack_log_expire_for_better_stats);
+
+  CF_READ("osd", "rep", osd_rep);
+  CF_READ("osd", "balance reads", osd_balance_reads);
+  CF_READ("osd", "flash crowd iat threshold", osd_flash_crowd_iat_threshold);
+  CF_READ("osd", "flash crowd iat alpha", osd_flash_crowd_iat_alpha);
+  CF_READ("osd", "balance reads temp", osd_balance_reads_temp);
+  CF_READ("osd", "shed reads", osd_shed_reads);
+  CF_READ("osd", "shed reads min latency", osd_shed_reads_min_latency);
+  CF_READ("osd", "shed reads min latency diff", osd_shed_reads_min_latency_diff);
+  CF_READ("osd", "shed reads min latency ratio", osd_shed_reads_min_latency_ratio);
+  CF_READ("osd", "immediate read from cache", osd_immediate_read_from_cache);
+  CF_READ("osd", "exclusive caching", osd_exclusive_caching);
+  CF_READ("osd", "stat refresh interval", osd_stat_refresh_interval);
+  CF_READ("osd", "min pg size without alive", osd_min_pg_size_without_alive);
+  CF_READ("osd", "pg bits", osd_pg_bits);
+  CF_READ("osd", "lpg bits", osd_lpg_bits);
+  CF_READ("osd", "object layout", osd_object_layout);
+  CF_READ("osd", "pg layout", osd_pg_layout);
+  CF_READ("osd", "min rep", osd_min_rep);
+  CF_READ("osd", "max rep", osd_max_rep);
+  CF_READ("osd", "min raid width", osd_min_raid_width);
+  CF_READ("osd", "max raid width", osd_max_raid_width);
+  CF_READ("osd", "maxthreads", osd_maxthreads);
+  CF_READ("osd", "max opq", osd_max_opq);
+  CF_READ("osd", "mkfs", osd_mkfs);
+  CF_READ("osd", "age", osd_age);
+  CF_READ("osd", "age time", osd_age_time);
+  CF_READ("osd", "heartbeat interval", osd_heartbeat_interval);
+  CF_READ("osd", "mon heartbeat interval", osd_mon_heartbeat_interval);
+  CF_READ("osd", "heartbeat grace", osd_heartbeat_grace);
+  CF_READ("osd", "mon report interval", osd_mon_report_interval);
+  CF_READ("osd", "replay window", osd_replay_window);
+  CF_READ("osd", "max pull", osd_max_pull);
+  CF_READ("osd", "preserve trimmed log", osd_preserve_trimmed_log);
+  CF_READ("osd", "recovery delay start", osd_recovery_delay_start);
+  CF_READ("osd", "recovery max active", osd_recovery_max_active);
+  CF_READ("osd", "auto weight", osd_auto_weight);
 
   CF_READ("filestore", "filestore", filestore);
-  CF_READ("filestore", "filestore_sync_interval", filestore_sync_interval);
-  CF_READ("filestore", "filestore_fake_attrs", filestore_fake_attrs);
-  CF_READ("filestore", "filestore_fake_collections", filestore_fake_collections);
-  CF_READ_STR("filestore", "filestore_dev", filestore_dev);
-  CF_READ("filestore", "filestore_btrfs_trans", filestore_btrfs_trans);
+  CF_READ("filestore", "sync interval", filestore_sync_interval);
+  CF_READ("filestore", "fake attrs", filestore_fake_attrs);
+  CF_READ("filestore", "fake collections", filestore_fake_collections);
+  CF_READ_STR("filestore", "dev", filestore_dev);
+  CF_READ("filestore", "btrfs trans", filestore_btrfs_trans);
 
   CF_READ("ebofs", "ebofs", ebofs);
-  CF_READ("ebofs", "ebofs_cloneable", ebofs_cloneable);
-  CF_READ("ebofs", "ebofs_verify", ebofs_verify);
-  CF_READ("ebofs", "ebofs_commit_ms", ebofs_commit_ms);
-  CF_READ("ebofs", "ebofs_oc_size", ebofs_oc_size);
-  CF_READ("ebofs", "ebofs_cc_size", ebofs_cc_size);
-  CF_READ_TYPE("ebofs", "ebofs_bc_size", unsigned long long, ebofs_bc_size);
-  CF_READ_TYPE("ebofs", "ebofs_bc_max_dirty", unsigned long long, ebofs_bc_max_dirty);
-  CF_READ("ebofs", "ebofs_max_prefetch", ebofs_max_prefetch);
-  CF_READ("ebofs", "ebofs_realloc", ebofs_realloc);
-  CF_READ("ebofs", "ebofs_verify_csum_on_read", ebofs_verify_csum_on_read);
-
-  CF_READ("journal", "journal_dio", journal_dio);
-  CF_READ("journal", "journal_max_write_bytes", journal_max_write_bytes);
-  CF_READ("journal", "journal_max_write_entries", journal_max_write_entries);
-
-  CF_READ("bdev", "bdev_lock", bdev_lock);
-  CF_READ("bdev", "bdev_iothreads", bdev_iothreads);
-  CF_READ("bdev", "bdev_idle_kick_after_ms", bdev_idle_kick_after_ms);
-  CF_READ("bdev", "bdev_el_fw_max_ms", bdev_el_fw_max_ms);
-  CF_READ("bdev", "bdev_el_bw_max_ms", bdev_el_bw_max_ms);
-  CF_READ("bdev", "bdev_el_bidir", bdev_el_bidir);
-  CF_READ("bdev", "bdev_iov_max", bdev_iov_max);
-  CF_READ("bdev", "bdev_debug_check_io_overlap", bdev_debug_check_io_overlap);
-  CF_READ("bdev", "bdev_fake_mb", bdev_fake_mb);
-  CF_READ("bdev", "bdev_fake_max_mb", bdev_fake_max_mb);
+  CF_READ("ebofs", "cloneable", ebofs_cloneable);
+  CF_READ("ebofs", "verify", ebofs_verify);
+  CF_READ("ebofs", "commit ms", ebofs_commit_ms);
+  CF_READ("ebofs", "oc size", ebofs_oc_size);
+  CF_READ("ebofs", "cc size", ebofs_cc_size);
+  CF_READ_TYPE("ebofs", "bc size", unsigned long long, ebofs_bc_size);
+  CF_READ_TYPE("ebofs", "bc max dirty", unsigned long long, ebofs_bc_max_dirty);
+  CF_READ("ebofs", "max prefetch", ebofs_max_prefetch);
+  CF_READ("ebofs", "realloc", ebofs_realloc);
+  CF_READ("ebofs", "verify csum on read", ebofs_verify_csum_on_read);
+
+  CF_READ("journal", "dio", journal_dio);
+  CF_READ("journal", "max write bytes", journal_max_write_bytes);
+  CF_READ("journal", "max write entries", journal_max_write_entries);
+
+  CF_READ("bdev", "lock", bdev_lock);
+  CF_READ("bdev", "iothreads", bdev_iothreads);
+  CF_READ("bdev", "idle kick after ms", bdev_idle_kick_after_ms);
+  CF_READ("bdev", "el fw max ms", bdev_el_fw_max_ms);
+  CF_READ("bdev", "el bw max ms", bdev_el_bw_max_ms);
+  CF_READ("bdev", "el bidir", bdev_el_bidir);
+  CF_READ("bdev", "iov max", bdev_iov_max);
+  CF_READ("bdev", "debug check io overlap", bdev_debug_check_io_overlap);
+  CF_READ("bdev", "fake mb", bdev_fake_mb);
+  CF_READ("bdev", "fake max mb", bdev_fake_max_mb);
 #ifdef USE_OSBDB
   CF_READ("bdstore", "bdbstore", bdbstore);
-  CF_READ("bdstore", "bdstore_debug", debug_bdbstore);
-  CF_READ("bdstore", "bdbstore_btree", bdbstore_btree);
-  CF_READ("bdstore", "bdbstore_ffactor", bdbstore_ffactor);
-  CF_READ("bdstore", "bdbstore_nelem", bdbstore_nelem);
-  CF_READ("bdstore", "bdbstore_pagesize", bdbstore_pagesize);
-  CF_READ("bdstore", "bdbstore_cachesize", bdbstore_cachesize);
-  CF_READ("bdstore", "bdbstore_transactional", bdbstore_transactional);
+  CF_READ("bdstore", "debug", debug_bdbstore);
+  CF_READ("bdstore", "btree", bdbstore_btree);
+  CF_READ("bdstore", "ffactor", bdbstore_ffactor);
+  CF_READ("bdstore", "nelem", bdbstore_nelem);
+  CF_READ("bdstore", "pagesize", bdbstore_pagesize);
+  CF_READ("bdstore", "cachesize", bdbstore_cachesize);
+  CF_READ("bdstore", "transactional", bdbstore_transactional);
 #endif
-
-  if (dump_conf)
-    cf.dump();
 }
 
 void parse_config_options(std::vector<const char*>& args, bool open)
@@ -861,7 +856,11 @@ void parse_config_options(std::vector<const char*>& args, bool open)
       g_conf.dump_conf = true;
   }
 
-  parse_config_file(g_conf.conf_file, g_conf.dump_conf);
+  ConfFile cf(g_conf.conf_file);
+
+  parse_config_file(&cf, true);
+  if (g_conf.dump_conf)
+    cf.dump();
 
   for (unsigned i=0; i<args.size(); i++) {
     if (strcmp(args[i],"--bind") == 0) 
index ba106075b810b84d9778b9a6b2aa3965a09d0271..600c7e15a7bc2483788fce8e32ca0ba562e0dca3 100644 (file)
@@ -371,8 +371,9 @@ void parse_config_option_string(string& s);
 
 extern bool parse_ip_port(const char *s, entity_addr_t& addr);
 
+class ConfFile;
 
-
+void parse_config_file(ConfFile *cf, bool update);
 
 
 #include "common/debug.h"