pub struct LoadedPrograms<FG: ForkGraph> {
pub latest_root_slot: Slot,
pub latest_root_epoch: Epoch,
pub environments: ProgramRuntimeEnvironments,
pub stats: Stats,
pub fork_graph: Option<Arc<RwLock<FG>>>,
/* private fields */
}
Fields§
§latest_root_slot: Slot
The slot of the last rerooting
latest_root_epoch: Epoch
The epoch of the last rerooting
environments: ProgramRuntimeEnvironments
Environments of the current epoch
stats: Stats
§fork_graph: Option<Arc<RwLock<FG>>>
Implementations§
source§impl<FG: ForkGraph> LoadedPrograms<FG>
impl<FG: ForkGraph> LoadedPrograms<FG>
pub fn set_fork_graph(&mut self, fork_graph: Arc<RwLock<FG>>)
sourcepub fn get_environments_for_epoch(
&self,
_epoch: Epoch
) -> &ProgramRuntimeEnvironments
pub fn get_environments_for_epoch( &self, _epoch: Epoch ) -> &ProgramRuntimeEnvironments
Returns the current environments depending on the given epoch
sourcepub fn replenish(
&mut self,
key: Pubkey,
entry: Arc<LoadedProgram>
) -> (bool, Arc<LoadedProgram>)
pub fn replenish( &mut self, key: Pubkey, entry: Arc<LoadedProgram> ) -> (bool, Arc<LoadedProgram>)
Refill the cache with a single entry. It’s typically called during transaction loading,
when the cache doesn’t contain the entry corresponding to program key
.
The function dedupes the cache, in case some other thread replenished the entry in parallel.
sourcepub fn assign_program(
&mut self,
key: Pubkey,
entry: Arc<LoadedProgram>
) -> Arc<LoadedProgram>
pub fn assign_program( &mut self, key: Pubkey, entry: Arc<LoadedProgram> ) -> Arc<LoadedProgram>
Assign the program entry
to the given key
in the cache.
This is typically called when a deployed program is managed (un-/re-/deployed) via
loader instructions. Because of the cooldown, entires can not have the same
deployment_slot and effective_slot.
sourcepub fn prune_feature_set_transition(&mut self)
pub fn prune_feature_set_transition(&mut self)
On the epoch boundary this removes all programs of the outdated feature set
pub fn prune_by_deployment_slot(&mut self, slot: Slot)
sourcepub fn prune(&mut self, new_root_slot: Slot, new_root_epoch: Epoch)
pub fn prune(&mut self, new_root_slot: Slot, new_root_epoch: Epoch)
Before rerooting the blockstore this removes all superfluous entries
sourcepub fn extract<S: WorkingSlot>(
&self,
working_slot: &S,
keys: impl Iterator<Item = (Pubkey, (LoadedProgramMatchCriteria, u64))>
) -> ExtractedPrograms
pub fn extract<S: WorkingSlot>( &self, working_slot: &S, keys: impl Iterator<Item = (Pubkey, (LoadedProgramMatchCriteria, u64))> ) -> ExtractedPrograms
Extracts a subset of the programs relevant to a transaction batch and returns which program accounts the accounts DB needs to load.
pub fn merge(&mut self, tx_batch_cache: &LoadedProgramsForTxBatch)
sourcepub fn get_entries_sorted_by_tx_usage(
&self,
include_program_runtime_v1: bool,
include_program_runtime_v2: bool
) -> Vec<(Pubkey, Arc<LoadedProgram>)>
pub fn get_entries_sorted_by_tx_usage( &self, include_program_runtime_v1: bool, include_program_runtime_v2: bool ) -> Vec<(Pubkey, Arc<LoadedProgram>)>
Returns the list of loaded programs which are verified and compiled sorted by tx_usage_counter
.
Entries from program runtime v1 and v2 can be individually filtered.
sourcepub fn sort_and_unload(&mut self, shrink_to: PercentageInteger)
pub fn sort_and_unload(&mut self, shrink_to: PercentageInteger)
Unloads programs which were used infrequently
sourcepub fn remove_programs(&mut self, keys: impl Iterator<Item = Pubkey>)
pub fn remove_programs(&mut self, keys: impl Iterator<Item = Pubkey>)
Removes all the entries at the given keys, if they exist