for (map<entity_name_t,pair<entity_inst_t,epoch_t> >::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);
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();