Roman Zeyde
6 years ago
1 changed files with 71 additions and 0 deletions
@ -0,0 +1,71 @@ |
|||
/// Benchmark full scan and point lookups.
|
|||
extern crate electrs; |
|||
|
|||
#[macro_use] |
|||
extern crate log; |
|||
|
|||
extern crate bitcoin; |
|||
extern crate error_chain; |
|||
|
|||
use bitcoin::util::hash::Sha256dHash; |
|||
use electrs::{ |
|||
config::Config, |
|||
daemon::Daemon, |
|||
errors::*, |
|||
index::TxRow, |
|||
metrics::Metrics, |
|||
signal::Waiter, |
|||
store::{DBStore, ReadStore}, |
|||
}; |
|||
|
|||
use error_chain::ChainedError; |
|||
use std::time::{Duration, Instant}; |
|||
|
|||
fn run(config: Config) -> Result<()> { |
|||
if !config.db_path.exists() { |
|||
panic!( |
|||
"DB {:?} must exist when running this benchmark!", |
|||
config.db_path |
|||
); |
|||
} |
|||
let store = DBStore::open(&config.db_path, /*low_memory=*/ false); |
|||
let signal = Waiter::new(); |
|||
let metrics = Metrics::new(config.monitoring_addr); |
|||
metrics.start(); |
|||
|
|||
let daemon = Daemon::new( |
|||
&config.daemon_dir, |
|||
config.daemon_rpc_addr, |
|||
config.cookie_getter(), |
|||
config.network_type, |
|||
signal.clone(), |
|||
&metrics, |
|||
)?; |
|||
|
|||
let mut blockhash = |
|||
Sha256dHash::from_hex("00000000000000000133e9920d5d808d430e325027d513420e7fc2f7da231ffe") |
|||
.unwrap(); |
|||
|
|||
for _ in 0..100 { |
|||
let block = daemon.getblock(&blockhash)?; |
|||
let txhashes: Vec<Sha256dHash> = block.txdata.iter().map(|tx| tx.txid()).collect(); |
|||
let len = txhashes.len() as u32; |
|||
|
|||
let now = Instant::now(); |
|||
for txhash in &txhashes { |
|||
let key = TxRow::filter_full(txhash); |
|||
let value = store.get(&key); |
|||
value.chain_err(|| format!("missing key {}", txhash))?; |
|||
} |
|||
let elapsed = now.elapsed(); |
|||
info!("got {} txs @ {:?} secs ({:?} per tx)", len, elapsed, elapsed / len); |
|||
blockhash = block.header.prev_blockhash; |
|||
} |
|||
Ok(()) |
|||
} |
|||
|
|||
fn main() { |
|||
if let Err(e) = run(Config::from_args()) { |
|||
error!("{}", e.display_chain()); |
|||
} |
|||
} |
Loading…
Reference in new issue