]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cmon: add logclient, mount/unmount messsages
authorYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 27 Mar 2009 18:51:00 +0000 (11:51 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 27 Mar 2009 18:51:00 +0000 (11:51 -0700)
src/include/LogEntry.h
src/mon/ClientMonitor.cc
src/mon/LogMonitor.cc
src/mon/Monitor.cc
src/mon/Monitor.h

index 29e86cf4a831f67e6dd163f71f1310ffa3385c2a..0717db427b649afc1b4adc8103272b2b4d8a4b34 100644 (file)
@@ -21,8 +21,9 @@
 typedef enum {
   LOG_DEBUG = 0,
   LOG_INFO = 1,
-  LOG_WARN = 2,
-  LOG_ERROR = 3,
+  LOG_SEC = 2,
+  LOG_WARN = 3,
+  LOG_ERROR = 4,
 } log_type;
 
 struct LogEntry {
@@ -63,6 +64,8 @@ inline ostream& operator<<(ostream& out, const log_type& t)
     return out << "[WRN]";
   case LOG_ERROR:
     return out << "[ERR]";
+  case LOG_SEC:
+    return out << "[SEC]";
   default:
     return out << "[???]";
   }
index 2cb69cbcc21bef1f511c4102b53bae033370e637..a243ae2b6454d9ed5ce433cdc46c769294482208 100644 (file)
@@ -130,16 +130,23 @@ void ClientMonitor::encode_pending(bufferlist &bl)
 
 bool ClientMonitor::check_mount(MClientMount *m)
 {
+    stringstream ss;
     // already mounted?
     entity_addr_t addr = m->get_orig_source_addr();
     ExportControl *ec = conf_get_export_control();
     if (ec && (!ec->is_authorized(&addr, "/"))) {
       dout(0) << "client is not authorized to mount" << dendl;
+      ss << "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)) {
        int client = client_map.addr_client[addr];
        dout(7) << " client" << client << " already mounted" << dendl;
+        ss << "client " << client << "is already mounted";
+        mon->get_logclient()->log(LOG_INFO, ss);
+        mon->get_logclient()->send_log();
        _mounted(client, m);
        return true;
     }
@@ -179,6 +186,7 @@ bool ClientMonitor::preprocess_query(Message *m)
 
 bool ClientMonitor::prepare_update(Message *m)
 {
+  stringstream ss;
   dout(10) << "prepare_update " << *m << " from " << m->get_orig_source_inst() << dendl;
   
   switch (m->get_type()) {
@@ -211,6 +219,9 @@ bool ClientMonitor::prepare_update(Message *m)
       ::encode(info.ticket, info.signed_ticket);
       pending_inc.add_mount(client, info);
       paxos->wait_for_commit(new C_Mounted(this, client, (MClientMount*)m));
+      ss << "client " << client << " mounted";
+      mon->get_logclient()->log(LOG_INFO, ss);
+      mon->get_logclient()->send_log();
     }
     return true;
 
@@ -223,6 +234,9 @@ bool ClientMonitor::prepare_update(Message *m)
       
       pending_inc.add_unmount(client);
       paxos->wait_for_commit(new C_Unmounted(this, (MClientUnmount*)m));
+      ss << "client " << client << " unmounted";
+      mon->get_logclient()->log(LOG_INFO, ss);
+      mon->get_logclient()->send_log();
     }
     return true;
   
index b665132c031f06acb1c045ddda6639847caab7b6..5fdee174546490bc9ab826449eaee6f72e8bc77a 100644 (file)
@@ -104,6 +104,7 @@ bool LogMonitor::update_from_paxos()
   bufferlist bloginfo;
   bufferlist blogwarn;
   bufferlist blogerr;
+  bufferlist blogsec;
 
   // walk through incrementals
   while (paxosv > log_version) {
@@ -128,10 +129,14 @@ bool LogMonitor::update_from_paxos()
        blogdebug.append(s);
       if (le.type >= LOG_INFO)
        bloginfo.append(s);
+      if (le.type == LOG_SEC)
+        blogsec.append(s);
       if (le.type >= LOG_WARN)
        blogwarn.append(s);
       if (le.type >= LOG_ERROR)
        blogerr.append(s);
+      if (le.type >= LOG_ERROR)
+       blogerr.append(s);
     }
 
     log_version++;
@@ -143,6 +148,8 @@ bool LogMonitor::update_from_paxos()
     mon->store->append_bl_ss(blogdebug, "log.debug", NULL);
   if (bloginfo.length())
     mon->store->append_bl_ss(bloginfo, "log.info", NULL);
+  if (blogsec.length())
+    mon->store->append_bl_ss(bloginfo, "log.security", NULL);
   if (blogwarn.length())
     mon->store->append_bl_ss(blogwarn, "log.warn", NULL);
   if (blogerr.length())
index 53ed06603c46763e6aba4f5cb761f90d1bb60168..8efd7b1667b3498af1c3c4ea96966d82384ee44e 100644 (file)
@@ -67,6 +67,7 @@ Monitor::Monitor(int w, MonitorStore *s, Messenger *m, MonMap *map) :
   messenger(m),
   lock("Monitor::lock"),
   monmap(map),
+  logclient(messenger, monmap),
   timer(lock), tick_timer(0),
   store(s),
   
@@ -114,6 +115,7 @@ void Monitor::init()
   
   // i'm ready!
   messenger->set_dispatcher(this);
+  link_dispatcher(&logclient);
   
   // start ticker
   reset_tick();
@@ -146,6 +148,8 @@ void Monitor::shutdown()
   cancel_tick();
   timer.cancel_all();
   timer.join();  
+
+  unlink_dispatcher(&logclient);
   
   // die.
   messenger->shutdown();
index a3afb9293037028a0596e5f9bbe68dc0e2edc5cb..ae3467ccb365cd6ab04bff5a5b11842d26b01a79 100644 (file)
@@ -34,6 +34,8 @@
 
 #include "osd/OSDMap.h"
 
+#include "common/LogClient.h"
+
 
 class MonitorStore;
 
@@ -51,6 +53,8 @@ public:
 
   MonMap *monmap;
 
+  LogClient logclient;
+
   // timer.
   SafeTimer timer;
   Context *tick_timer;
@@ -163,6 +167,7 @@ public:
 
   int mkfs(bufferlist& osdmapbl);
 
+  LogClient *get_logclient() { return &logclient; }
 };
 
 #endif