From: Sage Weil Date: Mon, 26 Aug 2013 20:58:47 +0000 (-0700) Subject: osd: discriminate based on connection messenger, not peer type X-Git-Tag: v0.67.6~41 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4d88dd10bfab4e5fb45632245be5f79eeba73a30;p=ceph.git osd: discriminate based on connection messenger, not peer type Replace ->get_source().is_osd() checks and instead see if it is the cluster_messenger so that we do not confuse ourselves when we get legit requests from other OSDs on our public interface. NOTE: backporting this because a mixed cluster may send OSD requests via the client interface, even though dumpling doesn't do this. Signed-off-by: Sage Weil (cherry picked from commit a6b04c5d8ba043727a2e39a62e9d4126485bcfeb) Conflicts: src/osd/OSD.cc --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 350bc49da0e6..e5f76377d9fa 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4279,7 +4279,7 @@ bool OSD::_share_map_incoming(entity_name_t name, Connection *con, epoch_t epoch } // does peer have old map? - if (name.is_osd() && + if (con->get_messenger() == cluster_messenger && osdmap->is_up(name.num()) && (osdmap->get_cluster_addr(name.num()) == con->get_peer_addr() || osdmap->get_hb_back_addr(name.num()) == con->get_peer_addr())) { @@ -5695,7 +5695,7 @@ bool OSD::require_same_or_newer_map(OpRequestRef op, epoch_t epoch) } // ok, our map is same or newer.. do they still exist? - if (m->get_source().is_osd()) { + if (m->get_connection()->get_messenger() == cluster_messenger) { int from = m->get_source().num(); if (!osdmap->have_inst(from) || osdmap->get_cluster_addr(from) != m->get_source_inst().addr) { @@ -6804,11 +6804,8 @@ void OSDService::reply_op_error(OpRequestRef op, int err, eversion_t v) flags = m->get_flags() & (CEPH_OSD_FLAG_ACK|CEPH_OSD_FLAG_ONDISK); MOSDOpReply *reply = new MOSDOpReply(m, err, osdmap->get_epoch(), flags); - Messenger *msgr = client_messenger; reply->set_version(v); - if (m->get_source().is_osd()) - msgr = cluster_messenger; - msgr->send_message(reply, m->get_connection()); + m->get_connection()->get_messenger()->send_message(reply, m->get_connection()); } void OSDService::handle_misdirected_op(PG *pg, OpRequestRef op)