]>
git.proxmox.com Git - ceph.git/blob - ceph/src/mds/MetricAggregator.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_MDS_METRIC_AGGREGATOR_H
5 #define CEPH_MDS_METRIC_AGGREGATOR_H
11 #include "msg/msg_types.h"
12 #include "msg/Dispatcher.h"
13 #include "common/ceph_mutex.h"
14 #include "include/common_fwd.h"
15 #include "messages/MMDSMetrics.h"
17 #include "mgr/MetricTypes.h"
18 #include "mgr/MDSPerfMetricTypes.h"
22 #include "MDSPinger.h"
27 class MetricAggregator
: public Dispatcher
{
29 MetricAggregator(CephContext
*cct
, MDSRank
*mds
, MgrClient
*mgrc
);
34 void notify_mdsmap(const MDSMap
&mdsmap
);
36 bool ms_can_fast_dispatch_any() const override
{
39 bool ms_can_fast_dispatch2(const cref_t
<Message
> &m
) const override
;
40 void ms_fast_dispatch2(const ref_t
<Message
> &m
) override
;
41 bool ms_dispatch2(const ref_t
<Message
> &m
) override
;
43 void ms_handle_connect(Connection
*c
) override
{
45 bool ms_handle_reset(Connection
*c
) override
{
48 void ms_handle_remote_reset(Connection
*c
) override
{
50 bool ms_handle_refused(Connection
*c
) override
{
55 // drop this lock when calling ->send_message_mds() else mds might
57 ceph::mutex lock
= ceph::make_mutex("MetricAggregator::lock");
61 // maintain a map of rank to list of clients so that when a rank
62 // goes away we cull metrics of clients connected to that rank.
63 std::map
<mds_rank_t
, std::unordered_set
<entity_inst_t
>> clients_by_rank
;
65 // user query to metrics map
66 std::map
<MDSPerfMetricQuery
, std::map
<MDSPerfMetricKey
, PerformanceCounters
>> query_metrics_map
;
71 std::map
<mds_rank_t
, entity_addrvec_t
> active_rank_addrs
;
73 bool stopping
= false;
75 void handle_mds_metrics(const cref_t
<MMDSMetrics
> &m
);
77 void refresh_metrics_for_rank(const entity_inst_t
&client
, mds_rank_t rank
,
78 const Metrics
&metrics
);
79 void remove_metrics_for_rank(const entity_inst_t
&client
, mds_rank_t rank
, bool remove
);
81 void cull_metrics_for_rank(mds_rank_t rank
);
83 void ping_all_active_ranks();
85 void set_perf_queries(const ConfigPayload
&config_payload
);
86 MetricPayload
get_perf_reports();
89 #endif // CEPH_MDS_METRIC_AGGREGATOR_H