Minimal effective gas price in the queue (#8934)
* Minimal effective gas price. * Fix naming, add test * Fix minimal entry score and add test. * Fix worst_transaction. * Remove effective gas price threshold. * Don't leak gas_price decisions out of Scoring.
This commit is contained in:
parent
4413ddc2d2
commit
758a7bea9d
13
src/pool.rs
13
src/pool.rs
|
@ -390,7 +390,13 @@ impl<T, S, L> Pool<T, S, L> where
|
||||||
|
|
||||||
/// Returns worst transaction in the queue (if any).
|
/// Returns worst transaction in the queue (if any).
|
||||||
pub fn worst_transaction(&self) -> Option<Arc<T>> {
|
pub fn worst_transaction(&self) -> Option<Arc<T>> {
|
||||||
self.worst_transactions.iter().next().map(|x| x.transaction.transaction.clone())
|
self.worst_transactions.iter().next_back().map(|x| x.transaction.transaction.clone())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns true if the pool is at it's capacity.
|
||||||
|
pub fn is_full(&self) -> bool {
|
||||||
|
self.by_hash.len() >= self.options.max_count
|
||||||
|
|| self.mem_usage >= self.options.max_mem_usage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns an iterator of pending (ready) transactions.
|
/// Returns an iterator of pending (ready) transactions.
|
||||||
|
@ -486,6 +492,11 @@ impl<T, S, L> Pool<T, S, L> where
|
||||||
&self.listener
|
&self.listener
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Borrows scoring instance.
|
||||||
|
pub fn scoring(&self) -> &S {
|
||||||
|
&self.scoring
|
||||||
|
}
|
||||||
|
|
||||||
/// Borrows listener mutably.
|
/// Borrows listener mutably.
|
||||||
pub fn listener_mut(&mut self) -> &mut L {
|
pub fn listener_mut(&mut self) -> &mut L {
|
||||||
&mut self.listener
|
&mut self.listener
|
||||||
|
|
|
@ -48,6 +48,15 @@ pub type SharedTransaction = Arc<Transaction>;
|
||||||
|
|
||||||
type TestPool = Pool<Transaction, DummyScoring>;
|
type TestPool = Pool<Transaction, DummyScoring>;
|
||||||
|
|
||||||
|
impl TestPool {
|
||||||
|
pub fn with_limit(max_count: usize) -> Self {
|
||||||
|
Self::with_options(Options {
|
||||||
|
max_count,
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_clear_queue() {
|
fn should_clear_queue() {
|
||||||
// given
|
// given
|
||||||
|
@ -505,9 +514,27 @@ fn should_return_worst_transaction() {
|
||||||
|
|
||||||
// when
|
// when
|
||||||
txq.import(b.tx().nonce(0).gas_price(5).new()).unwrap();
|
txq.import(b.tx().nonce(0).gas_price(5).new()).unwrap();
|
||||||
|
txq.import(b.tx().sender(1).nonce(0).gas_price(4).new()).unwrap();
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assert!(txq.worst_transaction().is_some());
|
assert_eq!(txq.worst_transaction().unwrap().gas_price, 4.into());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_return_is_full() {
|
||||||
|
// given
|
||||||
|
let b = TransactionBuilder::default();
|
||||||
|
let mut txq = TestPool::with_limit(2);
|
||||||
|
assert!(!txq.is_full());
|
||||||
|
|
||||||
|
// when
|
||||||
|
txq.import(b.tx().nonce(0).gas_price(110).new()).unwrap();
|
||||||
|
assert!(!txq.is_full());
|
||||||
|
|
||||||
|
txq.import(b.tx().sender(1).nonce(0).gas_price(100).new()).unwrap();
|
||||||
|
|
||||||
|
// then
|
||||||
|
assert!(txq.is_full());
|
||||||
}
|
}
|
||||||
|
|
||||||
mod listener {
|
mod listener {
|
||||||
|
|
Loading…
Reference in New Issue