From: Sage Weil Date: Wed, 22 Mar 2017 01:24:24 +0000 (-0500) Subject: mgr/MgrStandby: add LogClient X-Git-Tag: v12.0.2~252^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d3a10d35120445bbf994b0a062f21af891a33440;p=ceph.git mgr/MgrStandby: add LogClient Signed-off-by: Sage Weil --- diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index 1a0bd404e16b..efd453d9051c 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -28,9 +28,11 @@ #define dout_prefix *_dout << "mgr.server " << __func__ << " " DaemonServer::DaemonServer(MonClient *monc_, - DaemonStateIndex &daemon_state_, - ClusterState &cluster_state_, - PyModules &py_modules_) + DaemonStateIndex &daemon_state_, + ClusterState &cluster_state_, + PyModules &py_modules_, + LogChannelRef clog_, + LogChannelRef audit_clog_) : Dispatcher(g_ceph_context), client_byte_throttler(new Throttle(g_ceph_context, "mgr_client_bytes", g_conf->mgr_client_bytes)), @@ -53,6 +55,8 @@ DaemonServer::DaemonServer(MonClient *monc_, daemon_state(daemon_state_), cluster_state(cluster_state_), py_modules(py_modules_), + clog(clog_), + audit_clog(audit_clog_), auth_registry(g_ceph_context, g_conf->auth_supported.empty() ? g_conf->auth_cluster_required : diff --git a/src/mgr/DaemonServer.h b/src/mgr/DaemonServer.h index 160bd5939a83..4337d727dd59 100644 --- a/src/mgr/DaemonServer.h +++ b/src/mgr/DaemonServer.h @@ -20,6 +20,7 @@ #include #include "common/Mutex.h" +#include "common/LogClient.h" #include #include @@ -56,6 +57,7 @@ protected: DaemonStateIndex &daemon_state; ClusterState &cluster_state; PyModules &py_modules; + LogChannelRef clog, audit_clog; AuthAuthorizeHandlerRegistry auth_registry; @@ -78,9 +80,11 @@ public: entity_addr_t get_myaddr() const; DaemonServer(MonClient *monc_, - DaemonStateIndex &daemon_state_, - ClusterState &cluster_state_, - PyModules &py_modules_); + DaemonStateIndex &daemon_state_, + ClusterState &cluster_state_, + PyModules &py_modules_, + LogChannelRef cl, + LogChannelRef auditcl); ~DaemonServer() override; bool ms_dispatch(Message *m) override; diff --git a/src/mgr/Mgr.cc b/src/mgr/Mgr.cc index f9a513154462..cdbbb9d0953c 100644 --- a/src/mgr/Mgr.cc +++ b/src/mgr/Mgr.cc @@ -37,7 +37,8 @@ #define dout_prefix *_dout << "mgr " << __func__ << " " -Mgr::Mgr(MonClient *monc_, Messenger *clientm_, Objecter *objecter_) : +Mgr::Mgr(MonClient *monc_, Messenger *clientm_, Objecter *objecter_, + LogChannelRef clog_, LogChannelRef audit_clog_) : monc(monc_), objecter(objecter_), client_messenger(clientm_), @@ -47,7 +48,7 @@ Mgr::Mgr(MonClient *monc_, Messenger *clientm_, Objecter *objecter_) : waiting_for_fs_map(NULL), py_modules(daemon_state, cluster_state, *monc, finisher), cluster_state(monc, nullptr), - server(monc, daemon_state, cluster_state, py_modules), + server(monc, daemon_state, cluster_state, py_modules, clog_, audit_clog_), initialized(false), initializing(false) { diff --git a/src/mgr/Mgr.h b/src/mgr/Mgr.h index ffe1d1460c90..9c882ec35f97 100644 --- a/src/mgr/Mgr.h +++ b/src/mgr/Mgr.h @@ -69,7 +69,8 @@ protected: bool initializing; public: - Mgr(MonClient *monc_, Messenger *clientm_, Objecter *objecter_); + Mgr(MonClient *monc_, Messenger *clientm_, Objecter *objecter_, + LogChannelRef clog_, LogChannelRef audit_clog_); ~Mgr(); bool is_initialized() const {return initialized;} diff --git a/src/mgr/MgrStandby.cc b/src/mgr/MgrStandby.cc index 0d7034b5b778..843ecd0a3a08 100644 --- a/src/mgr/MgrStandby.cc +++ b/src/mgr/MgrStandby.cc @@ -36,12 +36,15 @@ MgrStandby::MgrStandby() : Dispatcher(g_ceph_context), monc(new MonClient(g_ceph_context)), + client_messenger(Messenger::create_client_messenger(g_ceph_context, "mgr")), + objecter(new Objecter(g_ceph_context, client_messenger, monc, NULL, 0, 0)), + log_client(g_ceph_context, client_messenger, &monc->monmap, LogClient::NO_FLAGS), + clog(log_client.create_channel(CLOG_CHANNEL_CLUSTER)), + audit_clog(log_client.create_channel(CLOG_CHANNEL_AUDIT)), lock("MgrStandby::lock"), timer(g_ceph_context, lock), active_mgr(nullptr) { - client_messenger = Messenger::create_client_messenger(g_ceph_context, "mgr"); - objecter = new Objecter(g_ceph_context, client_messenger, monc, NULL, 0, 0); } @@ -52,6 +55,41 @@ MgrStandby::~MgrStandby() delete client_messenger; } +const char** MgrStandby::get_tracked_conf_keys() const +{ + static const char* KEYS[] = { + // clog & admin clog + "clog_to_monitors", + "clog_to_syslog", + "clog_to_syslog_facility", + "clog_to_syslog_level", + "osd_objectstore_fuse", + "clog_to_graylog", + "clog_to_graylog_host", + "clog_to_graylog_port", + "host", + "fsid", + NULL + }; + return KEYS; +} + +void MgrStandby::handle_conf_change( + const struct md_config_t *conf, + const std::set &changed) +{ + if (changed.count("clog_to_monitors") || + changed.count("clog_to_syslog") || + changed.count("clog_to_syslog_level") || + changed.count("clog_to_syslog_facility") || + changed.count("clog_to_graylog") || + changed.count("clog_to_graylog_host") || + changed.count("clog_to_graylog_port") || + changed.count("host") || + changed.count("fsid")) { + _update_log_config(); + } +} int MgrStandby::init() { @@ -92,6 +130,9 @@ int MgrStandby::init() client_t whoami = monc->get_global_id(); client_messenger->set_myname(entity_name_t::CLIENT(whoami.v)); + monc->set_log_client(&log_client); + _update_log_config(); + objecter->set_client_incarnation(0); objecter->init(); client_messenger->add_dispatcher_head(objecter); @@ -151,6 +192,33 @@ void MgrStandby::shutdown() client_messenger->shutdown(); } +void MgrStandby::_update_log_config() +{ + map log_to_monitors; + map log_to_syslog; + map log_channel; + map log_prio; + map log_to_graylog; + map log_to_graylog_host; + map log_to_graylog_port; + uuid_d fsid; + string host; + + if (parse_log_client_options(cct, log_to_monitors, log_to_syslog, + log_channel, log_prio, log_to_graylog, + log_to_graylog_host, log_to_graylog_port, + fsid, host) == 0) { + clog->update_config(log_to_monitors, log_to_syslog, + log_channel, log_prio, log_to_graylog, + log_to_graylog_host, log_to_graylog_port, + fsid, host); + audit_clog->update_config(log_to_monitors, log_to_syslog, + log_channel, log_prio, log_to_graylog, + log_to_graylog_host, log_to_graylog_port, + fsid, host); + } +} + void MgrStandby::handle_mgr_map(MMgrMap* mmap) { auto map = mmap->get_map(); @@ -161,7 +229,7 @@ void MgrStandby::handle_mgr_map(MMgrMap* mmap) if (active_in_map) { if (!active_mgr) { dout(1) << "Activating!" << dendl; - active_mgr.reset(new Mgr(monc, client_messenger, objecter)); + active_mgr.reset(new Mgr(monc, client_messenger, objecter, clog, audit_clog)); active_mgr->background_init(); dout(1) << "I am now active" << dendl; } else { diff --git a/src/mgr/MgrStandby.h b/src/mgr/MgrStandby.h index 6fa524b87d93..89ede8cee2c4 100644 --- a/src/mgr/MgrStandby.h +++ b/src/mgr/MgrStandby.h @@ -18,6 +18,7 @@ #include "auth/Auth.h" #include "common/Finisher.h" #include "common/Timer.h" +#include "common/LogClient.h" #include "DaemonServer.h" #include "PyModules.h" @@ -28,11 +29,21 @@ class MMgrMap; class Mgr; -class MgrStandby : public Dispatcher { +class MgrStandby : public Dispatcher, + public md_config_obs_t { +public: + // config observer bits + const char** get_tracked_conf_keys() const override; + void handle_conf_change(const struct md_config_t *conf, + const std::set &changed) override; + protected: MonClient *monc; - Objecter *objecter; Messenger *client_messenger; + Objecter *objecter; + + LogClient log_client; + LogChannelRef clog, audit_clog; Mutex lock; SafeTimer timer; @@ -42,6 +53,7 @@ protected: std::string state_str(); void handle_mgr_map(MMgrMap *m); + void _update_log_config(); public: MgrStandby();