From 3b6ca5d05bba113b5ebf939bc201dcdfa37d41cb Mon Sep 17 00:00:00 2001 From: sageweil Date: Wed, 6 Jun 2007 22:38:09 +0000 Subject: [PATCH] merged trunk changes r1394:1405 into branches/sage/cephmds2 git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1406 29311d96-e01e-0410-9327-a35deaab8ce9 --- branches/sage/cephmds2/client/Client.cc | 4 +++- branches/sage/cephmds2/messages/MOSDMap.h | 3 +++ branches/sage/cephmds2/mon/OSDMonitor.cc | 19 +++++++++++++++++-- branches/sage/cephmds2/mon/OSDMonitor.h | 4 +--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/branches/sage/cephmds2/client/Client.cc b/branches/sage/cephmds2/client/Client.cc index 0ff62aacbd996..7682524f81325 100644 --- a/branches/sage/cephmds2/client/Client.cc +++ b/branches/sage/cephmds2/client/Client.cc @@ -1264,7 +1264,9 @@ int Client::mount() dout(2) << "sending client_mount to mon" << mon << endl; messenger->send_message(new MClientMount, monmap->get_inst(mon)); - while (!mdsmap) + while (!mdsmap || + !osdmap || + osdmap->get_epoch() == 0) mount_cond.Wait(client_lock); mounted = true; diff --git a/branches/sage/cephmds2/messages/MOSDMap.h b/branches/sage/cephmds2/messages/MOSDMap.h index ee75f9bff9b69..83929ddd23c28 100644 --- a/branches/sage/cephmds2/messages/MOSDMap.h +++ b/branches/sage/cephmds2/messages/MOSDMap.h @@ -65,6 +65,9 @@ class MOSDMap : public Message { } virtual char *get_type_name() { return "omap"; } + void print(ostream& out) { + out << "osdmap(" << get_first() << "," << get_last() << ")"; + } }; #endif diff --git a/branches/sage/cephmds2/mon/OSDMonitor.cc b/branches/sage/cephmds2/mon/OSDMonitor.cc index ee5caaec0f025..38b7616722d4e 100644 --- a/branches/sage/cephmds2/mon/OSDMonitor.cc +++ b/branches/sage/cephmds2/mon/OSDMonitor.cc @@ -527,11 +527,26 @@ void OSDMonitor::send_waiting() for (map >::iterator i = awaiting_map.begin(); i != awaiting_map.end(); - i++) - send_incremental(i->second.second, i->second.first); + i++) { + if (i->second.second) + send_incremental(i->second.second, i->second.first); + else + send_full(i->second.first); + } } +void OSDMonitor::send_latest(entity_inst_t who) +{ + // FIXME this is super naive + if (osdmap.get_epoch() == 0) { + awaiting_map[who.name].first = who; + awaiting_map[who.name].second = 0; + } else { + send_full(who); + } +} + void OSDMonitor::send_full(entity_inst_t who) { messenger->send_message(new MOSDMap(&osdmap), who); diff --git a/branches/sage/cephmds2/mon/OSDMonitor.h b/branches/sage/cephmds2/mon/OSDMonitor.h index 18dc9f3a7943e..000a79f4024bc 100644 --- a/branches/sage/cephmds2/mon/OSDMonitor.h +++ b/branches/sage/cephmds2/mon/OSDMonitor.h @@ -103,9 +103,7 @@ private: void mark_all_down(); - void send_latest(entity_inst_t i) { - send_full(i); - } + void send_latest(entity_inst_t i); void fake_osd_failure(int osd, bool down); void fake_osdmap_update(); -- 2.39.5