@@ -20,12 +20,10 @@ use common_types::{
20
20
} ;
21
21
use common_util:: { define_result, error:: GenericError } ;
22
22
use futures:: { future:: try_join_all, StreamExt } ;
23
- use log:: { debug, info , trace} ;
23
+ use log:: { debug, trace} ;
24
24
use snafu:: { ensure, Backtrace , ResultExt , Snafu } ;
25
- use table_engine:: {
26
- predicate:: PredicateRef ,
27
- table:: { Metric , ReadMetricsCollector , TableId } ,
28
- } ;
25
+ use table_engine:: { predicate:: PredicateRef , table:: TableId } ;
26
+ use trace_metric:: { Collector , TracedMetrics } ;
29
27
30
28
use crate :: {
31
29
row_iter:: {
@@ -86,7 +84,7 @@ define_result!(Error);
86
84
#[ derive( Debug ) ]
87
85
pub struct MergeConfig < ' a > {
88
86
pub request_id : RequestId ,
89
- pub metrics_collector : Option < ReadMetricsCollector > ,
87
+ pub metrics_collector : Collector ,
90
88
/// None for background jobs, such as: compaction
91
89
pub deadline : Option < Instant > ,
92
90
pub space_id : SpaceId ,
@@ -231,8 +229,12 @@ impl<'a> MergeBuilder<'a> {
231
229
self . ssts ,
232
230
self . config . merge_iter_options ,
233
231
self . config . reverse ,
234
- Metrics :: new ( self . memtables . len ( ) , sst_streams_num, sst_ids) ,
235
- self . config . metrics_collector ,
232
+ Metrics :: new (
233
+ self . memtables . len ( ) ,
234
+ sst_streams_num,
235
+ sst_ids,
236
+ self . config . metrics_collector . clone ( ) ,
237
+ ) ,
236
238
) )
237
239
}
238
240
}
@@ -562,28 +564,44 @@ impl Ord for HeapBufferedStream {
562
564
}
563
565
564
566
/// Metrics for merge iterator.
567
+ #[ derive( TracedMetrics ) ]
565
568
pub struct Metrics {
569
+ #[ metric( counter) ]
566
570
num_memtables : usize ,
571
+ #[ metric( counter) ]
567
572
num_ssts : usize ,
568
573
sst_ids : Vec < FileId > ,
569
574
/// Total rows collected using fetch_rows_from_one_stream().
575
+ #[ metric( counter) ]
570
576
total_rows_fetch_from_one : usize ,
571
577
/// Times to fetch rows from one stream.
578
+ #[ metric( counter) ]
572
579
times_fetch_rows_from_one : usize ,
573
580
/// Times to fetch one row from multiple stream.
581
+ #[ metric( counter) ]
574
582
times_fetch_row_from_multiple : usize ,
575
583
/// Create time of the metrics.
576
584
create_at : Instant ,
577
585
/// Init time cost of the metrics.
586
+ #[ metric( elapsed) ]
578
587
init_duration : Duration ,
579
588
/// Scan time cost of the metrics.
589
+ #[ metric( elapsed) ]
580
590
scan_duration : Duration ,
581
591
/// Scan count
592
+ #[ metric( counter) ]
582
593
scan_count : usize ,
594
+ #[ metric( collector) ]
595
+ metrics_collector : Collector ,
583
596
}
584
597
585
598
impl Metrics {
586
- fn new ( num_memtables : usize , num_ssts : usize , sst_ids : Vec < FileId > ) -> Self {
599
+ fn new (
600
+ num_memtables : usize ,
601
+ num_ssts : usize ,
602
+ sst_ids : Vec < FileId > ,
603
+ collector : Collector ,
604
+ ) -> Self {
587
605
Self {
588
606
num_memtables,
589
607
num_ssts,
@@ -595,39 +613,9 @@ impl Metrics {
595
613
init_duration : Duration :: default ( ) ,
596
614
scan_duration : Duration :: default ( ) ,
597
615
scan_count : 0 ,
616
+ metrics_collector : collector,
598
617
}
599
618
}
600
-
601
- fn collect ( & self , collector : & ReadMetricsCollector ) {
602
- // TODO: maybe we can define a macro to generate the code.
603
- collector. collect ( Metric :: counter (
604
- "num_memtables" . to_string ( ) ,
605
- self . num_memtables ,
606
- ) ) ;
607
-
608
- collector. collect ( Metric :: counter ( "num_ssts" . to_string ( ) , self . num_ssts ) ) ;
609
- collector. collect ( Metric :: counter (
610
- "times_fetch_rows_from_one" . to_string ( ) ,
611
- self . times_fetch_rows_from_one ,
612
- ) ) ;
613
- collector. collect ( Metric :: counter (
614
- "times_rows_fetch_from_one" . to_string ( ) ,
615
- self . times_fetch_row_from_multiple ,
616
- ) ) ;
617
- collector. collect ( Metric :: counter (
618
- "total_rows_fetch_from_one" . to_string ( ) ,
619
- self . total_rows_fetch_from_one ,
620
- ) ) ;
621
- collector. collect ( Metric :: elapsed (
622
- "init_duration" . to_string ( ) ,
623
- self . init_duration ,
624
- ) ) ;
625
- collector. collect ( Metric :: elapsed (
626
- "scan_duration" . to_string ( ) ,
627
- self . scan_duration ,
628
- ) ) ;
629
- collector. collect ( Metric :: counter ( "scan_count" . to_string ( ) , self . scan_count ) ) ;
630
- }
631
619
}
632
620
633
621
impl fmt:: Debug for Metrics {
@@ -667,7 +655,6 @@ pub struct MergeIterator {
667
655
iter_options : IterOptions ,
668
656
reverse : bool ,
669
657
metrics : Metrics ,
670
- metrics_collector : Option < ReadMetricsCollector > ,
671
658
}
672
659
673
660
impl MergeIterator {
@@ -681,7 +668,6 @@ impl MergeIterator {
681
668
iter_options : IterOptions ,
682
669
reverse : bool ,
683
670
metrics : Metrics ,
684
- metrics_collector : Option < ReadMetricsCollector > ,
685
671
) -> Self {
686
672
let heap_cap = streams. len ( ) ;
687
673
let record_batch_builder =
@@ -699,7 +685,6 @@ impl MergeIterator {
699
685
iter_options,
700
686
reverse,
701
687
metrics,
702
- metrics_collector,
703
688
}
704
689
}
705
690
@@ -893,19 +878,6 @@ impl MergeIterator {
893
878
}
894
879
}
895
880
896
- impl Drop for MergeIterator {
897
- fn drop ( & mut self ) {
898
- if let Some ( collector) = & self . metrics_collector {
899
- self . metrics . collect ( collector) ;
900
- }
901
-
902
- info ! (
903
- "Merge iterator dropped, table_id:{:?}, request_id:{}, metrics:{:?}, iter_options:{:?}," ,
904
- self . table_id, self . request_id, self . metrics, self . iter_options,
905
- ) ;
906
- }
907
- }
908
-
909
881
#[ async_trait]
910
882
impl RecordBatchWithKeyIterator for MergeIterator {
911
883
type Error = Error ;
@@ -968,8 +940,7 @@ mod tests {
968
940
Vec :: new ( ) ,
969
941
IterOptions :: default ( ) ,
970
942
false ,
971
- Metrics :: new ( 1 , 1 , vec ! [ ] ) ,
972
- None ,
943
+ Metrics :: new ( 1 , 1 , vec ! [ ] , Collector :: new ( "" . to_string ( ) ) ) ,
973
944
) ;
974
945
975
946
check_iterator (
@@ -1022,8 +993,7 @@ mod tests {
1022
993
Vec :: new ( ) ,
1023
994
IterOptions :: default ( ) ,
1024
995
true ,
1025
- Metrics :: new ( 1 , 1 , vec ! [ ] ) ,
1026
- None ,
996
+ Metrics :: new ( 1 , 1 , vec ! [ ] , Collector :: new ( "" . to_string ( ) ) ) ,
1027
997
) ;
1028
998
1029
999
check_iterator (
0 commit comments