]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: add logclient state changes
authorYehuda Sadeh <yehuda@hq.newdream.net>
Sat, 28 Mar 2009 01:10:15 +0000 (18:10 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Sat, 28 Mar 2009 01:10:15 +0000 (18:10 -0700)
src/common/LogClient.cc
src/common/LogClient.h
src/mon/ClientMonitor.cc
src/mon/Monitor.cc
src/mon/OSDMonitor.cc

index ffd5e34b816b0a21c610a371f03d8edb28c8f57a..039feb1c60df56c5aeab3b6dc521e9b35311ac01 100644 (file)
@@ -62,11 +62,19 @@ void LogClient::log(log_type type, string& s)
   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);
index 3dcc448cb165d5abd591a461950f25acfa771ce7..87e39d6f0a01279351ed8f36f61d25e3ec2958a9 100644 (file)
@@ -33,6 +33,8 @@ class LogClient : public Dispatcher {
   MonMap *monmap;
 
   bool dispatch_impl(Message *m);
+  bool is_synchronous;
+  void _send_log();
  public:
 
   // -- log --
@@ -45,9 +47,10 @@ class LogClient : public Dispatcher {
   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) { }
 };
 
index 57058162dbe08187a106ad5b7683dbb0b0c54fda..4330ffe8b76e15fd8668c1c19ee3f0b1490f8f58 100644 (file)
@@ -138,7 +138,6 @@ bool ClientMonitor::check_mount(MClientMount *m)
       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)) {
@@ -146,7 +145,6 @@ bool ClientMonitor::check_mount(MClientMount *m)
        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;
     }
@@ -227,7 +225,6 @@ bool ClientMonitor::prepare_update(Message *m)
       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;
 
@@ -242,7 +239,6 @@ bool ClientMonitor::prepare_update(Message *m)
       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;
   
index 8efd7b1667b3498af1c3c4ea96966d82384ee44e..855fd09e4e2de33135f7603c8dd86adc5dff7571 100644 (file)
@@ -112,6 +112,8 @@ void Monitor::init()
   // 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);
index b8c9fed670986fa43e88214cff3e282a8c6fb682..7a43c6a3933fb865562afe8ed5b2cfaa4b4301a4 100644 (file)
@@ -423,7 +423,11 @@ bool OSDMonitor::preprocess_failure(MOSDFailure *m)
 
 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
@@ -478,7 +482,11 @@ bool OSDMonitor::preprocess_boot(MOSDBoot *m)
 
 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();
   
@@ -568,7 +576,11 @@ bool OSDMonitor::preprocess_alive(MOSDAlive *m)
 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 ));