refactor cost calculation (#21062)
* - cache calculated transaction cost to allow sharing; - atomic cost tracking op; - only lock accounts for transactions eligible for current block; - moved qos service and stats reporting to its own model; - add cost_weight default to neutral (as 1), vote has zero weight; Co-authored-by: Tyera Eulberg <teulberg@gmail.com> * Update core/src/qos_service.rs Co-authored-by: Tyera Eulberg <teulberg@gmail.com> * Update core/src/qos_service.rs Co-authored-by: Tyera Eulberg <teulberg@gmail.com> Co-authored-by: Tyera Eulberg <teulberg@gmail.com>
This commit is contained in:
		@@ -932,6 +932,26 @@ impl Accounts {
 | 
			
		||||
            .collect()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[allow(clippy::needless_collect)]
 | 
			
		||||
    pub fn lock_accounts_with_results<'a>(
 | 
			
		||||
        &self,
 | 
			
		||||
        txs: impl Iterator<Item = &'a SanitizedTransaction>,
 | 
			
		||||
        results: impl Iterator<Item = &'a Result<()>>,
 | 
			
		||||
        demote_program_write_locks: bool,
 | 
			
		||||
    ) -> Vec<Result<()>> {
 | 
			
		||||
        let keys: Vec<_> = txs
 | 
			
		||||
            .map(|tx| tx.get_account_locks(demote_program_write_locks))
 | 
			
		||||
            .collect();
 | 
			
		||||
        let account_locks = &mut self.account_locks.lock().unwrap();
 | 
			
		||||
        keys.into_iter()
 | 
			
		||||
            .zip(results)
 | 
			
		||||
            .map(|(keys, result)| match result {
 | 
			
		||||
                Ok(()) => self.lock_account(account_locks, keys.writable, keys.readonly),
 | 
			
		||||
                Err(e) => Err(e.clone()),
 | 
			
		||||
            })
 | 
			
		||||
            .collect()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Once accounts are unlocked, new transactions that modify that state can enter the pipeline
 | 
			
		||||
    #[allow(clippy::needless_collect)]
 | 
			
		||||
    pub fn unlock_accounts<'a>(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user