solana_program_runtime::loaded_programs

Struct LoadedPrograms

source
pub struct LoadedPrograms<FG: ForkGraph> {
    pub latest_root_slot: Slot,
    pub latest_root_epoch: Epoch,
    pub environments: ProgramRuntimeEnvironments,
    pub upcoming_environments: Option<ProgramRuntimeEnvironments>,
    pub programs_to_recompile: Vec<(Pubkey, Arc<LoadedProgram>)>,
    pub stats: Stats,
    pub fork_graph: Option<Arc<RwLock<FG>>>,
    pub loading_task_waiter: Arc<LoadingTaskWaiter>,
    /* 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

§upcoming_environments: Option<ProgramRuntimeEnvironments>

Anticipated replacement for environments at the next epoch

This is None during most of an epoch, and only Some around the boundaries (at the end and beginning of an epoch). More precisely, it starts with the recompilation phase a few hundred slots before the epoch boundary, and it ends with the first rerooting after the epoch boundary.

§programs_to_recompile: Vec<(Pubkey, Arc<LoadedProgram>)>

List of loaded programs which should be recompiled before the next epoch (but don’t have to).

§stats: Stats§fork_graph: Option<Arc<RwLock<FG>>>§loading_task_waiter: Arc<LoadingTaskWaiter>

Implementations§

source§

impl<FG: ForkGraph> LoadedPrograms<FG>

source

pub fn new(root_slot: Slot, root_epoch: Epoch) -> Self

source

pub fn set_fork_graph(&mut self, fork_graph: Arc<RwLock<FG>>)

source

pub fn get_environments_for_epoch( &self, epoch: Epoch, ) -> &ProgramRuntimeEnvironments

Returns the current environments depending on the given epoch

source

pub fn get_upcoming_environments_for_epoch( &self, epoch: Epoch, ) -> Option<ProgramRuntimeEnvironments>

Returns the upcoming environments depending on the given epoch

source

pub fn assign_program(&mut self, key: Pubkey, entry: Arc<LoadedProgram>) -> bool

Insert a single entry. It’s typically called during transaction loading, when the cache doesn’t contain the entry corresponding to program key.

source

pub fn prune_by_deployment_slot(&mut self, slot: Slot)

source

pub fn prune(&mut self, new_root_slot: Slot, new_root_epoch: Epoch)

Before rerooting the blockstore this removes all superfluous entries

source

pub fn extract( &mut self, search_for: &mut Vec<(Pubkey, (LoadedProgramMatchCriteria, u64))>, loaded_programs_for_tx_batch: &mut LoadedProgramsForTxBatch, is_first_round: bool, ) -> Option<(Pubkey, u64)>

Extracts a subset of the programs relevant to a transaction batch and returns which program accounts the accounts DB needs to load.

source

pub fn finish_cooperative_loading_task( &mut self, slot: Slot, key: Pubkey, loaded_program: Arc<LoadedProgram>, ) -> bool

Called by Bank::replenish_program_cache() for each program that is done loading.

source

pub fn merge(&mut self, tx_batch_cache: &LoadedProgramsForTxBatch)

source

pub fn get_flattened_entries( &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.

source

pub fn sort_and_unload(&mut self, shrink_to: PercentageInteger)

Unloads programs which were used infrequently

source

pub fn evict_using_2s_random_selection( &mut self, shrink_to: PercentageInteger, now: Slot, )

Evicts programs using 2’s random selection, choosing the least used program out of the two entries. The eviction is performed enough number of times to reduce the cache usage to the given percentage.

source

pub fn remove_programs(&mut self, keys: impl Iterator<Item = Pubkey>)

Removes all the entries at the given keys, if they exist

source

pub fn get_slot_versions_for_tests(&self, key: &Pubkey) -> &[Arc<LoadedProgram>]

Returns the slot_versions of the second level for the given program id.

source

pub fn unload_all_programs(&mut self)

Trait Implementations§

source§

impl<FG: ForkGraph> AbiExample for LoadedPrograms<FG>

source§

fn example() -> Self

source§

impl<FG: ForkGraph> Debug for LoadedPrograms<FG>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<FG> !Freeze for LoadedPrograms<FG>

§

impl<FG> RefUnwindSafe for LoadedPrograms<FG>

§

impl<FG> Send for LoadedPrograms<FG>
where FG: Send + Sync,

§

impl<FG> Sync for LoadedPrograms<FG>
where FG: Send + Sync,

§

impl<FG> Unpin for LoadedPrograms<FG>

§

impl<FG> UnwindSafe for LoadedPrograms<FG>

Blanket Implementations§

source§

impl<T> AbiExample for T

source§

default fn example() -> T

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more