Skip to content

Commit e18cca3

Browse files
committed
f Sleep and retry pushing to queue if it is full
1 parent bccc835 commit e18cca3

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

src/tx_broadcaster.rs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,37 @@ where
5959
L::Target: Logger,
6060
{
6161
fn broadcast_transactions(&self, txs: &[&Transaction]) {
62-
let package = txs.iter().map(|&t| t.clone()).collect::<Vec<Transaction>>();
63-
self.queue_sender.try_send(package).unwrap_or_else(|e| {
64-
log_error!(self.logger, "Failed to broadcast transactions: {}", e);
65-
});
62+
let mut package = txs.iter().map(|&t| t.clone()).collect::<Vec<Transaction>>();
63+
let mut retries_left = 10;
64+
65+
loop {
66+
match self.queue_sender.try_send(package) {
67+
Ok(()) => {
68+
break;
69+
}
70+
Err(mpsc::error::TrySendError::Full(pkg)) => {
71+
if retries_left > 0 {
72+
log_debug!(
73+
self.logger,
74+
"Failed to broadcast transactions due to full queue. Retrying."
75+
);
76+
std::thread::sleep(Duration::from_millis(100));
77+
package = pkg;
78+
retries_left -= 1;
79+
continue;
80+
} else {
81+
log_error!(
82+
self.logger,
83+
"Failed to broadcast transactions due to full queue. Aborting."
84+
);
85+
break;
86+
}
87+
}
88+
Err(e) => {
89+
log_error!(self.logger, "Failed to broadcast transactions: {}", e);
90+
break;
91+
}
92+
}
93+
}
6694
}
6795
}

0 commit comments

Comments
 (0)