e.type = type;
e.msg = s;
log_queue.push_back(e);
+
+ if (is_synchronous)
+ _send_log();
}
void LogClient::send_log()
{
Mutex::Locker l(log_lock);
+ _send_log();
+}
+
+void LogClient::_send_log()
+{
if (log_queue.empty())
return;
MLog *log = new MLog(monmap->get_fsid(), log_queue);
MonMap *monmap;
bool dispatch_impl(Message *m);
+ bool is_synchronous;
+ void _send_log();
public:
// -- log --
void log(log_type type, stringstream& s);
void send_log();
void handle_log_ack(MLogAck *m);
+ void set_synchronous(bool sync) { is_synchronous = sync; }
LogClient(Messenger *m, MonMap *mm) :
- messenger(m), monmap(mm),
+ messenger(m), monmap(mm), is_synchronous(false),
log_lock("LogClient::log_lock"), last_log(0) { }
};
dout(0) << "client is not authorized to mount" << dendl;
ss << "client addr " << addr << " is not authorized to mount";
mon->get_logclient()->log(LOG_SEC, ss);
- mon->get_logclient()->send_log();
return true;
}
if (client_map.addr_client.count(addr)) {
dout(7) << " client" << client << " already mounted" << dendl;
ss << "client" << client << " " << addr << " is already mounted";
mon->get_logclient()->log(LOG_INFO, ss);
- mon->get_logclient()->send_log();
_mounted(client, m);
return true;
}
paxos->wait_for_commit(new C_Mounted(this, client, (MClientMount*)m));
ss << "client" << client << " " << addr << " mounted";
mon->get_logclient()->log(LOG_INFO, ss);
- mon->get_logclient()->send_log();
}
return true;
paxos->wait_for_commit(new C_Unmounted(this, (MClientUnmount*)m));
ss << "client" << client << " " << client_map.client_info[client].addr() << " unmounted";
mon->get_logclient()->log(LOG_INFO, ss);
- mon->get_logclient()->send_log();
}
return true;
// init paxos
for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++)
(*p)->init();
+
+ logclient.set_synchronous(true);
// i'm ready!
messenger->set_dispatcher(this);
bool OSDMonitor::prepare_failure(MOSDFailure *m)
{
+ stringstream ss;
dout(1) << "prepare_failure " << m->get_failed() << " from " << m->get_orig_source_inst() << dendl;
+
+ ss << "osd " << m->get_failed() << " failure (" << m->get_orig_source_inst() << ")";
+ mon->get_logclient()->log(LOG_DEBUG, ss);
// FIXME
// take their word for it
bool OSDMonitor::prepare_boot(MOSDBoot *m)
{
+ stringstream ss;
dout(7) << "prepare_boot from " << m->get_orig_source_inst() << " sb " << m->sb << dendl;
+ ss << "osd boot (" << m->get_orig_source_inst() << ")";
+ mon->get_logclient()->log(LOG_DEBUG, ss);
+
assert(m->get_orig_source().is_osd());
int from = m->get_orig_source().num();
bool OSDMonitor::prepare_alive(MOSDAlive *m)
{
int from = m->get_orig_source().num();
+ stringstream ss;
+ ss << "osd alive (" << m->get_orig_source_inst() << ")";
+ mon->get_logclient()->log(LOG_DEBUG, ss);
+ mon->get_logclient()->log(LOG_DEBUG, ss);
dout(7) << "prepare_alive e" << m->map_epoch << " from " << m->get_orig_source_inst() << dendl;
pending_inc.new_up_thru[from] = m->map_epoch;
paxos->wait_for_commit(new C_Alive(this,m ));