Prepare for txpool release. (#7741)
This commit is contained in:
parent
afea11ede6
commit
dae99cc53e
@ -9,4 +9,4 @@ authors = ["Parity Technologies <admin@parity.io>"]
|
||||
error-chain = "0.11"
|
||||
log = "0.3"
|
||||
smallvec = "0.4"
|
||||
ethereum-types = { version = "0.1", features = ["heapsizeof"] }
|
||||
ethereum-types = { version = "0.2", features = ["heapsizeof"] }
|
||||
|
@ -18,16 +18,19 @@ use ethereum_types::H256;
|
||||
|
||||
error_chain! {
|
||||
errors {
|
||||
/// Transaction is already imported
|
||||
AlreadyImported(hash: H256) {
|
||||
description("transaction is already in the queue"),
|
||||
description("transaction is already in the pool"),
|
||||
display("[{:?}] transaction already imported", hash)
|
||||
}
|
||||
/// Transaction is too cheap to enter the queue
|
||||
TooCheapToEnter(hash: H256) {
|
||||
description("the pool is full and transaction is too cheap to replace any transaction"),
|
||||
display("[{:?}] transaction too cheap to enter the pool", hash)
|
||||
}
|
||||
/// Transaction is too cheap to replace existing transaction that occupies the same slot.
|
||||
TooCheapToReplace(old_hash: H256, hash: H256) {
|
||||
description("transaction is too cheap to replace existing transaction in the queue"),
|
||||
description("transaction is too cheap to replace existing transaction in the pool"),
|
||||
display("[{:?}] transaction too cheap to replace: {:?}", hash, old_hash)
|
||||
}
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ pub mod scoring;
|
||||
|
||||
pub use self::listener::{Listener, NoopListener};
|
||||
pub use self::options::Options;
|
||||
pub use self::pool::Pool;
|
||||
pub use self::pool::{Pool, PendingIterator};
|
||||
pub use self::ready::{Ready, Readiness};
|
||||
pub use self::scoring::Scoring;
|
||||
pub use self::status::{LightStatus, Status};
|
||||
|
@ -44,5 +44,6 @@ pub trait Listener<T> {
|
||||
}
|
||||
|
||||
/// A no-op implementation of `Listener`.
|
||||
#[derive(Debug)]
|
||||
pub struct NoopListener;
|
||||
impl<T> Listener<T> for NoopListener {}
|
||||
|
@ -109,6 +109,8 @@ impl<T, S, L> Pool<T, S, L> where
|
||||
|
||||
ensure!(!self.by_hash.contains_key(transaction.hash()), error::ErrorKind::AlreadyImported(*transaction.hash()));
|
||||
|
||||
// TODO [ToDr] Most likely move this after the transsaction is inserted.
|
||||
// Avoid using should_replace, but rather use scoring for that.
|
||||
{
|
||||
let remove_worst = |s: &mut Self, transaction| {
|
||||
match s.remove_worst(&transaction) {
|
||||
@ -288,7 +290,7 @@ impl<T, S, L> Pool<T, S, L> where
|
||||
/// Removes single transaction from the pool.
|
||||
/// Depending on the `is_invalid` flag the listener
|
||||
/// will either get a `cancelled` or `invalid` notification.
|
||||
pub fn remove(&mut self, hash: &H256, is_invalid: bool) -> bool {
|
||||
pub fn remove(&mut self, hash: &H256, is_invalid: bool) -> Option<Arc<T>> {
|
||||
if let Some(tx) = self.finalize_remove(hash) {
|
||||
self.remove_from_set(tx.sender(), |set, scoring| {
|
||||
set.remove(&tx, scoring)
|
||||
@ -298,9 +300,9 @@ impl<T, S, L> Pool<T, S, L> where
|
||||
} else {
|
||||
self.listener.cancelled(&tx);
|
||||
}
|
||||
true
|
||||
Some(tx)
|
||||
} else {
|
||||
false
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,3 +40,15 @@ impl<T, F> Ready<T> for F where F: FnMut(&T) -> Readiness {
|
||||
(*self)(tx)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, A, B> Ready<T> for (A, B) where
|
||||
A: Ready<T>,
|
||||
B: Ready<T>,
|
||||
{
|
||||
fn is_ready(&mut self, tx: &T) -> Readiness {
|
||||
match self.0.is_ready(tx) {
|
||||
Readiness::Ready => self.1.is_ready(tx),
|
||||
r => r,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -261,7 +261,7 @@ fn should_remove_transaction() {
|
||||
assert_eq!(txq.light_status().transaction_count, 3);
|
||||
|
||||
// when
|
||||
assert!(txq.remove(&tx2.hash(), false));
|
||||
assert!(txq.remove(&tx2.hash(), false).is_some());
|
||||
|
||||
// then
|
||||
assert_eq!(txq.light_status().transaction_count, 2);
|
||||
|
Loading…
Reference in New Issue
Block a user