]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: to print the unknow type value 42088/head
authorXiubo Li <xiubli@redhat.com>
Mon, 7 Jun 2021 06:09:27 +0000 (14:09 +0800)
committerXiubo Li <xiubli@redhat.com>
Tue, 29 Jun 2021 06:06:13 +0000 (14:06 +0800)
Initialize the metric type when constructing the XXXPayload class,
and add one common base Payload class to simplify the code.

Fixes: https://tracker.ceph.com/issues/51113
Signed-off-by: Xiubo Li <xiubli@redhat.com>
(cherry picked from commit 562ba7877360226bbf09b33a9b0c5664c8d81c12)

Conflicts:
src/include/cephfs/metrics/Types.h
- Fixed minor conflict when printing the "client_metric_type".

src/include/cephfs/metrics/Types.h
src/mds/MetricsHandler.cc

index 0c12de7c3b199747f14d4b46719e763fcf33fab9..a004823c6a00a540d4dc2f2f7c6b3b6ee65d4551 100644 (file)
@@ -60,16 +60,31 @@ inline std::ostream &operator<<(std::ostream &os, const ClientMetricType &type)
   return os;
 }
 
-struct CapInfoPayload {
-  static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_CAP_INFO;
+struct ClientMetricPayloadBase {
+  ClientMetricPayloadBase(ClientMetricType type) : metric_type(type) {}
 
+  ClientMetricType get_type() const {
+    return metric_type;
+  }
+
+  void print_type(ostream *out) const {
+    *out << metric_type;
+  }
+
+  private:
+    ClientMetricType metric_type;
+};
+
+struct CapInfoPayload : public ClientMetricPayloadBase {
   uint64_t cap_hits = 0;
   uint64_t cap_misses = 0;
   uint64_t nr_caps = 0;
 
-  CapInfoPayload() { }
+  CapInfoPayload()
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_CAP_INFO) { }
   CapInfoPayload(uint64_t cap_hits, uint64_t cap_misses, uint64_t nr_caps)
-    : cap_hits(cap_hits), cap_misses(cap_misses), nr_caps(nr_caps) {
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_CAP_INFO),
+    cap_hits(cap_hits), cap_misses(cap_misses), nr_caps(nr_caps) {
   }
 
   void encode(bufferlist &bl) const {
@@ -103,14 +118,13 @@ struct CapInfoPayload {
   }
 };
 
-struct ReadLatencyPayload {
-  static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_READ_LATENCY;
-
+struct ReadLatencyPayload : public ClientMetricPayloadBase {
   utime_t lat;
 
-  ReadLatencyPayload() { }
+  ReadLatencyPayload()
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_READ_LATENCY) { }
   ReadLatencyPayload(utime_t lat)
-    : lat(lat) {
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_READ_LATENCY), lat(lat) {
   }
 
   void encode(bufferlist &bl) const {
@@ -136,14 +150,13 @@ struct ReadLatencyPayload {
   }
 };
 
-struct WriteLatencyPayload {
-  static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_WRITE_LATENCY;
-
+struct WriteLatencyPayload : public ClientMetricPayloadBase {
   utime_t lat;
 
-  WriteLatencyPayload() { }
+  WriteLatencyPayload()
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_WRITE_LATENCY) { }
   WriteLatencyPayload(utime_t lat)
-    : lat(lat) {
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_WRITE_LATENCY), lat(lat) {
   }
 
   void encode(bufferlist &bl) const {
@@ -169,14 +182,13 @@ struct WriteLatencyPayload {
   }
 };
 
-struct MetadataLatencyPayload {
-  static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_METADATA_LATENCY;
-
+struct MetadataLatencyPayload : public ClientMetricPayloadBase {
   utime_t lat;
 
-  MetadataLatencyPayload() { }
+  MetadataLatencyPayload()
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_METADATA_LATENCY) { }
   MetadataLatencyPayload(utime_t lat)
-    : lat(lat) {
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_METADATA_LATENCY), lat(lat) {
   }
 
   void encode(bufferlist &bl) const {
@@ -202,17 +214,16 @@ struct MetadataLatencyPayload {
   }
 };
 
-struct DentryLeasePayload {
-  static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_DENTRY_LEASE;
-
+struct DentryLeasePayload : public ClientMetricPayloadBase {
   uint64_t dlease_hits = 0;
   uint64_t dlease_misses = 0;
   uint64_t nr_dentries = 0;
 
-  DentryLeasePayload() { }
+  DentryLeasePayload()
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_DENTRY_LEASE) { }
   DentryLeasePayload(uint64_t dlease_hits, uint64_t dlease_misses, uint64_t nr_dentries)
-    : dlease_hits(dlease_hits), dlease_misses(dlease_misses), nr_dentries(nr_dentries) {
-  }
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_DENTRY_LEASE),
+    dlease_hits(dlease_hits), dlease_misses(dlease_misses), nr_dentries(nr_dentries) { }
 
   void encode(bufferlist &bl) const {
     using ceph::encode;
@@ -245,16 +256,15 @@ struct DentryLeasePayload {
   }
 };
 
-struct OpenedFilesPayload {
-  static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_OPENED_FILES;
-
+struct OpenedFilesPayload : public ClientMetricPayloadBase {
   uint64_t opened_files = 0;
   uint64_t total_inodes = 0;
 
-  OpenedFilesPayload() { }
+  OpenedFilesPayload()
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_OPENED_FILES) { }
   OpenedFilesPayload(uint64_t opened_files, uint64_t total_inodes)
-    : opened_files(opened_files), total_inodes(total_inodes) {
-  }
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_OPENED_FILES),
+    opened_files(opened_files), total_inodes(total_inodes) { }
 
   void encode(bufferlist &bl) const {
     using ceph::encode;
@@ -283,16 +293,15 @@ struct OpenedFilesPayload {
   }
 };
 
-struct PinnedIcapsPayload {
-  static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_PINNED_ICAPS;
-
+struct PinnedIcapsPayload : public ClientMetricPayloadBase {
   uint64_t pinned_icaps = 0;
   uint64_t total_inodes = 0;
 
-  PinnedIcapsPayload() { }
+  PinnedIcapsPayload()
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_PINNED_ICAPS) { }
   PinnedIcapsPayload(uint64_t pinned_icaps, uint64_t total_inodes)
-    : pinned_icaps(pinned_icaps), total_inodes(total_inodes) {
-  }
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_PINNED_ICAPS),
+    pinned_icaps(pinned_icaps), total_inodes(total_inodes) { }
 
   void encode(bufferlist &bl) const {
     using ceph::encode;
@@ -321,16 +330,15 @@ struct PinnedIcapsPayload {
   }
 };
 
-struct OpenedInodesPayload {
-  static const ClientMetricType METRIC_TYPE = ClientMetricType::CLIENT_METRIC_TYPE_OPENED_INODES;
-
+struct OpenedInodesPayload : public ClientMetricPayloadBase {
   uint64_t opened_inodes = 0;
   uint64_t total_inodes = 0;
 
-  OpenedInodesPayload() { }
+  OpenedInodesPayload()
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_OPENED_INODES) { }
   OpenedInodesPayload(uint64_t opened_inodes, uint64_t total_inodes)
-    : opened_inodes(opened_inodes), total_inodes(total_inodes) {
-  }
+    : ClientMetricPayloadBase(ClientMetricType::CLIENT_METRIC_TYPE_OPENED_INODES),
+    opened_inodes(opened_inodes), total_inodes(total_inodes) { }
 
   void encode(bufferlist &bl) const {
     using ceph::encode;
@@ -359,10 +367,11 @@ struct OpenedInodesPayload {
   }
 };
 
-struct UnknownPayload {
-  static const ClientMetricType METRIC_TYPE = static_cast<ClientMetricType>(-1);
-
-  UnknownPayload() { }
+struct UnknownPayload : public ClientMetricPayloadBase {
+  UnknownPayload()
+    : ClientMetricPayloadBase(static_cast<ClientMetricType>(-1)) { }
+  UnknownPayload(ClientMetricType metric_type)
+    : ClientMetricPayloadBase(metric_type) { }
 
   void encode(bufferlist &bl) const {
   }
@@ -406,7 +415,7 @@ public:
     template <typename ClientMetricPayload>
     inline void operator()(const ClientMetricPayload &payload) const {
       using ceph::encode;
-      encode(static_cast<uint32_t>(ClientMetricPayload::METRIC_TYPE), m_bl);
+      encode(static_cast<uint32_t>(payload.get_type()), m_bl);
       payload.encode(m_bl);
     }
 
@@ -436,8 +445,7 @@ public:
 
     template <typename ClientMetricPayload>
     inline void operator()(const ClientMetricPayload &payload) const {
-      ClientMetricType metric_type = ClientMetricPayload::METRIC_TYPE;
-      m_formatter->dump_string("client_metric_type", stringify(metric_type));
+      m_formatter->dump_string("client_metric_type", stringify(payload.get_type()));
       payload.dump(m_formatter);
     }
 
@@ -452,8 +460,9 @@ public:
 
     template <typename ClientMetricPayload>
     inline void operator()(const ClientMetricPayload &payload) const {
-      ClientMetricType metric_type = ClientMetricPayload::METRIC_TYPE;
-      *_out << "[client_metric_type: " << metric_type;
+      *_out << "[client_metric_type: ";
+      payload.print_type(_out);
+      *_out << " ";
       payload.print(_out);
       *_out << "]";
     }
@@ -498,7 +507,7 @@ public:
       payload = OpenedInodesPayload();
       break;
     default:
-      payload = UnknownPayload();
+      payload = UnknownPayload(static_cast<ClientMetricType>(metric_type));
       break;
     }
 
index f19b50f8516ffff14031e095bd65392055efdabe..6695441b63c2964244f2f8cac80acf3bfb392458 100644 (file)
@@ -147,7 +147,7 @@ void MetricsHandler::reset_seq() {
 }
 
 void MetricsHandler::handle_payload(Session *session, const CapInfoPayload &payload) {
-  dout(20) << ": type=" << static_cast<ClientMetricType>(CapInfoPayload::METRIC_TYPE)
+  dout(20) << ": type=" << payload.get_type()
           << ", session=" << session << ", hits=" << payload.cap_hits << ", misses="
           << payload.cap_misses << dendl;
 
@@ -163,7 +163,7 @@ void MetricsHandler::handle_payload(Session *session, const CapInfoPayload &payl
 }
 
 void MetricsHandler::handle_payload(Session *session, const ReadLatencyPayload &payload) {
-  dout(20) << ": type=" << static_cast<ClientMetricType>(ReadLatencyPayload::METRIC_TYPE)
+  dout(20) << ": type=" << payload.get_type()
           << ", session=" << session << ", latency=" << payload.lat << dendl;
 
   auto it = client_metrics_map.find(session->info.inst);
@@ -178,7 +178,7 @@ void MetricsHandler::handle_payload(Session *session, const ReadLatencyPayload &
 }
 
 void MetricsHandler::handle_payload(Session *session, const WriteLatencyPayload &payload) {
-  dout(20) << ": type=" << static_cast<ClientMetricType>(WriteLatencyPayload::METRIC_TYPE)
+  dout(20) << ": type=" << payload.get_type()
           << ", session=" << session << ", latency=" << payload.lat << dendl;
 
   auto it = client_metrics_map.find(session->info.inst);
@@ -193,7 +193,7 @@ void MetricsHandler::handle_payload(Session *session, const WriteLatencyPayload
 }
 
 void MetricsHandler::handle_payload(Session *session, const MetadataLatencyPayload &payload) {
-  dout(20) << ": type=" << static_cast<ClientMetricType>(MetadataLatencyPayload::METRIC_TYPE)
+  dout(20) << ": type=" << payload.get_type()
           << ", session=" << session << ", latency=" << payload.lat << dendl;
 
   auto it = client_metrics_map.find(session->info.inst);
@@ -208,7 +208,7 @@ void MetricsHandler::handle_payload(Session *session, const MetadataLatencyPaylo
 }
 
 void MetricsHandler::handle_payload(Session *session, const DentryLeasePayload &payload) {
-  dout(20) << ": type=" << static_cast<ClientMetricType>(DentryLeasePayload::METRIC_TYPE)
+  dout(20) << ": type=" << payload.get_type()
           << ", session=" << session << ", hits=" << payload.dlease_hits << ", misses="
           << payload.dlease_misses << dendl;
 
@@ -225,7 +225,7 @@ void MetricsHandler::handle_payload(Session *session, const DentryLeasePayload &
 }
 
 void MetricsHandler::handle_payload(Session *session, const OpenedFilesPayload &payload) {
-  dout(20) << ": type=" << static_cast<ClientMetricType>(OpenedFilesPayload::METRIC_TYPE)
+  dout(20) << ": type=" << payload.get_type()
            << ", session=" << session << ", opened_files=" << payload.opened_files
            << ", total_inodes=" << payload.total_inodes << dendl;
 
@@ -242,7 +242,7 @@ void MetricsHandler::handle_payload(Session *session, const OpenedFilesPayload &
 }
 
 void MetricsHandler::handle_payload(Session *session, const PinnedIcapsPayload &payload) {
-  dout(20) << ": type=" << static_cast<ClientMetricType>(PinnedIcapsPayload::METRIC_TYPE)
+  dout(20) << ": type=" << payload.get_type()
            << ", session=" << session << ", pinned_icaps=" << payload.pinned_icaps
            << ", total_inodes=" << payload.total_inodes << dendl;
 
@@ -259,7 +259,7 @@ void MetricsHandler::handle_payload(Session *session, const PinnedIcapsPayload &
 }
 
 void MetricsHandler::handle_payload(Session *session, const OpenedInodesPayload &payload) {
-  dout(20) << ": type=" << static_cast<ClientMetricType>(OpenedInodesPayload::METRIC_TYPE)
+  dout(20) << ": type=" << payload.get_type()
            << ", session=" << session << ", opened_inodes=" << payload.opened_inodes
            << ", total_inodes=" << payload.total_inodes << dendl;