Skip to main content

Client

Struct Client 

Source
pub struct Client { /* private fields */ }
Expand description

Main entry point for interacting with the d-engine cluster.

Derefs to GrpcClient, which implements ClientApi for all KV operations. Created through ClientBuilder.

Implementations§

Source§

impl Client

Source

pub fn builder(endpoints: Vec<String>) -> ClientBuilder

Create a configured client builder

Starts client construction process with specified bootstrap endpoints. Chain configuration methods before calling build().

§Arguments
  • endpoints - Initial cluster nodes for discovery
§Panics

Will panic if no valid endpoints provided

Source

pub async fn refresh( &self, new_endpoints: Option<Vec<String>>, ) -> Result<(), ClientApiError>

Rediscover the cluster and rebuild the connection pool.

Blocks until a leader whose noop entry is committed by majority is found, or ClientConfig::cluster_ready_timeout elapses.

What this does:

  • Probes all endpoints in round-robin until one reports a ready leader (current_leader_id is Some and present in the member list)
  • Atomically replaces the cached leader/follower connections
  • After Ok(()), get_leader_id() returns the new leader and all write/read operations are routed to the correct node

What this does NOT do:

  • Does not guarantee that the caller’s in-flight requests succeeded; requests sent before refresh() may have failed and need to be retried
  • Does not implement application-level retry — the caller is responsible for re-issuing any operations that failed during the failover window
  • Does not update endpoints permanently; pass new_endpoints to change the bootstrap list for this and future refreshes

Typical usage after leader failover:

client.refresh(None).await?;          // blocks until new leader ready
client.put(key, value).await?;        // now safe to retry operations

Methods from Deref<Target = GrpcClient>§

Source

pub async fn get_with_policy( &self, key: impl AsRef<[u8]>, consistency_policy: Option<ReadConsistencyPolicy>, ) -> Result<Option<KvEntry>, ClientApiError>

Retrieves a single key’s value with explicit consistency policy

Allows client to override server’s default consistency policy for this specific request. If server’s allow_client_override is false, the override will be ignored.

§Parameters
  • key - The key to retrieve, accepts any type implementing AsRef<[u8]>
  • policy - Explicit consistency policy for this request
Source

pub async fn get_multi_with_policy( &self, keys: impl IntoIterator<Item = impl AsRef<[u8]>>, consistency_policy: Option<ReadConsistencyPolicy>, ) -> Result<Vec<Option<KvEntry>>, ClientApiError>

Fetches multiple keys with explicit consistency policy override

Allows client to override server’s default consistency policy for this batch request. If server’s allow_client_override is false, the override will be ignored.

Source

pub async fn watch_membership( &self, ) -> Result<Streaming<MembershipSnapshot>, ClientApiError>

Subscribe to committed cluster membership changes.

Immediately yields the current MembershipSnapshot on connect, then one snapshot per committed ConfChange (AddNode, Promote, Remove). The stream ends with Err(UNAVAILABLE) when the server shuts down; callers should reconnect and re-subscribe.

Use committed_index as an idempotency key to deduplicate retries.

Source

pub async fn watch( &self, key: impl AsRef<[u8]>, ) -> Result<Streaming<WatchResponse>, ClientApiError>

Watch for changes to a specific key

Returns a stream of watch events when the key’s value changes. The stream will continue until explicitly closed or a connection error occurs.

§Arguments
  • key - The key to watch
§Returns

A streaming response that yields WatchResponse events

§Errors

Returns error if unable to establish watch connection

Source

pub async fn watch_prefix( &self, prefix: impl AsRef<[u8]>, ) -> Result<Streaming<WatchResponse>, ClientApiError>

Watch all keys under a path prefix.

prefix must start with ‘/’ and end with ‘/’, e.g. b"/services/". Returns a stream of events for any key whose path begins with the prefix.

Trait Implementations§

Source§

impl Clone for Client

Source§

fn clone(&self) -> Client

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 Deref for Client

Source§

type Target = GrpcClient

The resulting type after dereferencing.
Source§

fn deref(&self) -> &<Client as Deref>::Target

Dereferences the value.

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

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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