mon: use connection hook to resend mon requests

This commit is contained in:
Sage Weil 2009-10-13 11:54:40 -07:00
parent 7e5d162edd
commit df0c52a1d7
10 changed files with 41 additions and 22 deletions

View File

@ -231,26 +231,16 @@ static void send_observe_requests()
bool sent = false;
for (int i=0; i<PAXOS_NUM; i++) {
if (registered.count(i))
continue;
MMonObserve *m = new MMonObserve(mc.monmap.fsid, i, map_ver[i]);
dout(1) << "mon" << " <- observe " << get_paxos_name(i) << dendl;
mc.send_mon_message(m);
sent = true;
}
registered.clear();
float seconds = g_conf.paxos_observer_timeout/2;
float retry_seconds = 5.0;
if (!sent) {
// success. clear for renewal.
registered.clear();
dout(1) << " refresh after " << seconds << " with same mon" << dendl;
timer.add_event_after(seconds, new C_ObserverRefresh(false));
} else {
//is_timeout = true;
dout(1) << " refresh after " << retry_seconds << " with new mon" << dendl;
timer.add_event_after(retry_seconds, new C_ObserverRefresh(true));
}
dout(1) << " refresh after " << seconds << " with same mon" << dendl;
timer.add_event_after(seconds, new C_ObserverRefresh(false));
}
@ -369,7 +359,7 @@ class Admin : public Dispatcher {
return true;
}
bool ms_handle_reset(Connection *con) {
void ms_handle_connect(Connection *con) {
if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
lock.Lock();
if (observe)
@ -377,11 +367,9 @@ class Admin : public Dispatcher {
if (pending_cmd.size())
send_command();
lock.Unlock();
return true;
}
return false;
}
bool ms_handle_reset(Connection *con) { return false; }
void ms_handle_remote_reset(Connection *con) {}
} dispatcher;

View File

@ -5934,6 +5934,13 @@ int Client::get_local_osd()
// ===============================
void Client::ms_handle_connect(Connection *con)
{
dout(0) << "ms_handle_connect on " << con->get_peer_addr() << dendl;
Mutex::Locker l(client_lock);
objecter->ms_handle_connect(con);
}
bool Client::ms_handle_reset(Connection *con)
{
dout(0) << "ms_handle_reset on " << con->get_peer_addr() << dendl;

View File

@ -1093,6 +1093,7 @@ protected:
friend class SyntheticClient;
bool ms_dispatch(Message *m);
void ms_handle_connect(Connection *con);
bool ms_handle_reset(Connection *con);
void ms_handle_remote_reset(Connection *con);

View File

@ -116,11 +116,10 @@ bool LogClient::ms_dispatch(Message *m)
}
bool LogClient::ms_handle_reset(Connection *con)
void LogClient::ms_handle_connect(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;
dout(10) << "ms_handle_connect on mon " << con->get_peer_addr() << ", resending pending log events" << dendl;
send_log();
}
return false;
}

View File

@ -37,7 +37,9 @@ class LogClient : public Dispatcher {
bool is_synchronous;
void _send_log();
bool ms_handle_reset(Connection *con);
void ms_handle_connect(Connection *con);
bool ms_handle_reset(Connection *con) { return false; }
void ms_handle_remote_reset(Connection *con) {}

View File

@ -58,6 +58,7 @@ class RadosClient : public Dispatcher
bool _dispatch(Message *m);
bool ms_dispatch(Message *m);
void ms_handle_connect(Connection *con);
bool ms_handle_reset(Connection *con);
void ms_handle_remote_reset(Connection *con);
@ -341,6 +342,12 @@ bool RadosClient::ms_dispatch(Message *m)
return ret;
}
void RadosClient::ms_handle_connect(Connection *con)
{
Mutex::Locker l(lock);
objecter->ms_handle_connect(con);
}
bool RadosClient::ms_handle_reset(Connection *con)
{
Mutex::Locker l(lock);

View File

@ -1388,6 +1388,13 @@ bool MDS::_dispatch(Message *m)
void MDS::ms_handle_connect(Connection *con)
{
Mutex::Locker l(mds_lock);
dout(0) << "ms_handle_connect on " << con->get_peer_addr() << dendl;
objecter->ms_handle_connect(con);
}
bool MDS::ms_handle_reset(Connection *con)
{
Mutex::Locker l(mds_lock);

View File

@ -361,6 +361,7 @@ class MDS : public Dispatcher {
// messages
bool _dispatch(Message *m);
void ms_handle_connect(Connection *con);
bool ms_handle_reset(Connection *con);
void ms_handle_remote_reset(Connection *con);

View File

@ -923,12 +923,18 @@ void Objecter::_sg_read_finish(vector<ObjectExtent>& extents, vector<bufferlist>
}
void Objecter::ms_handle_reset(Connection *con)
void Objecter::ms_handle_connect(Connection *con)
{
if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON)
resend_mon_ops();
}
void Objecter::ms_handle_reset(Connection *con)
{
if (con->get_peer_type() == CEPH_ENTITY_TYPE_OSD)
maybe_request_map();
}
void Objecter::ms_handle_remote_reset(Connection *con)
{
if (con->get_peer_type() == CEPH_ENTITY_TYPE_OSD)

View File

@ -701,6 +701,7 @@ public:
}
}
void ms_handle_connect(Connection *con);
void ms_handle_reset(Connection *con);
void ms_handle_remote_reset(Connection *con);