summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-11-29 12:36:01 -0800
committerSage Weil <sage@inktank.com>2012-11-29 15:15:31 -0800
commit3ceaec4ced007e60d9985d5a6f7660b64d9c94b6 (patch)
tree8e664ef6369b1a36c8798c4968a4cb441c23da7c
parentf865f26067c928759d0ebd37eb976fc42ea187ea (diff)
downloadceph-3ceaec4ced007e60d9985d5a6f7660b64d9c94b6.tar.gz
osd: use safe con helpers for scrub
Note that if we don't get a con our behavior largely does not matter, since we know we are about to get a Reset event anyway. Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osd/PG.cc78
1 files changed, 40 insertions, 38 deletions
diff --git a/src/osd/PG.cc b/src/osd/PG.cc
index 82beaf6e29e..d71fe50a0e9 100644
--- a/src/osd/PG.cc
+++ b/src/osd/PG.cc
@@ -3383,14 +3383,18 @@ void PG::scrub()
OSDMapRef curmap = osd->get_osdmap();
scrubber.is_chunky = true;
for (unsigned i=1; i<acting.size(); i++) {
- Connection *con = osd->cluster_messenger->get_connection(curmap->get_cluster_inst(acting[i]));
+ Connection *con = osd->get_con_osd_cluster(acting[i], get_osdmap()->get_epoch());
+ if (!con)
+ continue;
if (!(con->features & CEPH_FEATURE_CHUNKY_SCRUB)) {
dout(20) << "OSD " << acting[i]
<< " does not support chunky scrubs, falling back to classic"
<< dendl;
scrubber.is_chunky = false;
+ con->put();
break;
}
+ con->put();
}
if (scrubber.is_chunky) {
@@ -5244,19 +5248,19 @@ PG::RecoveryState::WaitRemoteBackfillReserved::WaitRemoteBackfillReserved(my_con
context< RecoveryMachine >().log_enter(state_name);
PG *pg = context< RecoveryMachine >().pg;
pg->state_set(PG_STATE_BACKFILL_WAIT);
- Connection *con =
- pg->osd->cluster_messenger->get_connection(
- pg->get_osdmap()->get_cluster_inst(pg->backfill_target));
- if ((con->features & CEPH_FEATURE_BACKFILL_RESERVATION)) {
- pg->osd->send_message_osd_cluster(
- pg->backfill_target,
- new MBackfillReserve(
- MBackfillReserve::REQUEST,
- pg->info.pgid,
- pg->get_osdmap()->get_epoch()),
- pg->get_osdmap()->get_epoch());
- } else {
- post_event(RemoteBackfillReserved());
+ Connection *con = pg->osd->get_con_osd_cluster(pg->backfill_target, pg->get_osdmap()->get_epoch());
+ if (con) {
+ if ((con->features & CEPH_FEATURE_BACKFILL_RESERVATION)) {
+ pg->osd->cluster_messenger->send_message(
+ new MBackfillReserve(
+ MBackfillReserve::REQUEST,
+ pg->info.pgid,
+ pg->get_osdmap()->get_epoch()),
+ con);
+ } else {
+ post_event(RemoteBackfillReserved());
+ }
+ con->put();
}
}
@@ -5491,19 +5495,18 @@ PG::RecoveryState::WaitRemoteRecoveryReserved::WaitRemoteRecoveryReserved(my_con
}
if (acting_osd_it != context< Active >().sorted_acting_set.end()) {
- Connection *con =
- pg->osd->cluster_messenger->get_connection(
- pg->get_osdmap()->get_cluster_inst(*acting_osd_it));
- if ((con->features & CEPH_FEATURE_RECOVERY_RESERVATION)) {
- pg->osd->send_message_osd_cluster(
- *acting_osd_it,
- new MRecoveryReserve(
- MRecoveryReserve::REQUEST,
- pg->info.pgid,
- pg->get_osdmap()->get_epoch()),
- pg->get_osdmap()->get_epoch());
- } else {
- post_event(RemoteRecoveryReserved());
+ Connection *con = pg->osd->get_con_osd_cluster(*acting_osd_it, pg->get_osdmap()->get_epoch());
+ if (con) {
+ if ((con->features & CEPH_FEATURE_RECOVERY_RESERVATION)) {
+ pg->osd->cluster_messenger->send_message(
+ new MRecoveryReserve(MRecoveryReserve::REQUEST,
+ pg->info.pgid,
+ pg->get_osdmap()->get_epoch()),
+ con);
+ } else {
+ post_event(RemoteRecoveryReserved());
+ }
+ con->put();
}
++acting_osd_it;
} else {
@@ -5540,17 +5543,16 @@ void PG::RecoveryState::Recovering::release_reservations()
++i) {
if (*i == pg->osd->whoami) // skip myself
continue;
- Connection *con =
- pg->osd->cluster_messenger->get_connection(
- pg->get_osdmap()->get_cluster_inst(*i));
- if ((con->features & CEPH_FEATURE_RECOVERY_RESERVATION)) {
- pg->osd->send_message_osd_cluster(
- *i,
- new MRecoveryReserve(
- MRecoveryReserve::RELEASE,
- pg->info.pgid,
- pg->get_osdmap()->get_epoch()),
- pg->get_osdmap()->get_epoch());
+ Connection *con = pg->osd->get_con_osd_cluster(*i, pg->get_osdmap()->get_epoch());
+ if (con) {
+ if ((con->features & CEPH_FEATURE_RECOVERY_RESERVATION)) {
+ pg->osd->cluster_messenger->send_message(
+ new MRecoveryReserve(MRecoveryReserve::RELEASE,
+ pg->info.pgid,
+ pg->get_osdmap()->get_epoch()),
+ con);
+ }
+ con->put();
}
}
}