mirror of
https://github.com/0glabs/0g-storage-node.git
synced 2025-04-04 15:35:18 +00:00
add detailed metrics in slow operations
This commit is contained in:
parent
9a199ba714
commit
cb7de7f60e
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -7300,9 +7300,11 @@ dependencies = [
|
||||
"kvdb",
|
||||
"kvdb-memorydb",
|
||||
"kvdb-rocksdb",
|
||||
"lazy_static",
|
||||
"merkle_light",
|
||||
"merkle_tree",
|
||||
"once_cell",
|
||||
"metrics",
|
||||
"parking_lot 0.12.3",
|
||||
"rand 0.8.5",
|
||||
"rayon",
|
||||
|
@ -31,6 +31,8 @@ parking_lot = "0.12.3"
|
||||
serde_json = "1.0.127"
|
||||
tokio = { version = "1.38.0", features = ["full"] }
|
||||
task_executor = { path = "../../common/task_executor" }
|
||||
lazy_static = "1.4.0"
|
||||
metrics = { workspace = true }
|
||||
once_cell = { version = "1.19.0", features = [] }
|
||||
|
||||
[dev-dependencies]
|
||||
|
@ -26,6 +26,7 @@ use std::collections::BTreeMap;
|
||||
use std::path::Path;
|
||||
use std::sync::mpsc;
|
||||
use std::sync::Arc;
|
||||
use std::time::Instant;
|
||||
use tracing::{debug, error, info, instrument, trace, warn};
|
||||
|
||||
/// 256 Bytes
|
||||
@ -875,6 +876,7 @@ impl LogManager {
|
||||
if merkle_list.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
let start_time = Instant::now();
|
||||
|
||||
self.pad_tx(tx_start_index, &mut *merkle)?;
|
||||
|
||||
@ -920,6 +922,8 @@ impl LogManager {
|
||||
}
|
||||
}
|
||||
self.flow_store.put_batch_root_list(batch_root_map)?;
|
||||
|
||||
metrics::APPEND_SUBTREE_LIST.update_since(start_time);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -1142,6 +1146,8 @@ impl LogManager {
|
||||
}
|
||||
|
||||
fn copy_tx_and_finalize(&self, from_tx_seq: u64, to_tx_seq_list: Vec<u64>) -> Result<()> {
|
||||
let start_time = Instant::now();
|
||||
|
||||
let mut merkle = self.merkle.write();
|
||||
let shard_config = self.flow_store.get_shard_config();
|
||||
// We have all the data need for this tx, so just copy them.
|
||||
@ -1190,6 +1196,8 @@ impl LogManager {
|
||||
for (seq, _) in to_tx_offset_list {
|
||||
self.tx_store.finalize_tx(seq)?;
|
||||
}
|
||||
|
||||
metrics::COPY_TX_AND_FINALIZE.update_since(start_time);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
14
node/storage/src/log_store/metrics.rs
Normal file
14
node/storage/src/log_store/metrics.rs
Normal file
@ -0,0 +1,14 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use metrics::{register_timer, Timer};
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
pub static ref TX_STORE_PUT: Arc<dyn Timer> = register_timer("log_store_tx_store_put_tx");
|
||||
|
||||
|
||||
pub static ref APPEND_SUBTREE_LIST: Arc<dyn Timer> =
|
||||
register_timer("log_store_log_manager_append_subtree_list");
|
||||
|
||||
pub static ref COPY_TX_AND_FINALIZE: Arc<dyn Timer> =
|
||||
register_timer("log_store_log_manager_copy_tx_and_finalize");
|
||||
}
|
@ -16,6 +16,7 @@ mod flow_store;
|
||||
mod load_chunk;
|
||||
pub mod log_manager;
|
||||
mod seal_task_manager;
|
||||
mod metrics;
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
pub mod tx_store;
|
||||
|
@ -3,6 +3,7 @@ use crate::log_store::log_manager::{
|
||||
data_to_merkle_leaves, sub_merkle_tree, COL_BLOCK_PROGRESS, COL_MISC, COL_TX, COL_TX_COMPLETED,
|
||||
COL_TX_DATA_ROOT_INDEX, ENTRY_SIZE, PORA_CHUNK_SIZE,
|
||||
};
|
||||
use crate::log_store::metrics;
|
||||
use crate::{try_option, LogManager, ZgsKeyValueDB};
|
||||
use anyhow::{anyhow, Result};
|
||||
use append_merkle::{AppendMerkleTree, MerkleTreeRead, Sha3Algorithm};
|
||||
@ -15,6 +16,7 @@ use std::collections::hash_map::Entry;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::atomic::{AtomicU64, Ordering};
|
||||
use std::sync::Arc;
|
||||
use std::time::Instant;
|
||||
use tracing::{error, instrument};
|
||||
|
||||
const LOG_SYNC_PROGRESS_KEY: &str = "log_sync_progress";
|
||||
@ -51,6 +53,8 @@ impl TransactionStore {
|
||||
#[instrument(skip(self))]
|
||||
/// Return `Ok(Some(tx_seq))` if a previous transaction has the same tx root.
|
||||
pub fn put_tx(&self, mut tx: Transaction) -> Result<Vec<u64>> {
|
||||
let start_time = Instant::now();
|
||||
|
||||
let old_tx_seq_list = self.get_tx_seq_list_by_data_root(&tx.data_merkle_root)?;
|
||||
if old_tx_seq_list.last().is_some_and(|seq| *seq == tx.seq) {
|
||||
// The last tx is inserted again, so no need to process it.
|
||||
@ -86,6 +90,7 @@ impl TransactionStore {
|
||||
);
|
||||
self.next_tx_seq.store(tx.seq + 1, Ordering::SeqCst);
|
||||
self.kvdb.write(db_tx)?;
|
||||
metrics::TX_STORE_PUT.update_since(start_time);
|
||||
Ok(old_tx_seq_list)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user