fix: prevent progress bar from panicking using workaround (#6940)

* fix: prevent progress bar from panicking using workaround

* remove more progress bar lengths

* re-add set_len() calls commented out; restore one that shouldn't cause panics

* Update zebra-state/src/service/non_finalized_state.rs

Co-authored-by: teor <teor@riseup.net>

---------

Co-authored-by: teor <teor@riseup.net>
This commit is contained in:
Conrado Gouvea 2023-06-14 16:07:02 -03:00 committed by GitHub
parent 4323097794
commit fd78556000
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 41 deletions

View File

@ -98,19 +98,17 @@ impl AddressBookUpdater {
let address_info = *address_info.borrow_and_update();
address_bar
.set_pos(u64::try_from(address_info.num_addresses).expect("fits in u64"))
.set_len(u64::try_from(address_info.address_limit).expect("fits in u64"));
.set_pos(u64::try_from(address_info.num_addresses).expect("fits in u64"));
// .set_len(u64::try_from(address_info.address_limit).expect("fits in u64"));
let never_attempted = address_info.never_attempted_alternate
+ address_info.never_attempted_gossiped;
never_bar
.set_pos(u64::try_from(never_attempted).expect("fits in u64"))
.set_len(u64::try_from(address_info.address_limit).expect("fits in u64"));
never_bar.set_pos(u64::try_from(never_attempted).expect("fits in u64"));
// .set_len(u64::try_from(address_info.address_limit).expect("fits in u64"));
failed_bar
.set_pos(u64::try_from(address_info.failed).expect("fits in u64"))
.set_len(u64::try_from(address_info.address_limit).expect("fits in u64"));
failed_bar.set_pos(u64::try_from(address_info.failed).expect("fits in u64"));
// .set_len(u64::try_from(address_info.address_limit).expect("fits in u64"));
}
}

View File

@ -115,8 +115,8 @@ impl ActiveConnectionCounter {
#[cfg(feature = "progress-bar")]
self.connection_bar
.set_pos(u64::try_from(self.count).expect("fits in u64"))
.set_len(u64::try_from(self.limit).expect("fits in u64"));
.set_pos(u64::try_from(self.count).expect("fits in u64"));
// .set_len(u64::try_from(self.limit).expect("fits in u64"));
self.count
}

View File

@ -662,9 +662,8 @@ impl NonFinalizedState {
.best_chain()
.map(|chain| chain.non_finalized_root_height().0 - 1);
chain_count_bar
.set_pos(u64::try_from(self.chain_count()).expect("fits in u64"))
.set_len(u64::try_from(MAX_NON_FINALIZED_CHAIN_FORKS).expect("fits in u64"));
chain_count_bar.set_pos(u64::try_from(self.chain_count()).expect("fits in u64"));
// .set_len(u64::try_from(MAX_NON_FINALIZED_CHAIN_FORKS).expect("fits in u64"));
if let Some(finalized_tip_height) = finalized_tip_height {
chain_count_bar.desc(format!("Finalized Root {finalized_tip_height}"));
@ -701,10 +700,11 @@ impl NonFinalizedState {
// - the chain this bar was previously assigned to might have changed position.
chain_length_bar
.label(format!("Fork {fork_height}"))
.set_pos(u64::try_from(chain.len()).expect("fits in u64"))
.set_len(u64::from(
zebra_chain::transparent::MIN_TRANSPARENT_COINBASE_MATURITY,
));
.set_pos(u64::try_from(chain.len()).expect("fits in u64"));
// TODO: should this be MAX_BLOCK_REORG_HEIGHT?
// .set_len(u64::from(
// zebra_chain::transparent::MIN_TRANSPARENT_COINBASE_MATURITY,
// ));
// display work as bits
let mut desc = format!(

View File

@ -411,41 +411,29 @@ impl Mempool {
|| self.transaction_cost_bar.is_none()
|| self.rejected_count_bar.is_none())
{
let max_transaction_count = self.config.tx_cost_limit
let _max_transaction_count = self.config.tx_cost_limit
/ zebra_chain::transaction::MEMPOOL_TRANSACTION_COST_THRESHOLD;
self.queued_count_bar = Some(
howudoin::new()
.label("Mempool Queue")
.set_pos(0u64)
.set_len(
u64::try_from(downloads::MAX_INBOUND_CONCURRENCY).expect("fits in u64"),
),
);
self.queued_count_bar = Some(*howudoin::new().label("Mempool Queue").set_pos(0u64));
// .set_len(
// u64::try_from(downloads::MAX_INBOUND_CONCURRENCY).expect("fits in u64"),
// ),
self.transaction_count_bar = Some(
howudoin::new()
.label("Mempool Txs")
.set_pos(0u64)
.set_len(max_transaction_count),
);
self.transaction_count_bar = Some(*howudoin::new().label("Mempool Txs").set_pos(0u64));
// .set_len(max_transaction_count),
self.transaction_cost_bar = Some(
howudoin::new()
.label("Mempool Cost")
.set_pos(0u64)
.set_len(self.config.tx_cost_limit)
// .set_len(self.config.tx_cost_limit)
.fmt_as_bytes(true),
);
self.rejected_count_bar = Some(
howudoin::new()
.label("Mempool Rejects")
.set_pos(0u64)
.set_len(
u64::try_from(storage::MAX_EVICTION_MEMORY_ENTRIES).expect("fits in u64"),
),
);
self.rejected_count_bar = Some(*howudoin::new().label("Mempool Rejects").set_pos(0u64));
// .set_len(
// u64::try_from(storage::MAX_EVICTION_MEMORY_ENTRIES).expect("fits in u64"),
// ),
}
// Update if the mempool has ever been active