From fcfeb94e10d170a91293ab0f582e64eadef5c7e8 Mon Sep 17 00:00:00 2001 From: Shanin Roman Date: Fri, 2 Jun 2023 19:33:23 +0300 Subject: [PATCH] [feature] #3088: Introduce queue throttling Signed-off-by: Shanin Roman --- config/iroha_test_config.json | 1 + config/src/queue.rs | 8 +- configs/peer/config.json | 1 + configs/peer/validator.wasm | Bin 597151 -> 597151 bytes core/src/queue.rs | 159 +++++++++++++++++++++++++++++-- docs/source/references/config.md | 12 +++ 6 files changed, 174 insertions(+), 7 deletions(-) diff --git a/config/iroha_test_config.json b/config/iroha_test_config.json index e9507503ed3..c3e37e741cd 100644 --- a/config/iroha_test_config.json +++ b/config/iroha_test_config.json @@ -53,6 +53,7 @@ }, "QUEUE": { "MAX_TRANSACTIONS_IN_QUEUE": 65536, + "MAX_TRANSACTIONS_IN_QUEUE_PER_USER": 65536, "TRANSACTION_TIME_TO_LIVE_MS": 86400000, "FUTURE_THRESHOLD_MS": 1000 }, diff --git a/config/src/queue.rs b/config/src/queue.rs index 6e5116a4e81..2b10dcd1730 100644 --- a/config/src/queue.rs +++ b/config/src/queue.rs @@ -4,6 +4,7 @@ use iroha_config_base::derive::{Documented, Proxy}; use serde::{Deserialize, Serialize}; const DEFAULT_MAX_TRANSACTIONS_IN_QUEUE: u32 = 2_u32.pow(16); +const DEFAULT_MAX_TRANSACTIONS_IN_QUEUE_PER_USER: u32 = 2_u32.pow(16); // 24 hours const DEFAULT_TRANSACTION_TIME_TO_LIVE_MS: u64 = 24 * 60 * 60 * 1000; const DEFAULT_FUTURE_THRESHOLD_MS: u64 = 1000; @@ -15,6 +16,9 @@ const DEFAULT_FUTURE_THRESHOLD_MS: u64 = 1000; pub struct Configuration { /// The upper limit of the number of transactions waiting in the queue. pub max_transactions_in_queue: u32, + /// The upper limit of the number of transactions waiting in the queue for single user. + /// Use this option to apply throttling. + pub max_transactions_in_queue_per_user: u32, /// The transaction will be dropped after this time if it is still in the queue. pub transaction_time_to_live_ms: u64, /// The threshold to determine if a transaction has been tampered to have a future timestamp. @@ -25,6 +29,7 @@ impl Default for ConfigurationProxy { fn default() -> Self { Self { max_transactions_in_queue: Some(DEFAULT_MAX_TRANSACTIONS_IN_QUEUE), + max_transactions_in_queue_per_user: Some(DEFAULT_MAX_TRANSACTIONS_IN_QUEUE_PER_USER), transaction_time_to_live_ms: Some(DEFAULT_TRANSACTION_TIME_TO_LIVE_MS), future_threshold_ms: Some(DEFAULT_FUTURE_THRESHOLD_MS), } @@ -41,11 +46,12 @@ pub mod tests { pub fn arb_proxy() ( max_transactions_in_queue in prop::option::of(Just(DEFAULT_MAX_TRANSACTIONS_IN_QUEUE)), + max_transactions_in_queue_per_user in prop::option::of(Just(DEFAULT_MAX_TRANSACTIONS_IN_QUEUE_PER_USER)), transaction_time_to_live_ms in prop::option::of(Just(DEFAULT_TRANSACTION_TIME_TO_LIVE_MS)), future_threshold_ms in prop::option::of(Just(DEFAULT_FUTURE_THRESHOLD_MS)), ) -> ConfigurationProxy { - ConfigurationProxy { max_transactions_in_queue, transaction_time_to_live_ms, future_threshold_ms } + ConfigurationProxy { max_transactions_in_queue, max_transactions_in_queue_per_user, transaction_time_to_live_ms, future_threshold_ms } } } } diff --git a/configs/peer/config.json b/configs/peer/config.json index def54c93a87..1737604b1b3 100644 --- a/configs/peer/config.json +++ b/configs/peer/config.json @@ -34,6 +34,7 @@ }, "QUEUE": { "MAX_TRANSACTIONS_IN_QUEUE": 65536, + "MAX_TRANSACTIONS_IN_QUEUE_PER_USER": 65536, "TRANSACTION_TIME_TO_LIVE_MS": 86400000, "FUTURE_THRESHOLD_MS": 1000 }, diff --git a/configs/peer/validator.wasm b/configs/peer/validator.wasm index 72feaff428792b9f5b8c2ec55eee736153c0b8b8..fe05da72d67f514ce78f50f0e3a8d58299a70558 100644 GIT binary patch delta 85136 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�mMqh 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

