]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
core: resurrect the old check on dout's levels where possible.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 12 Feb 2018 18:58:51 +0000 (19:58 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 27 Feb 2018 10:38:48 +0000 (11:38 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
15 files changed:
src/common/LogClient.cc
src/common/dout.h
src/kv/RocksDBStore.cc
src/log/SubsystemMap.h
src/mds/MDCache.cc
src/mds/Mantle.cc
src/mgr/PyModuleRunner.cc
src/mon/MDSMonitor.cc
src/mon/MDSMonitor.h
src/msg/Message.cc
src/objclass/class_api.cc
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h
src/rgw/rgw_sync_trace.cc
src/test/librados_test_stub/LibradosTestStub.cc

index 6ffa753623a83971af6f6d4bcad18dc87021e9e9..de19cfb62aeadef854f7006d0ce799e48f9afb9e 100644 (file)
@@ -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
index 5fb93e9030fc8d4ba9cb7323a47a92e9e39dd8a1..5651f37797b04b5b0d9e60e5847952cb094ed0f5 100644 (file)
@@ -72,10 +72,14 @@ struct is_dynamic<dynamic_marker_t<T>> : public std::true_type {};
 #define dout_impl(cct, sub, v)                                         \
   do {                                                                 \
   const bool should_gather = [&](const auto cctX) {                    \
-    if constexpr (ceph::dout::is_dynamic<decltype(sub)>::value) {      \
+    if constexpr (ceph::dout::is_dynamic<decltype(sub)>::value ||      \
+                 ceph::dout::is_dynamic<decltype(v)>::value) {         \
       return cctX->_conf->subsys.should_gather(sub, v);                        \
     } else {                                                           \
-      return cctX->_conf->subsys.template should_gather<sub>(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<sub, v>());   \
     }                                                                  \
   }(cct);                                                              \
                                                                        \
index 2dadc925024816af4aca6b663cb8a863d27af3d7..148652a5106d557b28dadd67aeee0329c8a52d34 100644 (file)
@@ -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;
index c7740ccb0bdaff5d6fd8d022dec38af30756203f..5266df7bc310dad93feff63b78f563dbf46c9c94 100644 (file)
@@ -73,10 +73,11 @@ public:
     return ceph_subsys_get_as_array()[subsys].name;
   }
 
-  template <unsigned SubV>
-  bool should_gather(int level) {
+  template <unsigned SubV, int LvlV>
+  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());
index de600c84f02bb87146d49a9967b4a2b4c8cbaec6..8db5acac793dedf4577f75591d949540eb3ab6ce 100644 (file)
@@ -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);
index 24118ca3dadbd58bac1cf0ad2c3904f97d752828..08e601770c63c27430061d6c8801ab703378f7c9 100644 (file)
@@ -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;
 }
 
index 5b98a70279a45d4287cb00d66ce7e07691e65d2d..f500ad475c7238545b56aaf7be740fdb8facadea 100644 (file)
@@ -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__ << " "
 }
index c5a91cf4a8c43f51fb3cfcfb6810926d5abb59b3..3a52150b3e881ecc0326de72a9bf0f5f3e28de34 100644 (file)
@@ -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 <int dblV = 7>
+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();
   }
index 760bdeebbeb92cd0eb16c16555a5c4775724ae35..f503b225b9e50cfd111ebddc7c7cca3f7ba993c2 100644 (file)
@@ -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<int dblV = 7>
+  void print_map(FSMap &m);
 
   void _updated(MonOpRequestRef op);
 
index 11ad14ae28c74dbb1c78abd382bfbbaa54e4959f..c5a462b2ade146ccc33cf27d7373696136192c6e 100644 (file)
@@ -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)
index 496f80d384b7d028cf45d1ea2c56baf832fae252..8894cb89fd78bd839bede8ce4813a1cd0908e07c 100644 (file)
@@ -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;
index 548cc377ec6b9d3684689bc3fd5722e58542e177..67ce77bd960e8db2fa0d5a31af5fa7c2398b766e 100644 (file)
@@ -1618,10 +1618,11 @@ bool BlueStore::OnodeSpace::map_any(std::function<bool(OnodeRef)> f)
   return false;
 }
 
-void BlueStore::OnodeSpace::dump(CephContext *cct, int lvl)
+template <int LogLevelV = 30>
+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 <int LogLevelV = 30>
+void BlueStore::SharedBlobSet::dump(CephContext *cct)
 {
   std::lock_guard<std::mutex> 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 <int LogLevelV = 30>
+void BlueStore::_dump_onode(const OnodeRef& o)
 {
-  if (!cct->_conf->subsys.should_gather(ceph_subsys_bluestore, log_level))
+  if (!cct->_conf->subsys.should_gather<ceph_subsys_bluestore, LogLevelV>())
     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<LogLevelV>(o->extent_map);
 }
 
-void BlueStore::_dump_extent_map(ExtentMap &em, int log_level)
+template <int LogLevelV = 30>
+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<std::recursive_mutex> 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 <int LogLevelV = 30>
+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());
index 098fd8853148d6a4dc745eefe7a00ccd134893cb..f0b6bc00e9d44e188a658e4b12e0b11c20541adb 100644 (file)
@@ -469,7 +469,8 @@ public:
       return sb_map.empty();
     }
 
-    void dump(CephContext *cct, int lvl);
+    template <int LogLevelV>
+    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 <int LogLevelV>
+    void dump(CephContext *cct);
 
     /// return true if f true for any item
     bool map_any(std::function<bool(OnodeRef)> 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 <int LogLevelV = 30> void _dump_onode(const OnodeRef& o);
+  template <int LogLevelV = 30> void _dump_extent_map(ExtentMap& em);
+  template <int LogLevelV = 30> void _dump_transaction(Transaction *t);
 
   TransContext *_txc_create(Collection *c, OpSequencer *osr);
   void _txc_update_store_statfs(TransContext *txc);
index 3477f072f1c588c9ab371625467269b647eb1b8e..38219f9cd6d0c824f138730d68cddd8456daf29f 100644 (file)
@@ -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;
   }
 }
 
index ba2171f6df4247cc275b66e6b5eed10892db70d4..2d88f884432b5128e6636ff3e4f8ebe783f24d5a 100644 (file)
@@ -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;