Skip to main content

RoutingHint

Struct RoutingHint 

Source
#[non_exhaustive]
pub struct RoutingHint { pub operation_uid: u64, pub database_id: u64, pub schema_generation: Bytes, pub key: Bytes, pub limit_key: Bytes, pub group_uid: u64, pub split_id: u64, pub tablet_uid: u64, pub skipped_tablet_uid: Vec<SkippedTablet>, pub client_location: String, /* private fields */ }
Expand description

RoutingHint can be optionally added to location-aware Spanner requests. It gives the server hints that can be used to route the request to an appropriate server, potentially significantly decreasing latency and improving throughput. To achieve improved performance, most fields must be filled in with accurate values.

The presence of a valid RoutingHint tells the server that the client is location-aware.

RoutingHint does not change the semantics of the request; it is purely a performance hint; the request will perform the same actions on the database’s data as if RoutingHint were not present. However, if the RoutingHint is incomplete or incorrect, the response may include a CacheUpdate the client can use to correct its location cache.

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.
§operation_uid: u64

A session-scoped unique ID for the operation, computed client-side. Requests with the same operation_uid should have a shared ‘shape’, meaning that some fields are expected to be the same, such as the SQL query, the target table/columns (for reads) etc. Requests with the same operation_uid are meant to differ only in fields like keys/key ranges/query parameters, transaction IDs, etc.

operation_uid must be non-zero for RoutingHint to be valid.

§database_id: u64

The database ID of the database being accessed, see CacheUpdate.database_id. Should match the cache entries that were used to generate the rest of the fields in this RoutingHint.

§schema_generation: Bytes

The schema generation of the recipe that was used to generate key and limit_key. See also RecipeList.schema_generation.

§key: Bytes

The key / key range that this request accesses. For operations that access a single key, key should be set and limit_key should be empty. For operations that access a key range, key and limit_key should both be set, to the inclusive start and exclusive end of the range respectively.

The keys are encoded in “sortable string format” (ssformat), using a KeyRecipe that is appropriate for the request. See KeyRecipe for more details.

§limit_key: Bytes

If this request targets a key range, this is the exclusive end of the range. See key for more details.

§group_uid: u64

The group UID of the group that the client believes serves the range defined by key and limit_key. See Range.group_uid for more details.

§split_id: u64

The split ID of the split that the client believes contains the range defined by key and limit_key. See Range.split_id for more details.

§tablet_uid: u64

The tablet UID of the tablet from group group_uid that the client believes is best to serve this request. See Group.local_tablet_uids and Group.leader_tablet_uid.

§skipped_tablet_uid: Vec<SkippedTablet>

If the client had multiple options for tablet selection, and some of its first choices were unhealthy (e.g., the server is unreachable, or Tablet.skip is true), this field will contain the tablet UIDs of those tablets, with their incarnations. The server may include a CacheUpdate with new locations for those tablets.

§client_location: String

If present, the client’s current location. This should be the name of a Google Cloud zone or region, such as “us-central1”.

If absent, the client’s location will be assumed to be the same as the location of the server the client ends up connected to.

Locations are primarily valuable for clients that connect from regions other than the ones that contain the Spanner database.

Implementations§

Source§

impl RoutingHint

Source

pub fn new() -> Self

Creates a new default instance.

Source

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

Sets the value of operation_uid.

Source

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

Sets the value of database_id.

Source

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

Sets the value of schema_generation.

Source

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

Sets the value of key.

Source

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

Sets the value of limit_key.

Source

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

Sets the value of group_uid.

Source

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

Sets the value of split_id.

Source

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

Sets the value of tablet_uid.

Source

pub fn set_skipped_tablet_uid<T, V>(self, v: T) -> Self
where T: IntoIterator<Item = V>, V: Into<SkippedTablet>,

Sets the value of skipped_tablet_uid.

Source

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

Sets the value of client_location.

Trait Implementations§

Source§

impl Clone for RoutingHint

Source§

fn clone(&self) -> RoutingHint

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 RoutingHint

Source§

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

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

impl Default for RoutingHint

Source§

fn default() -> RoutingHint

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

impl Message for RoutingHint

Source§

fn typename() -> &'static str

The typename of this message.
Source§

impl PartialEq for RoutingHint

Source§

fn eq(&self, other: &RoutingHint) -> 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 RoutingHint

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