return true;
}
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer) {
- lock.Lock();
- if (observe)
- send_observe_requests();
- if (pending_cmd.size())
- send_command();
- lock.Unlock();
- return true;
+ bool ms_handle_reset(Connection *con) {
+ if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
+ lock.Lock();
+ if (observe)
+ send_observe_requests();
+ if (pending_cmd.size())
+ send_command();
+ lock.Unlock();
+ return true;
+ }
+ return false;
}
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+ void ms_handle_remote_reset(Connection *con) {}
} dispatcher;
// ===============================
-bool Client::ms_handle_reset(Connection *con, const entity_addr_t& addr)
+bool Client::ms_handle_reset(Connection *con)
{
- dout(0) << "ms_handle_reset on " << addr << dendl;
+ dout(0) << "ms_handle_reset on " << con->get_peer_addr() << dendl;
Mutex::Locker l(client_lock);
- objecter->ms_handle_reset(addr);
+ objecter->ms_handle_reset(con);
return false;
}
-void Client::ms_handle_remote_reset(Connection *con, const entity_addr_t& addr)
+void Client::ms_handle_remote_reset(Connection *con)
{
- dout(0) << "ms_handle_remote_reset on " << addr << dendl;
+ dout(0) << "ms_handle_remote_reset on " << con->get_peer_addr() << dendl;
Mutex::Locker l(client_lock);
- objecter->ms_handle_remote_reset(addr);
+ objecter->ms_handle_remote_reset(con);
}
friend class SyntheticClient;
bool ms_dispatch(Message *m);
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer);
+ bool ms_handle_reset(Connection *con);
+ void ms_handle_remote_reset(Connection *con);
public:
}
+bool LogClient::ms_handle_reset(Connection *con)
+{
+ if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
+ dout(10) << "ms_handle_reset on mon " << con->get_peer_addr() << ", resending pending log events" << dendl;
+ send_log();
+ }
+ return false;
+}
bool is_synchronous;
void _send_log();
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+ bool ms_handle_reset(Connection *con);
+ void ms_handle_remote_reset(Connection *con) {}
public:
}
return true;
}
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+ bool ms_handle_reset(Connection *con) { return false; }
+ void ms_handle_remote_reset(Connection *con) {}
} dispatcher;
bool _dispatch(Message *m);
bool ms_dispatch(Message *m);
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer);
+ bool ms_handle_reset(Connection *con);
+ void ms_handle_remote_reset(Connection *con);
Objecter *objecter;
return ret;
}
-bool RadosClient::ms_handle_reset(Connection *con, const entity_addr_t& addr)
+bool RadosClient::ms_handle_reset(Connection *con)
{
Mutex::Locker l(lock);
- objecter->ms_handle_reset(addr);
+ objecter->ms_handle_reset(con);
return false;
}
-void RadosClient::ms_handle_remote_reset(Connection *con, const entity_addr_t& addr)
+void RadosClient::ms_handle_remote_reset(Connection *con)
{
Mutex::Locker l(lock);
- objecter->ms_handle_remote_reset(addr);
+ objecter->ms_handle_remote_reset(con);
}
-bool MDS::ms_handle_reset(Connection *con, const entity_addr_t& addr)
+bool MDS::ms_handle_reset(Connection *con)
{
Mutex::Locker l(mds_lock);
- dout(0) << "ms_handle_reset on " << addr << dendl;
- objecter->ms_handle_reset(addr);
+ dout(0) << "ms_handle_reset on " << con->get_peer_addr() << dendl;
+ objecter->ms_handle_reset(con);
return false;
}
-void MDS::ms_handle_remote_reset(Connection *con, const entity_addr_t& addr)
+void MDS::ms_handle_remote_reset(Connection *con)
{
Mutex::Locker l(mds_lock);
- dout(0) << "ms_handle_remote_reset on " << addr << dendl;
- objecter->ms_handle_remote_reset(addr);
+ dout(0) << "ms_handle_remote_reset on " << con->get_peer_addr() << dendl;
+ objecter->ms_handle_remote_reset(con);
}
// messages
bool _dispatch(Message *m);
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer);
+ bool ms_handle_reset(Connection *con);
+ void ms_handle_remote_reset(Connection *con);
// special message types
void handle_mds_map(class MMDSMap *m);
}
}
-bool MonClient::ms_handle_reset(Connection *con, const entity_addr_t& peer)
+bool MonClient::ms_handle_reset(Connection *con)
{
- dout(10) << "ms_handle_reset " << peer << dendl;
- if (hunting)
- return true;
-
- dout(0) << "hunting for new mon" << dendl;
- hunting = true;
- _reopen_session();
+ if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
+ if (con->get_peer_addr() != monmap.get_inst(cur_mon).addr) {
+ dout(10) << "ms_handle_reset stray mon " << con->get_peer_addr() << dendl;
+ return true;
+ }
+
+ dout(10) << "ms_handle_reset current mon" << con->get_peer_addr() << dendl;
+ if (hunting)
+ return true;
+
+ dout(0) << "hunting for new mon" << dendl;
+ hunting = true;
+ _reopen_session();
+ }
return false;
}
SafeTimer timer;
bool ms_dispatch(Message *m);
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
+ bool ms_handle_reset(Connection *con);
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+ void ms_handle_remote_reset(Connection *con) {}
void handle_monmap(MMonMap *m);
delete m;
}
-bool Monitor::ms_handle_reset(Connection *con, const entity_addr_t& peer)
+bool Monitor::ms_handle_reset(Connection *con)
{
+ // ignore lossless monitor sessions
+ if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON)
+ return false;
+
Session *s = (Session *)con->get_priv();
if (!s)
return false;
-
+
Mutex::Locker l(lock);
-
+
dout(10) << "reset/close on session " << s->inst << dendl;
remove_session(s);
s->put();
-
+
// remove from connection, too.
con->set_priv(NULL);
return true;
private:
bool ms_dispatch(Message *m);
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+ bool ms_handle_reset(Connection *con);
+ void ms_handle_remote_reset(Connection *con) {}
public:
Monitor(int w, MonitorStore *s, Messenger *m, MonMap *map);
* this indicates that the ordered+reliable delivery semantics have
* been violated. messages may have been lost.
*/
- virtual bool ms_handle_reset(Connection *con, const entity_addr_t& peer) = 0;
+ virtual bool ms_handle_reset(Connection *con) = 0;
// on deliberate reset of connection by remote
// implies incoming messages dropped; possibly/probably some of our previous outgoing too.
- virtual void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) = 0;
+ virtual void ms_handle_remote_reset(Connection *con) = 0;
};
#endif
<< dendl;
assert(0);
}
- void ms_deliver_handle_reset(Connection *con, const entity_addr_t& peer) {
+ void ms_deliver_handle_reset(Connection *con) {
for (list<Dispatcher*>::iterator p = dispatchers.begin();
p != dispatchers.end();
p++)
- if ((*p)->ms_handle_reset(con, peer))
+ if ((*p)->ms_handle_reset(con))
return;
}
- void ms_deliver_handle_remote_reset(Connection *con, const entity_addr_t& peer) {
+ void ms_deliver_handle_remote_reset(Connection *con) {
for (list<Dispatcher*>::iterator p = dispatchers.begin();
p != dispatchers.end();
p++)
- (*p)->ms_handle_remote_reset(con, peer);
+ (*p)->ms_handle_remote_reset(con);
}
// shutdown
entity_addr_t a = remote_reset_q.front().second;
remote_reset_q.pop_front();
lock.Unlock();
- ms_deliver_handle_remote_reset(con, a);
+ ms_deliver_handle_remote_reset(con);
con->put();
} else if ((long)m == BAD_RESET) {
lock.Lock();
entity_addr_t a = reset_q.front().second;
reset_q.pop_front();
lock.Unlock();
- ms_deliver_handle_reset(con, a);
+ ms_deliver_handle_reset(con);
con->put();
} else {
dout(1) << "<== " << m->get_source_inst()
class_handler->resend_class_requests();
}
+bool OSD::ms_handle_reset(Connection *con)
+{
+ dout(10) << "ms_handle_reset " << con->get_peer_addr() << dendl;
+
+ if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
+ // ...
+ }
+
+ return false;
+}
+
+
void OSD::send_boot()
{
bool ms_dispatch(Message *m) {
return osd->heartbeat_dispatch(m);
};
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+ bool ms_handle_reset(Connection *con) { return false; }
+ void ms_handle_remote_reset(Connection *con) {}
public:
OSD *osd;
HeartbeatDispatcher(OSD *o) : osd(o) {}
private:
bool ms_dispatch(Message *m);
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+ bool ms_handle_reset(Connection *con);
+ void ms_handle_remote_reset(Connection *con) {}
public:
OSD(int id, Messenger *m, Messenger *hbm, MonClient *mc, const char *dev = 0, const char *jdev = 0);
}
-void Objecter::ms_handle_reset(const entity_addr_t& addr)
+void Objecter::ms_handle_reset(Connection *con)
{
- if (monc->monmap.contains(addr))
+ if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON)
resend_mon_ops();
}
-void Objecter::ms_handle_remote_reset(const entity_addr_t& addr)
+void Objecter::ms_handle_remote_reset(Connection *con)
{
- if (osdmap->have_addr(addr))
+ if (con->get_peer_type() == CEPH_ENTITY_TYPE_OSD)
maybe_request_map();
}
}
}
- void ms_handle_reset(const entity_addr_t& addr);
- void ms_handle_remote_reset(const entity_addr_t& addr);
+ void ms_handle_reset(Connection *con);
+ void ms_handle_remote_reset(Connection *con);
};
return true;
}
- bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
- void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+ bool ms_handle_reset(Connection *con) { return false; }
+ void ms_handle_remote_reset(Connection *con) {}
} dispatcher;