ExecutionClient

Struct ExecutionClient 

Source
pub struct ExecutionClient<T> { /* private fields */ }
Expand description

The Remote Execution API is used to execute an [Action][build.bazel.remote.execution.v2.Action] on the remote workers.

As with other services in the Remote Execution API, any call may return an error with a [RetryInfo][google.rpc.RetryInfo] error detail providing information about when the client should retry the request; clients SHOULD respect the information provided.

Implementations§

Source§

impl ExecutionClient<Channel>

Source

pub async fn connect<D>(dst: D) -> Result<Self, Error>
where D: TryInto<Endpoint>, D::Error: Into<StdError>,

Attempt to create a new client by connecting to a given endpoint.

Source§

impl<T> ExecutionClient<T>
where T: GrpcService<BoxBody>, T::Error: Into<StdError>, T::ResponseBody: Body<Data = Bytes> + Send + 'static, <T::ResponseBody as Body>::Error: Into<StdError> + Send,

Source

pub fn new(inner: T) -> Self

Source

pub fn with_origin(inner: T, origin: Uri) -> Self

Source

pub fn with_interceptor<F>( inner: T, interceptor: F, ) -> ExecutionClient<InterceptedService<T, F>>
where F: Interceptor, T::ResponseBody: Default, T: Service<Request<BoxBody>, Response = Response<<T as GrpcService<BoxBody>>::ResponseBody>>, <T as Service<Request<BoxBody>>>::Error: Into<StdError> + Send + Sync,

Source

pub fn send_compressed(self, encoding: CompressionEncoding) -> Self

Compress requests with the given encoding.

This requires the server to support it otherwise it might respond with an error.

Source

pub fn accept_compressed(self, encoding: CompressionEncoding) -> Self

Enable decompressing responses.

Source

pub fn max_decoding_message_size(self, limit: usize) -> Self

Limits the maximum size of a decoded message.

Default: 4MB

Source

pub fn max_encoding_message_size(self, limit: usize) -> Self

Limits the maximum size of an encoded message.

Default: usize::MAX

Source

pub async fn execute( &mut self, request: impl IntoRequest<ExecuteRequest>, ) -> Result<Response<Streaming<Operation>>, Status>

Execute an action remotely.

In order to execute an action, the client must first upload all of the inputs, the [Command][build.bazel.remote.execution.v2.Command] to run, and the [Action][build.bazel.remote.execution.v2.Action] into the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. It then calls Execute with an action_digest referring to them. The server will run the action and eventually return the result.

The input Action’s fields MUST meet the various canonicalization requirements specified in the documentation for their types so that it has the same digest as other logically equivalent Actions. The server MAY enforce the requirements and return errors if a non-canonical input is received. It MAY also proceed without verifying some or all of the requirements, such as for performance reasons. If the server does not verify the requirement, then it will treat the Action as distinct from another logically equivalent action if they hash differently.

Returns a stream of [google.longrunning.Operation][google.longrunning.Operation] messages describing the resulting execution, with eventual response [ExecuteResponse][build.bazel.remote.execution.v2.ExecuteResponse]. The metadata on the operation is of type [ExecuteOperationMetadata][build.bazel.remote.execution.v2.ExecuteOperationMetadata].

If the client remains connected after the first response is returned after the server, then updates are streamed as if the client had called [WaitExecution][build.bazel.remote.execution.v2.Execution.WaitExecution] until the execution completes or the request reaches an error. The operation can also be queried using [Operations API][google.longrunning.Operations.GetOperation].

The server NEED NOT implement other methods or functionality of the Operations API.

Errors discovered during creation of the Operation will be reported as gRPC Status errors, while errors that occurred while running the action will be reported in the status field of the ExecuteResponse. The server MUST NOT set the error field of the Operation proto. The possible errors include:

  • INVALID_ARGUMENT: One or more arguments are invalid.
  • FAILED_PRECONDITION: One or more errors occurred in setting up the action requested, such as a missing input or command or no worker being available. The client may be able to fix the errors and retry.
  • RESOURCE_EXHAUSTED: There is insufficient quota of some resource to run the action.
  • UNAVAILABLE: Due to a transient condition, such as all workers being occupied (and the server does not support a queue), the action could not be started. The client should retry.
  • INTERNAL: An internal error occurred in the execution engine or the worker.
  • DEADLINE_EXCEEDED: The execution timed out.
  • CANCELLED: The operation was cancelled by the client. This status is only possible if the server implements the Operations API CancelOperation method, and it was called for the current execution.

In the case of a missing input or command, the server SHOULD additionally send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail where, for each requested blob not present in the CAS, there is a Violation with a type of MISSING and a subject of "blobs/{digest_function/}{hash}/{size}" indicating the digest of the missing blob. The subject is formatted the same way as the resource_name provided to [ByteStream.Read][google.bytestream.ByteStream.Read], with the leading instance name omitted. digest_function MUST thus be omitted if its value is one of MD5, MURMUR3, SHA1, SHA256, SHA384, SHA512, or VSO.

The server does not need to guarantee that a call to this method leads to at most one execution of the action. The server MAY execute the action multiple times, potentially in parallel. These redundant executions MAY continue to run, even if the operation is completed.

Source

pub async fn wait_execution( &mut self, request: impl IntoRequest<WaitExecutionRequest>, ) -> Result<Response<Streaming<Operation>>, Status>

Wait for an execution operation to complete. When the client initially makes the request, the server immediately responds with the current status of the execution. The server will leave the request stream open until the operation completes, and then respond with the completed operation. The server MAY choose to stream additional updates as execution progresses, such as to provide an update as to the state of the execution.

In addition to the cases describe for Execute, the WaitExecution method may fail as follows:

  • NOT_FOUND: The operation no longer exists due to any of a transient condition, an unknown operation name, or if the server implements the Operations API DeleteOperation method and it was called for the current execution. The client should call Execute to retry.

Trait Implementations§

Source§

impl<T: Clone> Clone for ExecutionClient<T>

Source§

fn clone(&self) -> ExecutionClient<T>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for ExecutionClient<T>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for ExecutionClient<T>

§

impl<T> RefUnwindSafe for ExecutionClient<T>
where T: RefUnwindSafe,

§

impl<T> Send for ExecutionClient<T>
where T: Send,

§

impl<T> Sync for ExecutionClient<T>
where T: Sync,

§

impl<T> Unpin for ExecutionClient<T>
where T: Unpin,

§

impl<T> UnwindSafe for ExecutionClient<T>
where T: UnwindSafe,

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
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.
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