From: Radoslaw Zarzynski Date: Mon, 12 Feb 2018 18:58:51 +0000 (+0100) Subject: core: resurrect the old check on dout's levels where possible. X-Git-Tag: v13.0.2~150^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1a3e935774b2ff02acfda9bb0ffea0b85ff3edbc;p=ceph.git core: resurrect the old check on dout's levels where possible. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/common/LogClient.cc b/src/common/LogClient.cc index 6ffa753623a8..de19cfb62aea 100644 --- a/src/common/LogClient.cc +++ b/src/common/LogClient.cc @@ -212,8 +212,11 @@ void LogChannel::do_log(clog_type prio, std::stringstream& ss) void LogChannel::do_log(clog_type prio, const std::string& s) { Mutex::Locker l(channel_lock); - int lvl = (prio == CLOG_ERROR ? -1 : 0); - ldout(cct,lvl) << "log " << prio << " : " << s << dendl; + if (CLOG_ERROR == prio) { + ldout(cct,-1) << "log " << prio << " : " << s << dendl; + } else { + ldout(cct,0) << "log " << prio << " : " << s << dendl; + } LogEntry e; e.stamp = ceph_clock_now(); // seq and who should be set for syslog/graylog/log_to_mon diff --git a/src/common/dout.h b/src/common/dout.h index 5fb93e9030fc..5651f37797b0 100644 --- a/src/common/dout.h +++ b/src/common/dout.h @@ -72,10 +72,14 @@ struct is_dynamic> : public std::true_type {}; #define dout_impl(cct, sub, v) \ do { \ const bool should_gather = [&](const auto cctX) { \ - if constexpr (ceph::dout::is_dynamic::value) { \ + if constexpr (ceph::dout::is_dynamic::value || \ + ceph::dout::is_dynamic::value) { \ return cctX->_conf->subsys.should_gather(sub, v); \ } else { \ - return cctX->_conf->subsys.template should_gather(v); \ + /* The parentheses are **essential** because commas in angle \ + * brackets are NOT ignored on macro expansion! A language's \ + * limitation, sorry. */ \ + return (cctX->_conf->subsys.template should_gather()); \ } \ }(cct); \ \ diff --git a/src/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc index 2dadc9250248..148652a5106d 100644 --- a/src/kv/RocksDBStore.cc +++ b/src/kv/RocksDBStore.cc @@ -178,7 +178,7 @@ public: void Logv(const rocksdb::InfoLogLevel log_level, const char* format, va_list ap) override { int v = rocksdb::NUM_INFO_LOG_LEVELS - log_level - 1; - dout(v); + dout(ceph::dout::need_dynamic(v)); char buf[65536]; vsnprintf(buf, sizeof(buf), format, ap); *_dout << buf << dendl; diff --git a/src/log/SubsystemMap.h b/src/log/SubsystemMap.h index c7740ccb0bda..5266df7bc310 100644 --- a/src/log/SubsystemMap.h +++ b/src/log/SubsystemMap.h @@ -73,10 +73,11 @@ public: return ceph_subsys_get_as_array()[subsys].name; } - template - bool should_gather(int level) { + template + bool should_gather() { static_assert(SubV < get_num(), "wrong subsystem ID"); - return level <= m_gather_levels[SubV]; + static_assert(LvlV >= -1 && LvlV <= 200); + return LvlV <= m_gather_levels[SubV]; } bool should_gather(const unsigned sub, int level) { assert(sub < m_subsys.size()); diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index de600c84f02b..8db5acac793d 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -11777,7 +11777,8 @@ void MDCache::show_subtrees(int dbl) return; // i won't print anything. if (subtrees.empty()) { - dout(dbl) << "show_subtrees - no subtrees" << dendl; + dout(ceph::dout::need_dynamic(dbl)) << "show_subtrees - no subtrees" + << dendl; return; } @@ -11866,7 +11867,8 @@ void MDCache::show_subtrees(int dbl) snprintf(s, sizeof(s), "%2d,%2d", int(dir->get_dir_auth().first), int(dir->get_dir_auth().second)); // print - dout(dbl) << indent << "|_" << pad << s << " " << auth << *dir << dendl; + dout(ceph::dout::need_dynamic(dbl)) << indent << "|_" << pad << s + << " " << auth << *dir << dendl; if (dir->ino() == MDS_INO_ROOT) assert(dir->inode == root); diff --git a/src/mds/Mantle.cc b/src/mds/Mantle.cc index 24118ca3dadb..08e601770c63 100644 --- a/src/mds/Mantle.cc +++ b/src/mds/Mantle.cc @@ -40,7 +40,8 @@ static int dout_wrapper(lua_State *L) { int level = luaL_checkinteger(L, 1); lua_concat(L, lua_gettop(L)-1); - mantle_dout(level) << lua_tostring(L, 2) << mantle_dendl; + mantle_dout(ceph::dout::need_dynamic(level)) << lua_tostring(L, 2) + << mantle_dendl; return 0; } diff --git a/src/mgr/PyModuleRunner.cc b/src/mgr/PyModuleRunner.cc index 5b98a70279a4..f500ad475c72 100644 --- a/src/mgr/PyModuleRunner.cc +++ b/src/mgr/PyModuleRunner.cc @@ -100,7 +100,7 @@ void PyModuleRunner::log(int level, const std::string &record) { #undef dout_prefix #define dout_prefix *_dout << "mgr[" << get_name() << "] " - dout(level) << record << dendl; + dout(ceph::dout::need_dynamic(level)) << record << dendl; #undef dout_prefix #define dout_prefix *_dout << "mgr " << __func__ << " " } diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index c5a91cf4a8c4..3a52150b3e88 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -76,9 +76,10 @@ template<> bool cmd_getval(CephContext *cct, const cmdmap_t& cmdmap, // my methods -void MDSMonitor::print_map(FSMap &m, int dbl) +template +void MDSMonitor::print_map(FSMap &m) { - dout(dbl) << "print_map\n"; + dout(dblV) << "print_map\n"; m.print(*_dout); *_dout << dendl; } @@ -120,7 +121,7 @@ void MDSMonitor::update_from_paxos(bool *need_bootstrap) // new map dout(4) << "new map" << dendl; - print_map(fsmap, 0); + print_map<0>(fsmap); if (!g_conf->mon_mds_skip_sanity) { fsmap.sanity(); } @@ -152,7 +153,7 @@ void MDSMonitor::encode_pending(MonitorDBStore::TransactionRef t) // print map iff 'debug mon = 30' or higher - print_map(pending_fsmap, 30); + print_map<30>(pending_fsmap); if (!g_conf->mon_mds_skip_sanity) { pending_fsmap.sanity(); } diff --git a/src/mon/MDSMonitor.h b/src/mon/MDSMonitor.h index 760bdeebbeb9..f503b225b9e5 100644 --- a/src/mon/MDSMonitor.h +++ b/src/mon/MDSMonitor.h @@ -73,7 +73,8 @@ class MDSMonitor : public PaxosService { FSMap pending_fsmap; // current + pending updates // my helpers - void print_map(FSMap &m, int dbl=7); + template + void print_map(FSMap &m); void _updated(MonOpRequestRef op); diff --git a/src/msg/Message.cc b/src/msg/Message.cc index 11ad14ae28c7..c5a462b2ade1 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -841,7 +841,8 @@ Message *decode_message(CephContext *cct, int crcflags, lderr(cct) << "failed to decode message of type " << type << " v" << header.version << ": " << e.what() << dendl; - ldout(cct, cct->_conf->ms_dump_corrupt_message_level) << "dump: \n"; + ldout(cct, ceph::dout::need_dynamic( + cct->_conf->ms_dump_corrupt_message_level)) << "dump: \n"; m->get_payload().hexdump(*_dout); *_dout << dendl; if (cct->_conf->ms_die_on_bad_msg) diff --git a/src/objclass/class_api.cc b/src/objclass/class_api.cc index 496f80d384b7..8894cb89fd78 100644 --- a/src/objclass/class_api.cc +++ b/src/objclass/class_api.cc @@ -716,7 +716,7 @@ int cls_log(int level, const char *format, ...) va_end(ap); #define MAX_SIZE 8196 if ((n > -1 && n < size) || size > MAX_SIZE) { - ldout(ch->cct, level) << buf << dendl; + ldout(ch->cct, ceph::dout::need_dynamic(level)) << buf << dendl; return n; } size *= 2; diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 548cc377ec6b..67ce77bd960e 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -1618,10 +1618,11 @@ bool BlueStore::OnodeSpace::map_any(std::function f) return false; } -void BlueStore::OnodeSpace::dump(CephContext *cct, int lvl) +template +void BlueStore::OnodeSpace::dump(CephContext *cct) { for (auto& i : onode_map) { - ldout(cct, lvl) << i.first << " : " << i.second << dendl; + ldout(cct, LogLevelV) << i.first << " : " << i.second << dendl; } } @@ -1703,11 +1704,12 @@ void BlueStore::SharedBlob::put_ref(uint64_t offset, uint32_t length, #undef dout_prefix #define dout_prefix *_dout << "bluestore.sharedblobset(" << this << ") " -void BlueStore::SharedBlobSet::dump(CephContext *cct, int lvl) +template +void BlueStore::SharedBlobSet::dump(CephContext *cct) { std::lock_guard l(lock); for (auto& i : sb_map) { - ldout(cct, lvl) << i.first << " : " << *i.second << dendl; + ldout(cct, LogLevelV) << i.first << " : " << *i.second << dendl; } } @@ -6051,7 +6053,7 @@ int BlueStore::_fsck(bool deep, bool repair) ++num_objects; num_spanning_blobs += o->extent_map.spanning_blob_map.size(); o->extent_map.fault_range(db, 0, OBJECT_MAX_SIZE); - _dump_onode(o, 30); + _dump_onode(o); // shards if (!o->extent_map.shards.empty()) { ++num_sharded_objects; @@ -6376,7 +6378,7 @@ int BlueStore::_fsck(bool deep, bool repair) if (misref_extents.intersects(e.offset, e.length)) { if (first_dump) { first_dump = false; - _dump_onode(o, 10); + _dump_onode<10>(o); } broken_blob = true; break; @@ -9628,7 +9630,7 @@ void BlueStore::_txc_add_transaction(TransContext *txc, Transaction *t) derr << __func__ << " error " << cpp_strerror(r) << " not handled on operation " << op->op << " (op " << pos << ", counting from 0)" << dendl; - _dump_transaction(t, 0); + _dump_transaction<0>(t); assert(0 == "unexpected error"); } @@ -9872,7 +9874,7 @@ void BlueStore::_txc_add_transaction(TransContext *txc, Transaction *t) << " (op " << pos << ", counting from 0)" << dendl; derr << msg << dendl; - _dump_transaction(t, 0); + _dump_transaction<0>(t); assert(0 == "unexpected error"); } } @@ -9896,11 +9898,12 @@ int BlueStore::_touch(TransContext *txc, return r; } -void BlueStore::_dump_onode(const OnodeRef& o, int log_level) +template +void BlueStore::_dump_onode(const OnodeRef& o) { - if (!cct->_conf->subsys.should_gather(ceph_subsys_bluestore, log_level)) + if (!cct->_conf->subsys.should_gather()) return; - dout(log_level) << __func__ << " " << o << " " << o->oid + dout(LogLevelV) << __func__ << " " << o << " " << o->oid << " nid " << o->onode.nid << " size 0x" << std::hex << o->onode.size << " (" << std::dec << o->onode.size << ")" @@ -9913,23 +9916,24 @@ void BlueStore::_dump_onode(const OnodeRef& o, int log_level) for (auto p = o->onode.attrs.begin(); p != o->onode.attrs.end(); ++p) { - dout(log_level) << __func__ << " attr " << p->first + dout(LogLevelV) << __func__ << " attr " << p->first << " len " << p->second.length() << dendl; } - _dump_extent_map(o->extent_map, log_level); + _dump_extent_map(o->extent_map); } -void BlueStore::_dump_extent_map(ExtentMap &em, int log_level) +template +void BlueStore::_dump_extent_map(ExtentMap &em) { uint64_t pos = 0; for (auto& s : em.shards) { - dout(log_level) << __func__ << " shard " << *s.shard_info + dout(LogLevelV) << __func__ << " shard " << *s.shard_info << (s.loaded ? " (loaded)" : "") << (s.dirty ? " (dirty)" : "") << dendl; } for (auto& e : em.extent_map) { - dout(log_level) << __func__ << " " << e << dendl; + dout(LogLevelV) << __func__ << " " << e << dendl; assert(e.logical_offset >= pos); pos = e.logical_offset + e.length; const bluestore_blob_t& blob = e.blob->get_blob(); @@ -9938,21 +9942,22 @@ void BlueStore::_dump_extent_map(ExtentMap &em, int log_level) unsigned n = blob.get_csum_count(); for (unsigned i = 0; i < n; ++i) v.push_back(blob.get_csum_item(i)); - dout(log_level) << __func__ << " csum: " << std::hex << v << std::dec + dout(LogLevelV) << __func__ << " csum: " << std::hex << v << std::dec << dendl; } std::lock_guard l(e.blob->shared_blob->get_cache()->lock); for (auto& i : e.blob->shared_blob->bc.buffer_map) { - dout(log_level) << __func__ << " 0x" << std::hex << i.first + dout(LogLevelV) << __func__ << " 0x" << std::hex << i.first << "~" << i.second->length << std::dec << " " << *i.second << dendl; } } } -void BlueStore::_dump_transaction(Transaction *t, int log_level) +template +void BlueStore::_dump_transaction(Transaction *t) { - dout(log_level) << __func__ << " transaction dump:\n"; + dout(LogLevelV) << __func__ << " transaction dump:\n"; JSONFormatter f(true); f.open_object_section("transaction"); t->dump(&f); @@ -11110,7 +11115,7 @@ void BlueStore::_do_truncate( dout(15) << __func__ << " " << c->cid << " " << o->oid << " 0x" << std::hex << offset << std::dec << dendl; - _dump_onode(o, 30); + _dump_onode(o); if (offset == o->onode.size) return; @@ -12101,11 +12106,11 @@ void BlueStore::_flush_cache() for (auto& p : coll_map) { if (!p.second->onode_map.empty()) { derr << __func__ << "stray onodes on " << p.first << dendl; - p.second->onode_map.dump(cct, 0); + p.second->onode_map.dump<0>(cct); } if (!p.second->shared_blob_set.empty()) { derr << __func__ << " stray shared blobs on " << p.first << dendl; - p.second->shared_blob_set.dump(cct, 0); + p.second->shared_blob_set.dump<0>(cct); } assert(p.second->onode_map.empty()); assert(p.second->shared_blob_set.empty()); diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 098fd8853148..f0b6bc00e9d4 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -469,7 +469,8 @@ public: return sb_map.empty(); } - void dump(CephContext *cct, int lvl); + template + void dump(CephContext *cct); }; //#define CACHE_BLOB_BL // not sure if this is a win yet or not... :/ @@ -1336,7 +1337,8 @@ public: void clear(); bool empty(); - void dump(CephContext *cct, int lvl); + template + void dump(CephContext *cct); /// return true if f true for any item bool map_any(std::function f); @@ -2011,9 +2013,9 @@ private: void _assign_nid(TransContext *txc, OnodeRef o); uint64_t _assign_blobid(TransContext *txc); - void _dump_onode(const OnodeRef& o, int log_level=30); - void _dump_extent_map(ExtentMap& em, int log_level=30); - void _dump_transaction(Transaction *t, int log_level = 30); + template void _dump_onode(const OnodeRef& o); + template void _dump_extent_map(ExtentMap& em); + template void _dump_transaction(Transaction *t); TransContext *_txc_create(Collection *c, OpSequencer *osr); void _txc_update_store_statfs(TransContext *txc); diff --git a/src/rgw/rgw_sync_trace.cc b/src/rgw/rgw_sync_trace.cc index 3477f072f1c5..38219f9cd6d0 100644 --- a/src/rgw/rgw_sync_trace.cc +++ b/src/rgw/rgw_sync_trace.cc @@ -41,9 +41,11 @@ void RGWSyncTraceNode::log(int level, const string& s) history.push_back(status); /* dump output on either rgw_sync, or rgw -- but only once */ if (cct->_conf->subsys.should_gather(ceph_subsys_rgw_sync, level)) { - lsubdout(cct, rgw_sync, level) << "RGW-SYNC:" << to_str() << dendl; + lsubdout(cct, rgw_sync, + ceph::dout::need_dynamic(level)) << "RGW-SYNC:" << to_str() << dendl; } else { - lsubdout(cct, rgw, level) << "RGW-SYNC:" << to_str() << dendl; + lsubdout(cct, rgw, + ceph::dout::need_dynamic(level)) << "RGW-SYNC:" << to_str() << dendl; } } diff --git a/src/test/librados_test_stub/LibradosTestStub.cc b/src/test/librados_test_stub/LibradosTestStub.cc index ba2171f6df42..2d88f884432b 100644 --- a/src/test/librados_test_stub/LibradosTestStub.cc +++ b/src/test/librados_test_stub/LibradosTestStub.cc @@ -1351,7 +1351,7 @@ int cls_log(int level, const char *format, ...) { int n = vsnprintf(buf, size, format, ap); va_end(ap); if ((n > -1 && n < size) || size > 8196) { - dout(level) << buf << dendl; + dout(ceph::dout::need_dynamic(level)) << buf << dendl; return n; } size *= 2;