Don't use stale executor cache (#13966)
This commit is contained in:
@ -273,25 +273,23 @@ impl CachedExecutors {
|
||||
})
|
||||
}
|
||||
fn put(&mut self, pubkey: &Pubkey, executor: Arc<dyn Executor>) {
|
||||
if !self.executors.contains_key(pubkey) {
|
||||
if self.executors.len() >= self.max {
|
||||
let mut least = u64::MAX;
|
||||
let default_key = Pubkey::default();
|
||||
let mut least_key = &default_key;
|
||||
for (key, (count, _)) in self.executors.iter() {
|
||||
let count = count.load(Relaxed);
|
||||
if count < least {
|
||||
least = count;
|
||||
least_key = key;
|
||||
}
|
||||
if !self.executors.contains_key(pubkey) && self.executors.len() >= self.max {
|
||||
let mut least = u64::MAX;
|
||||
let default_key = Pubkey::default();
|
||||
let mut least_key = &default_key;
|
||||
for (key, (count, _)) in self.executors.iter() {
|
||||
let count = count.load(Relaxed);
|
||||
if count < least {
|
||||
least = count;
|
||||
least_key = key;
|
||||
}
|
||||
let least_key = *least_key;
|
||||
let _ = self.executors.remove(&least_key);
|
||||
}
|
||||
let _ = self
|
||||
.executors
|
||||
.insert(*pubkey, (AtomicU64::new(0), executor));
|
||||
let least_key = *least_key;
|
||||
let _ = self.executors.remove(&least_key);
|
||||
}
|
||||
let _ = self
|
||||
.executors
|
||||
.insert(*pubkey, (AtomicU64::new(0), executor));
|
||||
}
|
||||
fn remove(&mut self, pubkey: &Pubkey) {
|
||||
let _ = self.executors.remove(pubkey);
|
||||
@ -2786,7 +2784,9 @@ impl Bank {
|
||||
loader_refcells,
|
||||
);
|
||||
|
||||
self.update_executors(executors);
|
||||
if process_result.is_ok() {
|
||||
self.update_executors(executors);
|
||||
}
|
||||
|
||||
let nonce_rollback =
|
||||
if let Err(TransactionError::InstructionError(_, _)) = &process_result {
|
||||
|
Reference in New Issue
Block a user