fidl_fuchsia_component_runner

Enum ComponentControllerRequest

Source
pub enum ComponentControllerRequest {
    Stop {
        control_handle: ComponentControllerControlHandle,
    },
    Kill {
        control_handle: ComponentControllerControlHandle,
    },
    _UnknownMethod {
        ordinal: u64,
        control_handle: ComponentControllerControlHandle,
        method_type: MethodType,
    },
}
Expand description

A protocol for binding and controlling the lifetime of a component instance started using ComponentRunner.Start(). The component manager is the intended direct client of this protocol.

When the controlled component instance terminates or becomes inaccessible for any reason, the server closes the connection with an epitaph.

§Lifecycle

A component may exist in one of two states: Started, or Stopped. The component is Started from the time ComponentRunner.Start() is called until the ComponentRunner closes the ComponentController handle. The component then transitions to Stopped.

Component manager uses ComponentController to terminate a component in two steps:

  1. Component manager calls Stop() to indicate that the ComponentRunner should stop a component’s execution and send the OnStop event.
  2. If after some time the ComponentController is not closed, component manager calls Kill() to indicate that the ComponentRunner must halt a component’s execution immediately, and then send the OnStop event. The component manager may wait some period of time after calling Kill() before sending OnStop, but makes no guarantees it will wait or for how long.

Component manager first waits for the ComponentController to close, and then tears down the namespace it hosts for the stopped component. Component manager may call Kill() without first having called Stop().

Before stopping, a component can optionally use OnEscrow to store some state in the framework, to receive those state again the next time it is started.

When the component stops, the runner should send an OnStop event instead of just closing the channel, to report the component’s termination status (see below) and (optionally) an exit code. Once the runner has sent OnStop it is free to close [ComponentRunner]; the component framework will close its end of the channel when it receives this event.

§Legacy

Instead of sending OnStop, it is also legal for a runner to close the channel with with an epitaph equal to the termination status, but this is a legacy method for backward compatibility that’s no longer recommended.

§Termination status

The termination status indicates the component’s final disposition in the eyes of the runner.

Note that termination status is not synonymous with a component’s exit code. A component’s exit code, which is optional for a runner to report, is an integer that represents the program’s own return code. For example, for ELF components, it is the value returned by main(). The termination status is the runner’s status code for the component’s termination, which may capture failure modes that occur in the context of the runner itself rather than the program.

The following termination statuses may be sent by the server on error:

  • ZX_OK: The component exited successfully, typically because the component was asked to stop or it decided independently to exit.
  • INVALID_ARGUMENTS:
    • start_info.resolved_url is not supported by this runner;
    • start_info contains missing or invalid arguments.
  • INSTANCE_CANNOT_START: The runner could not start the component. For example, a critical part of the program could not be found or loaded, or the referenced binary was invalid for this runner.
  • RESOURCE_UNAVAILABLE: The component could not be launched due to lack of resources.
  • INTERNAL: An unexpected internal runner error was encountered.
  • INSTANCE_DIED: The component instance was started but subsequently terminated with an error.
  • Other status codes (e.g. ZX_ERR_PEER_CLOSED) may indicate a failure of the component runner itself. The component manager may respond to such failures by terminating the component runner’s job to ensure system stability.

Variants§

§

Stop

Request to stop the component instance.

After stopping the component instance, the server should close this connection with an epitaph. After the connection closes, component manager considers this component instance to be Stopped and the component’s namespace will be torn down.

§

Kill

Stop this component instance immediately.

The ComponentRunner must immediately kill the component instance, and then close this connection with an epitaph. After the connection closes, component manager considers this component instance to be Stopped and the component’s namespace will be torn down.

In some cases Kill() may be issued before Stop(), but that is not guaranteed.

§

_UnknownMethod

An interaction was received which does not match any known method.

Fields

This variant is marked as non-exhaustive
Non-exhaustive enum variants could have additional fields added in future. Therefore, non-exhaustive enum variants cannot be constructed in external crates and cannot be matched against.
§ordinal: u64

Ordinal of the method that was called.

§method_type: MethodType

Implementations§

Trait Implementations§

Source§

impl Debug for ComponentControllerRequest

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

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
§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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