summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ceph_mds.cc1
-rw-r--r--src/ceph_mon.cc1
-rw-r--r--src/ceph_osd.cc1
-rw-r--r--src/init-ceph.in16
-rw-r--r--src/messages/MOSDMarkMeDown.h10
-rw-r--r--src/mon/OSDMonitor.cc4
-rw-r--r--src/osd/OSD.cc29
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;