]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: discriminate based on connection messenger, not peer type
authorSage Weil <sage@inktank.com>
Mon, 26 Aug 2013 20:58:47 +0000 (13:58 -0700)
committerSage Weil <sage@inktank.com>
Thu, 2 Jan 2014 18:06:59 +0000 (10:06 -0800)
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 <sage@inktank.com>
(cherry picked from commit a6b04c5d8ba043727a2e39a62e9d4126485bcfeb)

Conflicts:

src/osd/OSD.cc

src/osd/OSD.cc

index 350bc49da0e6398eb3da12ac59f9e93497dd58bf..e5f76377d9fa02ecc4f633de1ce9691350f3a92d 100644 (file)
@@ -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)