Fix a deadlock (#9952)
* Update informant: - decimal in Mgas/s - print every 5s (not randomly between 5s and 10s) * Fix dead-lock in `blockchain.rs` * Update locks ordering
This commit is contained in:
parent
1fdfa1e6c6
commit
f20f4c74d2
@ -1187,8 +1187,8 @@ impl BlockChain {
|
|||||||
let mut pending_block_details = self.pending_block_details.write();
|
let mut pending_block_details = self.pending_block_details.write();
|
||||||
let mut pending_write_txs = self.pending_transaction_addresses.write();
|
let mut pending_write_txs = self.pending_transaction_addresses.write();
|
||||||
|
|
||||||
let mut best_ancient_block = self.best_ancient_block.write();
|
|
||||||
let mut best_block = self.best_block.write();
|
let mut best_block = self.best_block.write();
|
||||||
|
let mut best_ancient_block = self.best_ancient_block.write();
|
||||||
let mut write_block_details = self.block_details.write();
|
let mut write_block_details = self.block_details.write();
|
||||||
let mut write_hashes = self.block_hashes.write();
|
let mut write_hashes = self.block_hashes.write();
|
||||||
let mut write_txs = self.transaction_addresses.write();
|
let mut write_txs = self.transaction_addresses.write();
|
||||||
|
@ -256,16 +256,13 @@ impl<T: InformantData> Informant<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn tick(&self) {
|
pub fn tick(&self) {
|
||||||
let elapsed = self.last_tick.read().elapsed();
|
let now = Instant::now();
|
||||||
if elapsed < Duration::from_secs(5) {
|
let elapsed = now.duration_since(*self.last_tick.read());
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let (client_report, full_report) = {
|
let (client_report, full_report) = {
|
||||||
let mut last_report = self.last_report.lock();
|
let mut last_report = self.last_report.lock();
|
||||||
let full_report = self.target.report();
|
let full_report = self.target.report();
|
||||||
let diffed = full_report.client_report.clone() - &*last_report;
|
let diffed = full_report.client_report.clone() - &*last_report;
|
||||||
*last_report = full_report.client_report.clone();
|
|
||||||
(diffed, full_report)
|
(diffed, full_report)
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -289,7 +286,8 @@ impl<T: InformantData> Informant<T> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*self.last_tick.write() = Instant::now();
|
*self.last_tick.write() = now;
|
||||||
|
*self.last_report.lock() = full_report.client_report.clone();
|
||||||
|
|
||||||
let paint = |c: Style, t: String| match self.with_color && atty::is(atty::Stream::Stdout) {
|
let paint = |c: Style, t: String| match self.with_color && atty::is(atty::Stream::Stdout) {
|
||||||
true => format!("{}", c.paint(t)),
|
true => format!("{}", c.paint(t)),
|
||||||
@ -306,7 +304,7 @@ impl<T: InformantData> Informant<T> {
|
|||||||
format!("{} blk/s {} tx/s {} Mgas/s",
|
format!("{} blk/s {} tx/s {} Mgas/s",
|
||||||
paint(Yellow.bold(), format!("{:7.2}", (client_report.blocks_imported * 1000) as f64 / elapsed.as_milliseconds() as f64)),
|
paint(Yellow.bold(), format!("{:7.2}", (client_report.blocks_imported * 1000) as f64 / elapsed.as_milliseconds() as f64)),
|
||||||
paint(Yellow.bold(), format!("{:6.1}", (client_report.transactions_applied * 1000) as f64 / elapsed.as_milliseconds() as f64)),
|
paint(Yellow.bold(), format!("{:6.1}", (client_report.transactions_applied * 1000) as f64 / elapsed.as_milliseconds() as f64)),
|
||||||
paint(Yellow.bold(), format!("{:4}", (client_report.gas_processed / (elapsed.as_milliseconds() * 1000)).low_u64()))
|
paint(Yellow.bold(), format!("{:6.1}", (client_report.gas_processed / 1000).low_u64() as f64 / elapsed.as_milliseconds() as f64))
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
format!("{} hdr/s",
|
format!("{} hdr/s",
|
||||||
|
Loading…
Reference in New Issue
Block a user