55#define CEPH_MDS_PERF_METRIC_TYPES_H
66
77#include < ostream>
8+ #include < shared_mutex>
89
910#include " common/Formatter.h"
1011#include " include/cephfs/types.h" // for mds_rank_t
@@ -298,6 +299,7 @@ WRITE_CLASS_DENC(PinnedIcapsMetric)
298299WRITE_CLASS_DENC(OpenedInodesMetric)
299300WRITE_CLASS_DENC(ReadIoSizesMetric)
300301WRITE_CLASS_DENC(WriteIoSizesMetric)
302+ WRITE_CLASS_DENC(SubvolumeMetric)
301303
302304// metrics that are forwarded to the MDS by client(s).
303305struct Metrics {
@@ -312,12 +314,13 @@ struct Metrics {
312314 OpenedInodesMetric opened_inodes_metric;
313315 ReadIoSizesMetric read_io_sizes_metric;
314316 WriteIoSizesMetric write_io_sizes_metric;
317+ SubvolumeMetric subvolume_metrics;
315318
316319 // metric update type
317320 uint32_t update_type = UpdateType::UPDATE_TYPE_REFRESH;
318321
319322 DENC (Metrics, v, p) {
320- DENC_START (4 , 1 , p);
323+ DENC_START (5 , 1 , p);
321324 denc (v.update_type , p);
322325 denc (v.cap_hit_metric , p);
323326 denc (v.read_latency_metric , p);
@@ -335,6 +338,9 @@ struct Metrics {
335338 denc (v.read_io_sizes_metric , p);
336339 denc (v.write_io_sizes_metric , p);
337340 }
341+ if (struct_v >= 5 ) {
342+ denc (v.subvolume_metrics , p);
343+ }
338344 DENC_FINISH (p);
339345 }
340346
@@ -350,6 +356,7 @@ struct Metrics {
350356 f->dump_object (" opened_inodes_metric" , opened_inodes_metric);
351357 f->dump_object (" read_io_sizes_metric" , read_io_sizes_metric);
352358 f->dump_object (" write_io_sizes_metric" , write_io_sizes_metric);
359+ f->dump_object (" subvolume_metrics" , subvolume_metrics);
353360 }
354361
355362 friend std::ostream& operator <<(std::ostream& os, const Metrics& metrics) {
@@ -364,6 +371,7 @@ struct Metrics {
364371 << " , opened_inodes_metric=" << metrics.opened_inodes_metric
365372 << " , read_io_sizes_metric=" << metrics.read_io_sizes_metric
366373 << " , write_io_sizes_metric=" << metrics.write_io_sizes_metric
374+ << " , subvolume_metrics=" << metrics.subvolume_metrics
367375 << " }]" ;
368376 return os;
369377 }
@@ -374,6 +382,7 @@ struct metrics_message_t {
374382 version_t seq = 0 ;
375383 mds_rank_t rank = MDS_RANK_NONE;
376384 std::map<entity_inst_t , Metrics> client_metrics_map;
385+ std::vector<SubvolumeMetric> subvolume_metrics;
377386
378387 metrics_message_t () {
379388 }
@@ -383,19 +392,23 @@ struct metrics_message_t {
383392
384393 void encode (bufferlist &bl, uint64_t features) const {
385394 using ceph::encode;
386- ENCODE_START (1 , 1 , bl);
395+ ENCODE_START (2 , 1 , bl);
387396 encode (seq, bl);
388397 encode (rank, bl);
389398 encode (client_metrics_map, bl, features);
399+ encode (subvolume_metrics, bl);
390400 ENCODE_FINISH (bl);
391401 }
392402
393403 void decode (bufferlist::const_iterator &iter) {
394404 using ceph::decode;
395- DECODE_START (1 , iter);
405+ DECODE_START (2 , iter);
396406 decode (seq, iter);
397407 decode (rank, iter);
398408 decode (client_metrics_map, iter);
409+ if (struct_v >= 2 ) {
410+ decode (subvolume_metrics, iter);
411+ }
399412 DECODE_FINISH (iter);
400413 }
401414
@@ -406,13 +419,21 @@ struct metrics_message_t {
406419 f->dump_object (" client" , client);
407420 f->dump_object (" metrics" , metrics);
408421 }
422+ f->open_array_section (" subvolume_metrics" );
423+ for (const auto &metric : subvolume_metrics) {
424+ f->open_object_section (" metric" );
425+ metric.dump (f);
426+ f->close_section ();
427+ }
428+ f->close_section ();
409429 }
410430
411- friend std::ostream& operator <<(std::ostream& os, const metrics_message_t &metrics_message) {
412- os << " [sequence=" << metrics_message.seq << " , rank=" << metrics_message.rank
413- << " , metrics=" << metrics_message.client_metrics_map << " ]" ;
414- return os;
415- }
431+ friend std::ostream& operator <<(std::ostream& os, const metrics_message_t &m) {
432+ os << " [sequence=" << m.seq << " , rank=" << m.rank
433+ << " , client_metrics=" << m.client_metrics_map
434+ << " , subvolume_metrics=" << m.subvolume_metrics << " ]" ;
435+ return os;
436+ }
416437};
417438
418439WRITE_CLASS_ENCODER_FEATURES (metrics_message_t )
0 commit comments