Skip to main content

Tablet

Struct Tablet 

Source
#[non_exhaustive]
pub struct Tablet { pub tablet_uid: u64, pub server_address: String, pub location: String, pub role: Role, pub incarnation: Bytes, pub distance: u32, pub skip: bool, /* private fields */ }
Expand description

A Tablet represents a single replica of a Group. A tablet is served by a single server at a time, and can move between servers due to server death or simply load balancing.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§tablet_uid: u64

The UID of the tablet, unique within the database. Matches the tablet_uids and leader_tablet_uid fields in Group.

§server_address: String

The address of the server that is serving this tablet – either an IP address or DNS hostname and a port number.

§location: String

Where this tablet is located. This is the name of a Google Cloud region, such as “us-central1”.

§role: Role

The role of the tablet.

§incarnation: Bytes

incarnation indicates the freshness of the tablet information contained in this proto. Incarnations can be compared lexicographically; if incarnation A is greater than incarnation B, then the Tablet corresponding to A is newer than the Tablet corresponding to B, and should be used preferentially.

§distance: u32

Distances help the client pick the closest tablet out of the list of tablets for a given request. Tablets with lower distances should generally be preferred. Tablets with the same distance are approximately equally close; the client can choose arbitrarily.

Distances do not correspond precisely to expected latency, geographical distance, or anything else. Distances should be compared only between tablets of the same group; they are not meaningful between different groups.

A value of zero indicates that the tablet may be in the same zone as the client, and have minimum network latency. A value less than or equal to five indicates that the tablet is thought to be in the same region as the client, and may have a few milliseconds of network latency. Values greater than five are most likely in a different region, with non-trivial network latency.

Clients should use the following algorithm:

  • If the request is using a directed read, eliminate any tablets that do not match the directed read’s target zone and/or replica type.
  • (Read-write transactions only) Choose leader tablet if it has an distance <=5.
  • Group and sort tablets by distance. Choose a random tablet with the lowest distance. If the request is not a directed read, only consider replicas with distances <=5.
  • Send the request to the fallback endpoint.

The tablet picked by this algorithm may be skipped, either because it is marked as skip by the server or because the corresponding server is unreachable, flow controlled, etc. Skipped tablets should be added to the skipped_tablet_uid field in RoutingHint; the algorithm above should then be re-run without including the skipped tablet(s) to pick the next best tablet.

§skip: bool

If true, the tablet should not be chosen by the client. Typically, this signals that the tablet is unhealthy in some way. Tablets with skip set to true should be reported back to the server in RoutingHint.skipped_tablet_uid; this cues the server to send updated information for this tablet should it become usable again.

Implementations§

Source§

impl Tablet

Source

pub fn new() -> Self

Creates a new default instance.

Source

pub fn set_tablet_uid<T: Into<u64>>(self, v: T) -> Self

Sets the value of tablet_uid.

Source

pub fn set_server_address<T: Into<String>>(self, v: T) -> Self

Sets the value of server_address.

Source

pub fn set_location<T: Into<String>>(self, v: T) -> Self

Sets the value of location.

Source

pub fn set_role<T: Into<Role>>(self, v: T) -> Self

Sets the value of role.

Source

pub fn set_incarnation<T: Into<Bytes>>(self, v: T) -> Self

Sets the value of incarnation.

Source

pub fn set_distance<T: Into<u32>>(self, v: T) -> Self

Sets the value of distance.

Source

pub fn set_skip<T: Into<bool>>(self, v: T) -> Self

Sets the value of skip.

Trait Implementations§

Source§

impl Clone for Tablet

Source§

fn clone(&self) -> Tablet

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Tablet

Source§

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

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

impl Default for Tablet

Source§

fn default() -> Tablet

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

impl Message for Tablet

Source§

fn typename() -> &'static str

The typename of this message.
Source§

impl PartialEq for Tablet

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Tablet

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

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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