]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: send hb front addr to monitor at boot
authorSage Weil <sage@inktank.com>
Tue, 21 May 2013 23:44:00 +0000 (16:44 -0700)
committerSage Weil <sage@inktank.com>
Wed, 22 May 2013 23:13:37 +0000 (16:13 -0700)
We still aren't binding it to anything yet, or putting it in the OSDMap.

Signed-off-by: Sage Weil <sage@inktank.com>
src/messages/MOSDBoot.h
src/mon/OSDMonitor.cc
src/osd/OSD.cc

index 354ea6b04303ad4068830e7a886d7d7328be02b5..d18d56c66f0e034133c54a5d2654bc4133b644f1 100644 (file)
 
 class MOSDBoot : public PaxosServiceMessage {
 
-  static const int HEAD_VERSION = 3;
+  static const int HEAD_VERSION = 4;
   static const int COMPAT_VERSION = 2;
 
  public:
   OSDSuperblock sb;
-  entity_addr_t hb_addr;
+  entity_addr_t hb_back_addr, hb_front_addr;
   entity_addr_t cluster_addr;
   epoch_t boot_epoch;  // last epoch this daemon was added to the map (if any)
 
@@ -35,11 +35,15 @@ class MOSDBoot : public PaxosServiceMessage {
     : PaxosServiceMessage(MSG_OSD_BOOT, 0, HEAD_VERSION, COMPAT_VERSION),
       boot_epoch(0)
   { }
-  MOSDBoot(OSDSuperblock& s, epoch_t be, const entity_addr_t& hb_addr_ref,
+  MOSDBoot(OSDSuperblock& s, epoch_t be,
+          const entity_addr_t& hb_back_addr_ref,
+          const entity_addr_t& hb_front_addr_ref,
            const entity_addr_t& cluster_addr_ref)
     : PaxosServiceMessage(MSG_OSD_BOOT, s.current_epoch, HEAD_VERSION, COMPAT_VERSION),
       sb(s),
-      hb_addr(hb_addr_ref), cluster_addr(cluster_addr_ref),
+      hb_back_addr(hb_back_addr_ref),
+      hb_front_addr(hb_front_addr_ref),
+      cluster_addr(cluster_addr_ref),
       boot_epoch(be)
   { }
   
@@ -55,19 +59,22 @@ public:
   void encode_payload(uint64_t features) {
     paxos_encode();
     ::encode(sb, payload);
-    ::encode(hb_addr, payload);
+    ::encode(hb_back_addr, payload);
     ::encode(cluster_addr, payload);
     ::encode(boot_epoch, payload);
+    ::encode(hb_front_addr, payload);
   }
   void decode_payload() {
     bufferlist::iterator p = payload.begin();
     paxos_decode(p);
     ::decode(sb, p);
-    ::decode(hb_addr, p);
+    ::decode(hb_back_addr, p);
     if (header.version >= 2)
       ::decode(cluster_addr, p);
     if (header.version >= 3)
       ::decode(boot_epoch, p);
+    if (header.version >= 4)
+      ::decode(hb_front_addr, p);
   }
 };
 
index ec89c24a5c78c564d613693969187a56531ed1e4..dd149e47eee4b37fae8acce5257856b8cb8c3704 100644 (file)
@@ -1090,7 +1090,9 @@ bool OSDMonitor::preprocess_boot(MOSDBoot *m)
 bool OSDMonitor::prepare_boot(MOSDBoot *m)
 {
   dout(7) << "prepare_boot from " << m->get_orig_source_inst() << " sb " << m->sb
-         << " cluster_addr " << m->cluster_addr << " hb_addr " << m->hb_addr
+         << " cluster_addr " << m->cluster_addr
+         << " hb_back_addr " << m->hb_back_addr
+         << " hb_front_addr " << m->hb_front_addr
          << dendl;
 
   assert(m->get_orig_source().is_osd());
@@ -1127,7 +1129,9 @@ bool OSDMonitor::prepare_boot(MOSDBoot *m)
     pending_inc.new_up_client[from] = m->get_orig_source_addr();
     if (!m->cluster_addr.is_blank_ip())
       pending_inc.new_up_cluster[from] = m->cluster_addr;
-    pending_inc.new_hb_back_up[from] = m->hb_addr;
+    pending_inc.new_hb_back_up[from] = m->hb_back_addr;
+    if (!m->hb_front_addr.is_blank_ip())
+      pending_inc.new_hb_front_up[from] = m->hb_front_addr;
 
     // mark in?
     if ((g_conf->mon_osd_auto_mark_auto_out_in && (oldstate & CEPH_OSD_AUTOOUT)) ||
index c672104a730076187beea644d3d405193ca0bd49..ab93a800f64580fde2025ba1db931d9a8b2ff54b 100644 (file)
@@ -3029,18 +3029,20 @@ void OSD::_send_boot()
     cluster_messenger->set_addr_unknowns(cluster_addr);
     dout(10) << " assuming cluster_addr ip matches client_addr" << dendl;
   }
-  entity_addr_t hb_addr = hbserver_messenger->get_myaddr();
-  if (hb_addr.is_blank_ip()) {
-    int port = hb_addr.get_port();
-    hb_addr = cluster_addr;
-    hb_addr.set_port(port);
-    hbserver_messenger->set_addr_unknowns(hb_addr);
+  entity_addr_t hb_back_addr = hb_back_server_messenger->get_myaddr();
+  if (hb_back_addr.is_blank_ip()) {
+    int port = hb_back_addr.get_port();
+    hb_back_addr = cluster_addr;
+    hb_back_addr.set_port(port);
+    hb_back_server_messenger->set_addr_unknowns(hb_back_addr);
     dout(10) << " assuming hb_addr ip matches cluster_addr" << dendl;
   }
-  MOSDBoot *mboot = new MOSDBoot(superblock, boot_epoch, hb_addr, cluster_addr);
+  entity_addr_t hb_front_addr;
+  MOSDBoot *mboot = new MOSDBoot(superblock, boot_epoch, hb_back_addr, hb_front_addr, cluster_addr);
   dout(10) << " client_addr " << client_messenger->get_myaddr()
           << ", cluster_addr " << cluster_addr
-          << ", hb addr " << hb_addr
+          << ", hb_back_addr " << hb_back_addr
+          << ", hb_front_addr " << hb_front_addr
           << dendl;
   monc->send_mon_message(mboot);
 }