pub struct LocalExecutionManager { /* private fields */ }Expand description
Local lifecycle facade shared by service, CLI, and SDK adapters.
Implementations§
Source§impl LocalExecutionManager
impl LocalExecutionManager
Sourcepub async fn with_native_linux_oci_migration(
state_path: impl Into<PathBuf>,
home_dir: impl Into<PathBuf>,
config: NativeLinuxOciMigrationConfig,
) -> ExecutionManagerResult<Self>
pub async fn with_native_linux_oci_migration( state_path: impl Into<PathBuf>, home_dir: impl Into<PathBuf>, config: NativeLinuxOciMigrationConfig, ) -> ExecutionManagerResult<Self>
Compose the retained VM backend with the production native-Linux OCI owner and bundle provider. Only new Sandbox reservations use OCI.
Sourcepub async fn with_windows_whpx_oci_qualification(
state_path: impl Into<PathBuf>,
home_dir: impl Into<PathBuf>,
config: WindowsWhpxOciMigrationConfig,
) -> ExecutionManagerResult<Self>
pub async fn with_windows_whpx_oci_qualification( state_path: impl Into<PathBuf>, home_dir: impl Into<PathBuf>, config: WindowsWhpxOciMigrationConfig, ) -> ExecutionManagerResult<Self>
Compose the retained backend with the externally launched Box/WHPX OCI service.
Sourcepub async fn with_configured_backend(
state_path: impl Into<PathBuf>,
home_dir: impl Into<PathBuf>,
) -> ExecutionManagerResult<Self>
pub async fn with_configured_backend( state_path: impl Into<PathBuf>, home_dir: impl Into<PathBuf>, ) -> ExecutionManagerResult<Self>
Select the production migration composition only when explicitly opted
in through A3S_BOX_OCI_MIGRATION=sandbox.
Sourcepub async fn with_configured_backend_and_pull_progress(
state_path: impl Into<PathBuf>,
home_dir: impl Into<PathBuf>,
pull_progress_fn: Option<PullProgressFn>,
) -> ExecutionManagerResult<Self>
pub async fn with_configured_backend_and_pull_progress( state_path: impl Into<PathBuf>, home_dir: impl Into<PathBuf>, pull_progress_fn: Option<PullProgressFn>, ) -> ExecutionManagerResult<Self>
Configured construction retaining the CLI’s image-pull progress hook on both the legacy and migrated preparation paths.
Source§impl LocalExecutionManager
impl LocalExecutionManager
Sourcepub async fn remove_execution(
&self,
execution_id: &ExecutionId,
expected_generation: ExecutionGeneration,
) -> ExecutionManagerResult<bool>
pub async fn remove_execution( &self, execution_id: &ExecutionId, expected_generation: ExecutionGeneration, ) -> ExecutionManagerResult<bool>
Remove one terminal generation after durably claiming its teardown.
A failed cleanup deliberately leaves the record in removing. Retrying
the same generation resumes cleanup before the record is forgotten.
Source§impl LocalExecutionManager
impl LocalExecutionManager
pub fn new( state_path: impl Into<PathBuf>, home_dir: impl Into<PathBuf>, backend: Arc<dyn LocalExecutionBackend>, ) -> Self
pub fn state_path(&self) -> &Path
pub fn with_vm_backend( state_path: impl Into<PathBuf>, home_dir: impl Into<PathBuf>, ) -> Self
Sourcepub fn with_oci_migration_backend(
state_path: impl Into<PathBuf>,
home_dir: impl Into<PathBuf>,
oci_backend: Arc<dyn LocalExecutionBackend>,
policy: OciMigrationPolicy,
) -> Self
pub fn with_oci_migration_backend( state_path: impl Into<PathBuf>, home_dir: impl Into<PathBuf>, oci_backend: Arc<dyn LocalExecutionBackend>, policy: OciMigrationPolicy, ) -> Self
Compose the retained Box backend with an explicitly supplied OCI SDK backend. The policy affects new reservations only; every selected route is persisted before preflight and remains authoritative after restart.
Trait Implementations§
Source§impl Clone for LocalExecutionManager
impl Clone for LocalExecutionManager
Source§fn clone(&self) -> LocalExecutionManager
fn clone(&self) -> LocalExecutionManager
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl ExecutionManager for LocalExecutionManager
impl ExecutionManager for LocalExecutionManager
Source§fn create<'life0, 'life1, 'async_trait>(
&'life0 self,
request: CreateExecutionRequest,
operation_id: &'life1 OperationId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionReservation>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create<'life0, 'life1, 'async_trait>(
&'life0 self,
request: CreateExecutionRequest,
operation_id: &'life1 OperationId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionReservation>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
operation_id.Source§fn start<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn start<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn inspect<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn read_logs<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<Vec<LogEntry>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_logs<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<Vec<LogEntry>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_processes<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionProcessInventory>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_processes<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionProcessInventory>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn stats<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionStats>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn stats<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionStats>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn events<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
request: ExecutionEventsRequest,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionEventBatch>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn events<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
request: ExecutionEventsRequest,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionEventBatch>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn update_resources<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
operation_id: &'life2 OperationId,
update: ExecutionResourceUpdate,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn update_resources<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
operation_id: &'life2 OperationId,
update: ExecutionResourceUpdate,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn create_filesystem_snapshot<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
snapshot_id: &'life2 ExecutionSnapshotId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionSnapshot>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn create_filesystem_snapshot<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
snapshot_id: &'life2 ExecutionSnapshotId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionSnapshot>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn filesystem_snapshot_size<'life0, 'life1, 'async_trait>(
&'life0 self,
snapshot_id: &'life1 ExecutionSnapshotId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<Option<u64>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn filesystem_snapshot_size<'life0, 'life1, 'async_trait>(
&'life0 self,
snapshot_id: &'life1 ExecutionSnapshotId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<Option<u64>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
None when it does not exist.Source§fn delete_filesystem_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
snapshot_id: &'life1 ExecutionSnapshotId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_filesystem_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
snapshot_id: &'life1 ExecutionSnapshotId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn pause<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
keep_memory: bool,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn pause<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
keep_memory: bool,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn resume<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn restart_with_options<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
operation_id: &'life2 OperationId,
options: RestartExecutionOptions,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn restart_with_options<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
operation_id: &'life2 OperationId,
options: RestartExecutionOptions,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionLease>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn kill<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<KillOutcome>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn kill_with_options<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
options: KillExecutionOptions,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<KillOutcome>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn kill_with_options<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
options: KillExecutionOptions,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<KillOutcome>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn remove<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn remove<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
expected_generation: ExecutionGeneration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn reconcile<'life0, 'life1, 'async_trait>(
&'life0 self,
operation_id: &'life1 OperationId,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ReconcileOutcome>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn create_and_start<'life0, 'life1, 'async_trait>(
&'life0 self,
request: CreateExecutionRequest,
operation_id: &'life1 OperationId,
) -> Pin<Box<dyn Future<Output = Result<ExecutionLease, ExecutionManagerError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn create_and_start<'life0, 'life1, 'async_trait>(
&'life0 self,
request: CreateExecutionRequest,
operation_id: &'life1 OperationId,
) -> Pin<Box<dyn Future<Output = Result<ExecutionLease, ExecutionManagerError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
operation_id. Read moreSource§fn restart<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
generation: ExecutionGeneration,
operation_id: &'life2 OperationId,
) -> Pin<Box<dyn Future<Output = Result<ExecutionLease, ExecutionManagerError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn restart<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
generation: ExecutionGeneration,
operation_id: &'life2 OperationId,
) -> Pin<Box<dyn Future<Output = Result<ExecutionLease, ExecutionManagerError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Source§impl ExecutionPortConnector for LocalExecutionManager
impl ExecutionPortConnector for LocalExecutionManager
fn connect_port<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
generation: ExecutionGeneration,
port: NonZeroU16,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionPortStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§impl ExecutionSessionManager for LocalExecutionManager
impl ExecutionSessionManager for LocalExecutionManager
fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
generation: ExecutionGeneration,
request: ExecRequest,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecOutput>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn start_process<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
generation: ExecutionGeneration,
request: ExecRequest,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionProcess>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn start_pty<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
generation: ExecutionGeneration,
request: PtyRequest,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<ExecutionProcess>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn transfer_file<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
generation: ExecutionGeneration,
request: FileRequest,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<FileResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn filesystem<'life0, 'life1, 'async_trait>(
&'life0 self,
execution_id: &'life1 ExecutionId,
generation: ExecutionGeneration,
request: FilesystemRequest,
) -> Pin<Box<dyn Future<Output = ExecutionManagerResult<FilesystemResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl !RefUnwindSafe for LocalExecutionManager
impl !UnwindSafe for LocalExecutionManager
impl Freeze for LocalExecutionManager
impl Send for LocalExecutionManager
impl Sync for LocalExecutionManager
impl Unpin for LocalExecutionManager
impl UnsafeUnpin for LocalExecutionManager
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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