pub struct Worker {
    pub devices: Vec<Device>,
    pub properties: Vec<Property>,
    pub configs: Vec<Config>,
}
Expand description

Describes a worker, which is a list of one or more devices and the connections between them. A device could be a computer, a phone, or even an accelerator like a GPU; it’s up to the farm administrator to decide how to model their farm. For example, if a farm only has one type of GPU, the GPU could be modelled as a “has_gpu” property on its host computer; if it has many subproperties itself, it might be better to model it as a separate device.

The first device in the worker is the “primary device” - that is, the device running a bot and which is responsible for actually executing commands. All other devices are considered to be attached devices, and must be controllable by the primary device.

This message (and all its submessages) can be used in two contexts:

  • Status: sent by the bot to report the current capabilities of the device to allow reservation matching.
  • Request: sent by a client to request a device with certain capabilities in a reservation.

Several of the fields in this message have different semantics depending on which of which of these contexts it is used. These semantics are described below.

Several messages in Worker and its submessages have the concept of keys and values, such as Worker.Property and Device.Property. All keys are simple strings, but certain keys are “standard” keys and should be broadly supported across farms and implementations; these are listed below each relevant message. Bot implementations or farm admins may add additional keys, but these SHOULD all begin with an underscore so they do not conflict with standard keys that may be added in the future.

Keys are not context sensitive.

See http://goo.gl/NurY8g for more information on the Worker message.

Fields§

§devices: Vec<Device>

A list of devices; the first device is the primary device. See the Device message for more information.

§properties: Vec<Property>

A worker may contain “global” properties. For example, certain machines might be reserved for certain types of jobs, like short-running compilation versus long-running integration tests. This property is known as a “pool” and is not related to any one device within the worker; rather, it applies to the worker as a whole.

The behaviour of repeated keys is identical to that of Device.Property.

§configs: Vec<Config>

Bots can be configured in certain ways when accepting leases. For example, many leases are executed inside a Docker container. To support this, the bot needs to be able to report that it has Docker installed (and knows how to execute something inside a container), and the task submitter needs to specify which image should be used to start the container. Similarly, a lease may be able to run as one of several users on the worker; in such cases, the bot needs to report what users are available, and the submitter needs to choose one.

Therefore, when this message is reported by the bot to the service, each key represents a type of configuration that the bot knows how to set, while each value represents a legal value for that configuration (the empty string is interpretted as a wildcard, such as for Docker images). When this message is sent by the server to the bot in the context of a lease, it represents a command to the bot to apply the setting. Keys may be repeated during reporting but not in a lease.

Trait Implementations§

source§

impl Clone for Worker

source§

fn clone(&self) -> Worker

Returns a copy 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 Debug for Worker

source§

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

Formats the value using the given formatter. Read more
source§

impl Default for Worker

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Message for Worker

source§

fn encoded_len(&self) -> usize

Returns the encoded length of the message without a length delimiter.
source§

fn clear(&mut self)

Clears the message, resetting all fields to their default.
source§

fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message to a buffer. Read more
source§

fn encode_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message to a newly allocated buffer.
source§

fn encode_length_delimited( &self, buf: &mut impl BufMut, ) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message with a length-delimiter to a buffer. Read more
source§

fn encode_length_delimited_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message with a length-delimiter to a newly allocated buffer.
source§

fn decode(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes an instance of the message from a buffer. Read more
source§

fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes a length-delimited instance of the message from the buffer.
source§

fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes an instance of the message from a buffer, and merges it into self. Read more
source§

fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes a length-delimited instance of the message from buffer, and merges it into self.
source§

impl PartialEq for Worker

source§

fn eq(&self, other: &Worker) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for Worker

Auto Trait Implementations§

§

impl Freeze for Worker

§

impl RefUnwindSafe for Worker

§

impl Send for Worker

§

impl Sync for Worker

§

impl Unpin for Worker

§

impl UnwindSafe for Worker

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

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.

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,

§

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>,

§

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>,

§

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<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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