Fix a race conditon in the pool when transactions are imported during pruning. (#2136)

* Store recently pruned tags to avoid re-importing transactions.

* Update core/transaction-pool/graph/src/base_pool.rs

* Update core/transaction-pool/graph/src/base_pool.rs

* Update core/transaction-pool/graph/src/base_pool.rs

* Update base_pool.rs
This commit is contained in:
Tomasz Drwięga
2019-03-28 18:57:26 +01:00
committed by Gav Wood
parent 7046e13de2
commit e22b491783
6 changed files with 113 additions and 17 deletions
@@ -517,18 +517,18 @@ mod tests {
tx3.provides = vec![vec![4]];
// when
let x = WaitingTransaction::new(tx2, &ready.provided_tags());
let x = WaitingTransaction::new(tx2, &ready.provided_tags(), &[]);
ready.import(x).unwrap();
let x = WaitingTransaction::new(tx3, &ready.provided_tags());
let x = WaitingTransaction::new(tx3, &ready.provided_tags(), &[]);
ready.import(x).unwrap();
assert_eq!(ready.get().count(), 2);
// too low priority
let x = WaitingTransaction::new(tx1.clone(), &ready.provided_tags());
let x = WaitingTransaction::new(tx1.clone(), &ready.provided_tags(), &[]);
ready.import(x).unwrap_err();
tx1.priority = 10;
let x = WaitingTransaction::new(tx1.clone(), &ready.provided_tags());
let x = WaitingTransaction::new(tx1.clone(), &ready.provided_tags(), &[]);
ready.import(x).unwrap();
// then
@@ -562,15 +562,15 @@ mod tests {
};
// when
let x = WaitingTransaction::new(tx1, &ready.provided_tags());
let x = WaitingTransaction::new(tx1, &ready.provided_tags(), &[]);
ready.import(x).unwrap();
let x = WaitingTransaction::new(tx2, &ready.provided_tags());
let x = WaitingTransaction::new(tx2, &ready.provided_tags(), &[]);
ready.import(x).unwrap();
let x = WaitingTransaction::new(tx3, &ready.provided_tags());
let x = WaitingTransaction::new(tx3, &ready.provided_tags(), &[]);
ready.import(x).unwrap();
let x = WaitingTransaction::new(tx4, &ready.provided_tags());
let x = WaitingTransaction::new(tx4, &ready.provided_tags(), &[]);
ready.import(x).unwrap();
let x = WaitingTransaction::new(tx5, &ready.provided_tags());
let x = WaitingTransaction::new(tx5, &ready.provided_tags(), &[]);
ready.import(x).unwrap();
// then