dYnHWin) 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 diff --git a/core/src/queue.rs b/core/src/queue.rs index 1f00900f470..c51159a8d4d 100644 --- a/core/src/queue.rs +++ b/core/src/queue.rs @@ -14,7 +14,7 @@ use dashmap::{mapref::entry::Entry, DashMap}; use eyre::{Report, Result}; use iroha_config::queue::Configuration; use iroha_crypto::HashOf; -use iroha_data_model::transaction::prelude::*; +use iroha_data_model::{account::AccountId, transaction::prelude::*}; use iroha_logger::{debug, info, trace, warn}; use iroha_primitives::must_use::MustUse; use rand::seq::IteratorRandom; @@ -29,10 +29,14 @@ use crate::{prelude::*, tx::CheckSignatureCondition as _}; pub struct Queue { /// The queue for transactions queue: ArrayQueue>, - /// [`VersionedAcceptedTransaction`]s addressed by `Hash`. + /// [`VersionedAcceptedTransaction`]s addressed by `Hash` txs: DashMap, VersionedAcceptedTransaction>, + /// Amount of transactions per user in the queue + txs_per_user: DashMap, /// The maximum number of transactions in the queue max_txs: usize, + /// The maximum number of transactions in the queue per user. Used to apply throttling + max_txs_per_user: usize, /// Length of time after which transactions are dropped. pub tx_time_to_live: Duration, /// A point in time that is considered `Future` we cannot use @@ -61,6 +65,9 @@ pub enum Error { /// Transaction is already in blockchain #[error("Transaction is already applied")] InBlockchain, + /// User reached maximum number of transactions in the queue + #[error("User reached maximum number of trnasctions in the queue")] + MaximumTransactionsPerUser, /// Signature condition check failed #[error("Failure during signature condition execution, tx hash: {tx_hash}, reason: {reason}")] SignatureCondition { @@ -86,7 +93,9 @@ impl Queue { Self { queue: ArrayQueue::new(cfg.max_transactions_in_queue as usize), txs: DashMap::new(), + txs_per_user: DashMap::new(), max_txs: cfg.max_transactions_in_queue as usize, + max_txs_per_user: cfg.max_transactions_in_queue_per_user as usize, tx_time_to_live: Duration::from_millis(cfg.transaction_time_to_live_ms), future_threshold: Duration::from_millis(cfg.future_threshold_ms), } @@ -185,21 +194,26 @@ impl Queue { }); } + if let Err(err) = self.check_and_increase_per_user_tx_count(&tx.payload().account_id) { + return Err(Failure { tx, err }); + } + // Insert entry first so that the `tx` popped from `queue` will always have a `(hash, tx)` record in `txs`. entry.insert(tx); - let res = self.queue.push(hash).map_err(|err_hash| { + self.queue.push(hash).map_err(|err_hash| { warn!("Queue is full"); let (_, err_tx) = self .txs .remove(&err_hash) .expect("Inserted just before match"); + self.decrease_per_user_tx_count(&err_tx.payload().account_id); Failure { tx: err_tx, err: Error::Full, } - }); + })?; trace!("Transaction queue length = {}", self.queue.len(),); - res + Ok(()) } /// Pop single transaction from the queue. Record all visited and not removed transactions in `seen`. @@ -227,12 +241,14 @@ impl Queue { let tx = entry.get(); if tx.is_in_blockchain(wsv) { debug!("Transaction is already in blockchain"); - entry.remove_entry(); + let (_, tx) = entry.remove_entry(); + self.decrease_per_user_tx_count(&tx.payload().account_id); continue; } if tx.is_expired(self.tx_time_to_live) { debug!("Transaction is expired"); let (_, tx) = entry.remove_entry(); + self.decrease_per_user_tx_count(&tx.payload().account_id); expired_transactions.push(tx); continue; } @@ -299,6 +315,41 @@ impl Queue { .expect("Exceeded the number of transactions pending"); expired_transactions.extend(expired_transactions_queue); } + + /// Check that the user adhered to the maximum transaction per user limit and increment their transaction count. + fn check_and_increase_per_user_tx_count(&self, account_id: &AccountId) -> Result<(), Error> { + match self.txs_per_user.entry(account_id.clone()) { + Entry::Vacant(vacant) => { + vacant.insert(1); + } + Entry::Occupied(mut occupied) => { + let txs = *occupied.get(); + if txs >= self.max_txs_per_user { + warn!( + max_txs_per_user = self.max_txs_per_user, + %account_id, + "Account reached maximum allowed number of transactions in the queue per user" + ); + return Err(Error::MaximumTransactionsPerUser); + } + *occupied.get_mut() += 1; + } + } + + Ok(()) + } + + fn decrease_per_user_tx_count(&self, account_id: &AccountId) { + let Entry::Occupied(mut occupied) = self.txs_per_user + .entry(account_id.clone()) else { panic!("Call to decrease always should be paired with increase count. This is a bug.") }; + + let count = occupied.get_mut(); + if *count > 1 { + *count -= 1; + } else { + occupied.remove_entry(); + } + } } #[cfg(test)] @@ -763,6 +814,10 @@ mod tests { Err(Failure { err: Error::Full, .. }) => (), + Err(Failure { + err: Error::MaximumTransactionsPerUser, + .. + }) => (), Err(Failure { err, .. }) => panic!("{err}"), } } @@ -830,4 +885,96 @@ mod tests { )); assert_eq!(queue.txs.len(), 1); } + + #[test] + fn queue_throttling() { + let alice_key_pair = KeyPair::generate().unwrap(); + let bob_key_pair = KeyPair::generate().unwrap(); + let kura = Kura::blank_kura_for_testing(); + let world = { + let domain_id = DomainId::from_str("wonderland").expect("Valid"); + let alice_account_id = AccountId::from_str("alice@wonderland").expect("Valid"); + let bob_account_id = AccountId::from_str("bob@wonderland").expect("Valid"); + let mut domain = Domain::new(domain_id).build(&alice_account_id); + let alice_account = Account::new( + alice_account_id.clone(), + [alice_key_pair.public_key().clone()], + ) + .build(&alice_account_id); + let bob_account = + Account::new(bob_account_id.clone(), [bob_key_pair.public_key().clone()]) + .build(&bob_account_id); + assert!(domain.add_account(alice_account).is_none()); + assert!(domain.add_account(bob_account).is_none()); + World::with([domain], PeersIds::new()) + }; + let mut wsv = WorldStateView::new(world, kura.clone()); + + let queue = Queue::from_configuration(&Configuration { + transaction_time_to_live_ms: 100_000, + max_transactions_in_queue: 100, + max_transactions_in_queue_per_user: 1, + ..ConfigurationProxy::default() + .build() + .expect("Default queue config should always build") + }); + + // First push by Alice should be fine + queue + .push( + accepted_tx("alice@wonderland", 100_000, alice_key_pair.clone()), + &wsv, + ) + .expect("Failed to push tx into queue"); + + // Second push by Alice excide limit and will be rejected + let result = queue.push( + accepted_tx("alice@wonderland", 100_000, alice_key_pair.clone()), + &wsv, + ); + assert!( + matches!( + result, + Err(Failure { + tx: _, + err: Error::MaximumTransactionsPerUser + }), + ), + "Failed to match: {:?}", + result, + ); + + // First push by Bob should be fine despite previous Alice error + queue + .push( + accepted_tx("bob@wonderland", 100_000, bob_key_pair.clone()), + &wsv, + ) + .expect("Failed to push tx into queue"); + + let transactions = queue.collect_transactions_for_block(&wsv, 10); + assert_eq!(transactions.len(), 2); + for transaction in transactions { + // Put transaction hashes into wsv as if they were in the blockchain + wsv.transactions.insert(transaction.hash()); + } + // Cleanup transactions + let transactions = queue.collect_transactions_for_block(&wsv, 10); + assert!(transactions.is_empty()); + + // After cleanup Alice and Bob pushes should work fine + queue + .push( + accepted_tx("alice@wonderland", 100_000, alice_key_pair.clone()), + &wsv, + ) + .expect("Failed to push tx into queue"); + + queue + .push( + accepted_tx("bob@wonderland", 100_000, bob_key_pair.clone()), + &wsv, + ) + .expect("Failed to push tx into queue"); + } } diff --git a/docs/source/references/config.md b/docs/source/references/config.md index 3e89c32a5c6..4b781ccfbde 100644 --- a/docs/source/references/config.md +++ b/docs/source/references/config.md @@ -65,6 +65,7 @@ The following is the default configuration used by Iroha. }, "QUEUE": { "MAX_TRANSACTIONS_IN_QUEUE": 65536, + "MAX_TRANSACTIONS_IN_QUEUE_PER_USER": 65536, "TRANSACTION_TIME_TO_LIVE_MS": 86400000, "FUTURE_THRESHOLD_MS": 1000 }, @@ -393,6 +394,7 @@ Has type `Option`[^1]. Can be configured via environm { "FUTURE_THRESHOLD_MS": 1000, "MAX_TRANSACTIONS_IN_QUEUE": 65536, + "MAX_TRANSACTIONS_IN_QUEUE_PER_USER": 65536, "TRANSACTION_TIME_TO_LIVE_MS": 86400000 } ``` @@ -417,6 +419,16 @@ Has type `Option`[^1]. Can be configured via environment variable `QUEUE_MA 65536 ``` +### `queue.max_transactions_in_queue_per_user` + +The upper limit of the number of transactions waiting in the queue for single user. + +Has type `Option`[^1]. Can be configured via environment variable `QUEUE_MAX_TRANSACTIONS_IN_QUEUE_PER_USER` + +```json +65536 +``` + ### `queue.transaction_time_to_live_ms` The transaction will be dropped after this time if it is still in the queue.