From: Yehuda Sadeh Date: Fri, 27 Mar 2009 18:51:00 +0000 (-0700) Subject: cmon: add logclient, mount/unmount messsages X-Git-Tag: v0.7.2~18 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=694582ff42d7c8c9bfc136d7b784630f4ef35d2d;p=ceph.git cmon: add logclient, mount/unmount messsages --- diff --git a/src/include/LogEntry.h b/src/include/LogEntry.h index 29e86cf4a831f..0717db427b649 100644 --- a/src/include/LogEntry.h +++ b/src/include/LogEntry.h @@ -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 << "[???]"; } diff --git a/src/mon/ClientMonitor.cc b/src/mon/ClientMonitor.cc index 2cb69cbcc21be..a243ae2b6454d 100644 --- a/src/mon/ClientMonitor.cc +++ b/src/mon/ClientMonitor.cc @@ -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; diff --git a/src/mon/LogMonitor.cc b/src/mon/LogMonitor.cc index b665132c031f0..5fdee17454649 100644 --- a/src/mon/LogMonitor.cc +++ b/src/mon/LogMonitor.cc @@ -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()) diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 53ed06603c467..8efd7b1667b34 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -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(); diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index a3afb92930370..ae3467ccb365c 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -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