From: Xiubo Li Date: Mon, 7 Jun 2021 06:09:27 +0000 (+0800) Subject: mds: to print the unknow type value X-Git-Tag: v16.2.6~152^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7b7840d5e351447ebdd48e017aaf65182970f930;p=ceph.git mds: to print the unknow type value 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 (cherry picked from commit 562ba7877360226bbf09b33a9b0c5664c8d81c12) Conflicts: src/include/cephfs/metrics/Types.h - Fixed minor conflict when printing the "client_metric_type". --- diff --git a/src/include/cephfs/metrics/Types.h b/src/include/cephfs/metrics/Types.h index 0c12de7c3b19..a004823c6a00 100644 --- a/src/include/cephfs/metrics/Types.h +++ b/src/include/cephfs/metrics/Types.h @@ -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(-1); - - UnknownPayload() { } +struct UnknownPayload : public ClientMetricPayloadBase { + UnknownPayload() + : ClientMetricPayloadBase(static_cast(-1)) { } + UnknownPayload(ClientMetricType metric_type) + : ClientMetricPayloadBase(metric_type) { } void encode(bufferlist &bl) const { } @@ -406,7 +415,7 @@ public: template inline void operator()(const ClientMetricPayload &payload) const { using ceph::encode; - encode(static_cast(ClientMetricPayload::METRIC_TYPE), m_bl); + encode(static_cast(payload.get_type()), m_bl); payload.encode(m_bl); } @@ -436,8 +445,7 @@ public: template 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 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(metric_type)); break; } diff --git a/src/mds/MetricsHandler.cc b/src/mds/MetricsHandler.cc index f19b50f8516f..6695441b63c2 100644 --- a/src/mds/MetricsHandler.cc +++ b/src/mds/MetricsHandler.cc @@ -147,7 +147,7 @@ void MetricsHandler::reset_seq() { } void MetricsHandler::handle_payload(Session *session, const CapInfoPayload &payload) { - dout(20) << ": type=" << static_cast(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(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(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(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(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(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(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(OpenedInodesPayload::METRIC_TYPE) + dout(20) << ": type=" << payload.get_type() << ", session=" << session << ", opened_inodes=" << payload.opened_inodes << ", total_inodes=" << payload.total_inodes << dendl;