]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: send correct ip addrs to monitor for cluster_, hb_addr
authorSage Weil <sage@newdream.net>
Mon, 22 Nov 2010 04:48:49 +0000 (20:48 -0800)
committerSage Weil <sage@newdream.net>
Mon, 22 Nov 2010 04:52:40 +0000 (20:52 -0800)
Signed-off-by: Sage Weil <sage@newdream.net>
src/cosd.cc
src/messages/MOSDBoot.h
src/osd/OSD.cc

index a85e4bf3b4fdfd7af07147f590fb3c5cfbafe079..7e77799de00f0690782443958e848f097b3348d7 100644 (file)
@@ -212,15 +212,12 @@ int main(int argc, const char **argv)
   SimpleMessenger *cluster_messenger = new SimpleMessenger();
   SimpleMessenger *messenger_hb = new SimpleMessenger();
 
-  entity_addr_t hb_addr;
-
-  if (client_addr_set) {
+  if (client_addr_set)
     client_messenger->bind(g_conf.public_addr);
-    hb_addr = g_conf.public_addr;
-    hb_addr.set_port(0);
-  } else {
+  else
     client_messenger->bind();
-  }
+
+  entity_addr_t hb_addr;  // hb should bind to same ip ad cluster_addr (if specified)
 
   if (cluster_addr_set) {
     cluster_messenger->bind(g_conf.cluster_addr);
index ae5c965dcc1912647e75026649da6f4d40f48b47..8bf368eb19ccba635dd81f686ab65536d80f5ab2 100644 (file)
@@ -27,11 +27,8 @@ class MOSDBoot : public PaxosServiceMessage {
   entity_addr_t cluster_addr;
 
   MOSDBoot() : PaxosServiceMessage(MSG_OSD_BOOT, 0) { }
-  MOSDBoot(OSDSuperblock& s, entity_addr_t& hb_addr_ref) : 
-    PaxosServiceMessage(MSG_OSD_BOOT, s.current_epoch),
-    sb(s), hb_addr(hb_addr_ref), cluster_addr() { }
-  MOSDBoot(OSDSuperblock& s, entity_addr_t& hb_addr_ref,
-           entity_addr_t& cluster_addr_ref) :
+  MOSDBoot(OSDSuperblock& s, const entity_addr_t& hb_addr_ref,
+           const entity_addr_t& cluster_addr_ref) :
     PaxosServiceMessage(MSG_OSD_BOOT, s.current_epoch),
     sb(s), hb_addr(hb_addr_ref), cluster_addr(cluster_addr_ref) { }
   
index f6f9683092140a3ef407891b998409483fcaf7aa..98c9d337d4dc6cc9b50f54ded3ec7abbdedab6e8 100644 (file)
@@ -1594,17 +1594,25 @@ void OSD::ms_handle_connect(Connection *con)
 void OSD::send_boot()
 {
   dout(10) << "send_boot" << dendl;
+  entity_addr_t cluster_addr = cluster_messenger->get_myaddr();
+  if (cluster_addr.is_blank_addr()) {
+    int port = cluster_addr.get_port();
+    cluster_addr = client_messenger->get_myaddr();
+    cluster_addr.set_port(port);
+    dout(10) << " assuming cluster_addr ip matches client_addr" << dendl;
+  }
   entity_addr_t hb_addr = heartbeat_messenger->get_myaddr();
   if (hb_addr.is_blank_addr()) {
     int port = hb_addr.get_port();
-    hb_addr = cluster_messenger->get_myaddr();
+    hb_addr = cluster_addr;
     hb_addr.set_port(port);
+    dout(10) << " assuming hb_addr ip matches cluster_addr" << dendl;
   }
-  MOSDBoot *mboot = new MOSDBoot(superblock, hb_addr);
-
-  mboot->cluster_addr = cluster_messenger->get_myaddr();
-  dout(0) << "setting MOSDBoot->cluster_addr to" << cluster_messenger->get_myaddr()
-         << " while client_messenger addr is " << client_messenger->get_myaddr() << dendl;
+  MOSDBoot *mboot = new MOSDBoot(superblock, hb_addr, cluster_addr);
+  dout(10) << " client_addr " << client_messenger->get_myaddr()
+          << ", cluster_addr " << cluster_addr
+          << ", hb addr " << hb_addr
+          << dendl;
   monc->send_mon_message(mboot);
 }