diff --git a/test/src/node.rs b/test/src/node.rs index 23bf5f4e9d..32ba61baea 100644 --- a/test/src/node.rs +++ b/test/src/node.rs @@ -681,9 +681,9 @@ impl Node { status, self.log_path().display() ); - info!("Last 200 lines of log:"); + info!("Last 500 lines of log:"); self.print_last_500_lines_log(&self.log_path()); - info!("End of last 200 lines of log"); + info!("End of last 500 lines of log"); // parent process will exit return; } @@ -693,6 +693,9 @@ impl Node { error, self.log_path().display() ); + info!("Last 500 lines of log:"); + self.print_last_500_lines_log(&self.log_path()); + info!("End of last 500 lines of log"); return; } } @@ -708,7 +711,7 @@ impl Node { self.set_node_id(node_info.node_id.as_str()); } - fn print_last_500_lines_log(&self, log_file: &Path) { + pub(crate) fn print_last_500_lines_log(&self, log_file: &Path) { let file = File::open(log_file).expect("open log file"); let reader = BufReader::new(file); let lines: Vec = reader.lines().map(|line| line.unwrap()).collect(); diff --git a/test/src/specs/tx_pool/send_large_cycles_tx.rs b/test/src/specs/tx_pool/send_large_cycles_tx.rs index 24b2a07f11..54fce1bd7b 100644 --- a/test/src/specs/tx_pool/send_large_cycles_tx.rs +++ b/test/src/specs/tx_pool/send_large_cycles_tx.rs @@ -123,6 +123,11 @@ impl Spec for SendLargeCyclesTxToRelay { .transaction .is_some() }); + if !result { + info!("node0 last 500 log begin"); + node0.print_last_500_lines_log(&node0.log_path()); + info!("node0 last 500 log end"); + } assert!(result, "Node0 should accept tx"); } diff --git a/tx-pool/src/component/verify_queue.rs b/tx-pool/src/component/verify_queue.rs index 35b59b9c4f..d770c19025 100644 --- a/tx-pool/src/component/verify_queue.rs +++ b/tx-pool/src/component/verify_queue.rs @@ -186,6 +186,11 @@ impl VerifyQueue { Ok(true) } + /// When OnlySmallCycleTx Worker is wakeup, but found the tx is large cycle tx, notify other workers. + pub fn re_notify(&self) { + self.ready_rx.notify_one(); + } + /// Clears the map, removing all elements. pub fn clear(&mut self) { self.inner.clear(); diff --git a/tx-pool/src/verify_mgr.rs b/tx-pool/src/verify_mgr.rs index 6ca12f5764..1e0a9b5a70 100644 --- a/tx-pool/src/verify_mgr.rs +++ b/tx-pool/src/verify_mgr.rs @@ -1,7 +1,7 @@ extern crate num_cpus; use crate::component::verify_queue::VerifyQueue; use crate::service::TxPoolService; -use ckb_logger::info; +use ckb_logger::{debug, info}; use ckb_script::ChunkCommand; use ckb_stop_handler::CancellationToken; use std::sync::Arc; @@ -83,15 +83,23 @@ impl Worker { if self.tasks.read().await.is_empty() { return; } + // pick a entry to run verify - let entry = match self - .tasks - .write() - .await - .pop_front(self.role == WorkerRole::OnlySmallCycleTx) - { - Some(entry) => entry, - None => return, + let entry = { + let mut tasks = self.tasks.write().await; + match tasks.pop_front(self.role == WorkerRole::OnlySmallCycleTx) { + Some(entry) => entry, + None => { + if !tasks.is_empty() { + tasks.re_notify(); + debug!( + "Worker (role: {:?}) didn't got tx after pop_front, but tasks is not empty, notify other Workers now", + self.role + ); + } + return; + } + } }; if let Some((res, snapshot)) = self