From: Sage Weil Date: Mon, 3 Nov 2014 09:24:25 +0000 (-0800) Subject: osd: add 'cluster_log [type] [message ...]' tell command X-Git-Tag: v0.89~42^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=84fec864cafbe4fc86bc9ddda5143395837602e5;p=ceph.git osd: add 'cluster_log [type] [message ...]' tell command Useful for debugging. Signed-off-by: Sage Weil --- diff --git a/src/common/LogClient.h b/src/common/LogClient.h index 8d808239992ff..c5acfcb34b32c 100644 --- a/src/common/LogClient.h +++ b/src/common/LogClient.h @@ -133,10 +133,10 @@ public: typedef shared_ptr Ref; -private: void do_log(clog_type prio, std::stringstream& ss); void do_log(clog_type prio, const std::string& s); +private: CephContext *cct; LogClient *parent; Mutex channel_lock; diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 322cf5c0f6b2d..5747257c22893 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4943,6 +4943,11 @@ COMMAND("injectargs " \ "name=injected_args,type=CephString,n=N", "inject configuration arguments into running OSD", "osd", "rw", "cli,rest") +COMMAND("cluster_log " \ + "name=level,type=CephChoices,strings=error,warning,info,debug " \ + "name=message,type=CephString,n=N", + "log a message to the cluster log", + "osd", "rw", "cli,rest") COMMAND("bench " \ "name=count,type=CephInt,req=false " \ "name=size,type=CephInt,req=false ", \ @@ -5046,6 +5051,27 @@ void OSD::do_command(Connection *con, ceph_tid_t tid, vector& cmd, buffe cct->_conf->injectargs(args, &ss); osd_lock.Lock(); } + else if (prefix == "cluster_log") { + vector msg; + cmd_getval(cct, cmdmap, "message", msg); + if (msg.empty()) { + r = -EINVAL; + ss << "ignoring empty log message"; + goto out; + } + string message = msg.front(); + for (vector::iterator a = ++msg.begin(); a != msg.end(); ++a) + message += " " + *a; + string lvl; + cmd_getval(cct, cmdmap, "level", lvl); + clog_type level = string_to_clog_type(lvl); + if (level < 0) { + r = -EINVAL; + ss << "unknown level '" << lvl << "'"; + goto out; + } + clog->do_log(level, message); + } // either 'pg ' or // 'tell ' (which comes in without any of that prefix)?