diff options
-rw-r--r-- | src/ceph_mds.cc | 1 | ||||
-rw-r--r-- | src/ceph_mon.cc | 1 | ||||
-rw-r--r-- | src/ceph_osd.cc | 1 | ||||
-rw-r--r-- | src/init-ceph.in | 16 | ||||
-rw-r--r-- | src/messages/MOSDMarkMeDown.h | 10 | ||||
-rw-r--r-- | src/mon/OSDMonitor.cc | 4 | ||||
-rw-r--r-- | src/osd/OSD.cc | 29 |
7 files changed, 33 insertions, 29 deletions
diff --git a/src/ceph_mds.cc b/src/ceph_mds.cc index b0bfa10ded9..f50f0303166 100644 --- a/src/ceph_mds.cc +++ b/src/ceph_mds.cc @@ -299,6 +299,7 @@ int main(int argc, const char **argv) unregister_async_signal_handler(SIGHUP, sighup_handler); unregister_async_signal_handler(SIGINT, handle_mds_signal); unregister_async_signal_handler(SIGTERM, handle_mds_signal); + shutdown_async_signal_handler(); // yuck: grab the mds lock, so we can be sure that whoever in *mds // called shutdown finishes what they were doing. diff --git a/src/ceph_mon.cc b/src/ceph_mon.cc index 541c239ef98..bffa64d532a 100644 --- a/src/ceph_mon.cc +++ b/src/ceph_mon.cc @@ -528,7 +528,6 @@ int main(int argc, const char **argv) unregister_async_signal_handler(SIGHUP, sighup_handler); unregister_async_signal_handler(SIGINT, handle_mon_signal); unregister_async_signal_handler(SIGTERM, handle_mon_signal); - shutdown_async_signal_handler(); delete mon; diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index 33a107c1dc0..ccf8f4daaa9 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -458,6 +458,7 @@ int main(int argc, const char **argv) unregister_async_signal_handler(SIGHUP, sighup_handler); unregister_async_signal_handler(SIGINT, handle_osd_signal); unregister_async_signal_handler(SIGTERM, handle_osd_signal); + shutdown_async_signal_handler(); // done delete osd; diff --git a/src/init-ceph.in b/src/init-ceph.in index e8a71949995..a7e026d23d0 100644 --- a/src/init-ceph.in +++ b/src/init-ceph.in @@ -310,19 +310,19 @@ for name in $what; do # command line, ceph.conf can override what it wants get_conf osd_location "" "osd crush location" get_conf osd_weight "" "osd crush initial weight" - defaultweight=`df $osd_data/. | tail -1 | awk '{ d= $2/1073741824 ; r = sprintf("%.2f", d); print r }'` + defaultweight="$(do_cmd "df $osd_data/. | tail -1 | awk '{ d= \$2/1073741824 ; r = sprintf(\"%.2f\", d); print r }'")" get_conf osd_keyring "$osd_data/keyring" "keyring" - $BINDIR/ceph \ - --name="osd.$id" \ - --keyring="$osd_keyring" \ + do_cmd "$BINDIR/ceph \ + --name=osd.$id \ + --keyring=$osd_keyring \ osd crush create-or-move \ -- \ - "$id" \ - "${osd_weight:-${defaultweight:-1}}" \ + $id \ + ${osd_weight:-${defaultweight:-1}} \ root=default \ - host="$(hostname -s)" \ + host=$host \ $osd_location \ - || : + || :" fi fi diff --git a/src/messages/MOSDMarkMeDown.h b/src/messages/MOSDMarkMeDown.h index e99c83d18dd..1a0475dc521 100644 --- a/src/messages/MOSDMarkMeDown.h +++ b/src/messages/MOSDMarkMeDown.h @@ -24,7 +24,7 @@ class MOSDMarkMeDown : public PaxosServiceMessage { public: uuid_d fsid; entity_inst_t target_osd; - epoch_t e; + epoch_t epoch; bool ack; MOSDMarkMeDown() @@ -32,27 +32,27 @@ class MOSDMarkMeDown : public PaxosServiceMessage { MOSDMarkMeDown(const uuid_d &fs, const entity_inst_t& f, epoch_t e, bool ack) : PaxosServiceMessage(MSG_OSD_MARK_ME_DOWN, e, HEAD_VERSION), - fsid(fs), target_osd(f), ack(ack) {} + fsid(fs), target_osd(f), epoch(e), ack(ack) {} private: ~MOSDMarkMeDown() {} public: entity_inst_t get_target() { return target_osd; } - epoch_t get_epoch() { return e; } + epoch_t get_epoch() { return epoch; } void decode_payload() { bufferlist::iterator p = payload.begin(); paxos_decode(p); ::decode(fsid, p); ::decode(target_osd, p); - ::decode(e, p); + ::decode(epoch, p); ::decode(ack, p); } void encode_payload(uint64_t features) { paxos_encode(); ::encode(fsid, payload); ::encode(target_osd, payload); - ::encode(e, payload); + ::encode(epoch, payload); ::encode(ack, payload); } diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index a0be0ec2af6..02959c20757 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2260,6 +2260,8 @@ bool OSDMonitor::update_pools_status() for (map<int64_t,pg_pool_t>::const_iterator it = pools.begin(); it != pools.end(); ++it) { + if (!mon->pgmon()->pg_map.pg_pool_sum.count(it->first)) + continue; pool_stat_t& stats = mon->pgmon()->pg_map.pg_pool_sum[it->first]; object_stat_sum_t& sum = stats.stats.sum; const pg_pool_t &pool = it->second; @@ -2309,6 +2311,8 @@ void OSDMonitor::get_pools_health( const map<int64_t,pg_pool_t>& pools = osdmap.get_pools(); for (map<int64_t,pg_pool_t>::const_iterator it = pools.begin(); it != pools.end(); ++it) { + if (!mon->pgmon()->pg_map.pg_pool_sum.count(it->first)) + continue; pool_stat_t& stats = mon->pgmon()->pg_map.pg_pool_sum[it->first]; object_stat_sum_t& sum = stats.stats.sum; const pg_pool_t &pool = it->second; diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index e64f181831b..b4f52afb93c 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4144,21 +4144,20 @@ bool OSDService::prepare_to_stop() { if (state != NOT_STOPPING) return false; - state = PREPARING_TO_STOP; - monc->send_mon_message( - new MOSDMarkMeDown( - monc->get_fsid(), - get_osdmap()->get_inst(whoami), - get_osdmap()->get_epoch(), - false - )); - utime_t now = ceph_clock_now(g_ceph_context); - utime_t timeout; - timeout.set_from_double( - now + g_conf->osd_mon_shutdown_timeout); - while ((ceph_clock_now(g_ceph_context) < timeout) && - (state != STOPPING)) { - is_stopping_cond.WaitUntil(is_stopping_lock, timeout); + if (get_osdmap()->is_up(whoami)) { + state = PREPARING_TO_STOP; + monc->send_mon_message(new MOSDMarkMeDown(monc->get_fsid(), + get_osdmap()->get_inst(whoami), + get_osdmap()->get_epoch(), + false + )); + utime_t now = ceph_clock_now(g_ceph_context); + utime_t timeout; + timeout.set_from_double(now + g_conf->osd_mon_shutdown_timeout); + while ((ceph_clock_now(g_ceph_context) < timeout) && + (state != STOPPING)) { + is_stopping_cond.WaitUntil(is_stopping_lock, timeout); + } } state = STOPPING; return true; |