diff --git a/ledger/src/blockstore_db.rs b/ledger/src/blockstore_db.rs index 17061ecade..71369d4ff4 100644 --- a/ledger/src/blockstore_db.rs +++ b/ledger/src/blockstore_db.rs @@ -4,7 +4,7 @@ use { blockstore_meta, blockstore_metrics::{ maybe_enable_rocksdb_perf, report_rocksdb_read_perf, report_rocksdb_write_perf, - BlockstoreRocksDbColumnFamilyMetrics, ColumnMetrics, PerfSamplingStatus, + BlockstoreRocksDbColumnFamilyMetrics, PerfSamplingStatus, }, blockstore_options::{ AccessType, BlockstoreOptions, LedgerColumnOptions, ShredStorageType, @@ -953,7 +953,7 @@ pub struct Database { #[derive(Debug)] pub struct LedgerColumn where - C: Column + ColumnName + ColumnMetrics, + C: Column + ColumnName, { backend: Arc, column: PhantomData, @@ -962,7 +962,7 @@ where write_perf_status: PerfSamplingStatus, } -impl LedgerColumn { +impl LedgerColumn { pub fn submit_rocksdb_cf_metrics(&self) { let cf_rocksdb_metrics = BlockstoreRocksDbColumnFamilyMetrics { total_sst_files_size: self @@ -1014,7 +1014,7 @@ impl LedgerColumn { .get_int_property(RocksProperties::BACKGROUND_ERRORS) .unwrap_or(BLOCKSTORE_METRICS_ERROR), }; - C::report_cf_metrics(cf_rocksdb_metrics, &self.column_options); + cf_rocksdb_metrics.report_metrics(C::NAME, &self.column_options); } } @@ -1076,7 +1076,7 @@ impl Database { pub fn column(&self) -> LedgerColumn where - C: Column + ColumnName + ColumnMetrics, + C: Column + ColumnName, { LedgerColumn { backend: Arc::clone(&self.backend), @@ -1132,7 +1132,7 @@ impl Database { impl LedgerColumn where - C: Column + ColumnName + ColumnMetrics, + C: Column + ColumnName, { pub fn get_bytes(&self, key: C::Index) -> Result>> { let is_perf_enabled = maybe_enable_rocksdb_perf( @@ -1241,7 +1241,7 @@ where impl LedgerColumn where - C: TypedColumn + ColumnName + ColumnMetrics, + C: TypedColumn + ColumnName, { pub fn get(&self, key: C::Index) -> Result> { let mut result = Ok(None); @@ -1303,7 +1303,7 @@ where impl LedgerColumn where - C: ProtobufColumn + ColumnName + ColumnMetrics, + C: ProtobufColumn + ColumnName, { pub fn get_protobuf_or_bincode>( &self, diff --git a/ledger/src/blockstore_metrics.rs b/ledger/src/blockstore_metrics.rs index 32ce40a78e..027e7283cd 100644 --- a/ledger/src/blockstore_metrics.rs +++ b/ledger/src/blockstore_metrics.rs @@ -1,8 +1,5 @@ use { - crate::{ - blockstore_db::columns, - blockstore_options::{LedgerColumnOptions, ShredStorageType}, - }, + crate::blockstore_options::LedgerColumnOptions, rocksdb::{ perf::{set_perf_stats, PerfMetric, PerfStatsLevel}, PerfContext, @@ -12,63 +9,11 @@ use { std::{ cell::RefCell, fmt::Debug, - sync::{ - atomic::{AtomicU64, AtomicUsize, Ordering}, - Arc, - }, + sync::atomic::{AtomicU64, AtomicUsize, Ordering}, time::{Duration, Instant}, }, }; -#[macro_export] -macro_rules! rocksdb_metric_header { - ($metric_name:literal, $cf_name:literal, $column_options:expr) => { - match $column_options.shred_storage_type { - ShredStorageType::RocksLevel => - rocksdb_metric_header!(@compression_type $metric_name, $cf_name, $column_options, "rocks_level"), - ShredStorageType::RocksFifo(_) => - rocksdb_metric_header!(@compression_type $metric_name, $cf_name, $column_options, "rocks_fifo"), - } - }; - - (@compression_type $metric_name:literal, $cf_name:literal, $column_options:expr, $storage_type:literal) => { - match $column_options.compression_type { - $crate::blockstore_options::BlockstoreCompressionType::None => rocksdb_metric_header!(@all_fields - $metric_name, - $cf_name, - $storage_type, - "None" - ), - $crate::blockstore_options::BlockstoreCompressionType::Snappy => rocksdb_metric_header!(@all_fields - $metric_name, - $cf_name, - $storage_type, - "Snappy" - ), - $crate::blockstore_options::BlockstoreCompressionType::Lz4 => rocksdb_metric_header!(@all_fields - $metric_name, - $cf_name, - $storage_type, - "Lz4" - ), - $crate::blockstore_options::BlockstoreCompressionType::Zlib => rocksdb_metric_header!(@all_fields - $metric_name, - $cf_name, - $storage_type, - "Zlib" - ), - } - }; - - (@all_fields $metric_name:literal, $cf_name:literal, $storage_type:literal, $compression_type:literal) => { - concat!($metric_name, - ",cf_name=", $cf_name, - ",storage=", $storage_type, - ",compression=", $compression_type, - ) - }; -} - /// A metrics struct that exposes RocksDB's column family properties. /// /// Here we only expose a subset of all the internal properties which are @@ -170,9 +115,13 @@ impl BlockstoreRocksDbColumnFamilyMetrics { /// `metric_name_and_cf_tag` with the following format. /// /// For example, "blockstore_rocksdb_cfs,cf_name=shred_data". - pub fn report_metrics(&self, metric_name_and_cf_tag: &'static str) { + pub fn report_metrics(&self, cf_name: &'static str, column_options: &LedgerColumnOptions) { datapoint_info!( - metric_name_and_cf_tag, + "blockstore_rocksdb_cfs", + // tags that support group-by operations + "cf_name" => cf_name, + "storage" => column_options.get_storage_type_string(), + "compression" => column_options.get_compression_type_string(), // Size related ( "total_sst_files_size", @@ -558,270 +507,3 @@ impl PerfSamplingStatus { .is_ok() } } - -pub trait ColumnMetrics { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ); -} - -impl ColumnMetrics for columns::TransactionStatus { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "transaction_status", - column_options - )); - } -} - -impl ColumnMetrics for columns::AddressSignatures { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "address_signatures", - column_options - )); - } -} - -impl ColumnMetrics for columns::TransactionMemos { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "transaction_memos", - column_options - )); - } -} - -impl ColumnMetrics for columns::TransactionStatusIndex { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "transaction_status_index", - column_options - )); - } -} - -impl ColumnMetrics for columns::Rewards { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "rewards", - column_options - )); - } -} - -impl ColumnMetrics for columns::Blocktime { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "blocktime", - column_options - )); - } -} - -impl ColumnMetrics for columns::PerfSamples { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "perf_samples", - column_options - )); - } -} - -impl ColumnMetrics for columns::BlockHeight { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "block_height", - column_options - )); - } -} - -impl ColumnMetrics for columns::ProgramCosts { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "program_costs", - column_options - )); - } -} - -impl ColumnMetrics for columns::ShredCode { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "shred_code", - column_options - )); - } -} - -impl ColumnMetrics for columns::ShredData { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "shred_data", - column_options - )); - } -} - -impl ColumnMetrics for columns::Index { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "index", - column_options - )); - } -} - -impl ColumnMetrics for columns::DeadSlots { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "dead_slots", - column_options - )); - } -} - -impl ColumnMetrics for columns::DuplicateSlots { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "duplicate_slots", - column_options - )); - } -} - -impl ColumnMetrics for columns::Orphans { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "orphans", - column_options - )); - } -} - -impl ColumnMetrics for columns::BankHash { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "bank_hash", - column_options - )); - } -} - -impl ColumnMetrics for columns::OptimisticSlots { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "optimistic_slots", - column_options - )); - } -} - -impl ColumnMetrics for columns::Root { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "root", - column_options - )); - } -} - -impl ColumnMetrics for columns::SlotMeta { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "slot_meta", - column_options - )); - } -} - -impl ColumnMetrics for columns::ErasureMeta { - fn report_cf_metrics( - cf_metrics: BlockstoreRocksDbColumnFamilyMetrics, - column_options: &Arc, - ) { - cf_metrics.report_metrics(rocksdb_metric_header!( - "blockstore_rocksdb_cfs", - "erasure_meta", - column_options - )); - } -} diff --git a/ledger/src/lib.rs b/ledger/src/lib.rs index 7d2b66774f..e65a74cff2 100644 --- a/ledger/src/lib.rs +++ b/ledger/src/lib.rs @@ -13,7 +13,6 @@ pub mod blockstore; pub mod ancestor_iterator; pub mod blockstore_db; pub mod blockstore_meta; -#[macro_use] pub mod blockstore_metrics; pub mod blockstore_options; pub mod blockstore_processor;