bool do_shutdown = false;
bool do_restart = false;
+ bool network_error = false;
if (osdmap->get_epoch() > 0 &&
is_active()) {
if (!osdmap->exists(whoami)) {
avoid_ports.insert(hb_front_server_messenger->get_myaddr().get_port());
int r = cluster_messenger->rebind(avoid_ports);
- if (r != 0)
+ if (r != 0) {
do_shutdown = true; // FIXME: do_restart?
+ network_error = true;
+ }
r = hb_back_server_messenger->rebind(avoid_ports);
- if (r != 0)
+ if (r != 0) {
do_shutdown = true; // FIXME: do_restart?
+ network_error = true;
+ }
r = hb_front_server_messenger->rebind(avoid_ports);
- if (r != 0)
+ if (r != 0) {
do_shutdown = true; // FIXME: do_restart?
+ network_error = true;
+ }
hbclient_messenger->mark_down_all();
else if (do_shutdown) {
osd_lock.Unlock();
shutdown();
+ if (network_error) {
+ map<int,pair<utime_t,entity_inst_t>>::iterator it = failure_pending.begin();
+ while (it != failure_pending.end()) {
+ dout(10) << "handle_osd_ping canceling in-flight failure report for osd." << it->first << dendl;
+ send_still_alive(osdmap->get_epoch(), it->second.second);
+ failure_pending.erase(it++);
+ }
+ }
osd_lock.Lock();
}
else if (is_preboot()) {
else if (do_restart)
start_boot();
-
m->put();
}