pub struct Synchronizer { /* private fields */ }
Expand description

Provide a map that is synchronized across different processes.

The goal is to have a map that can be updated by using Insert or Remove. Each process can do updates to its in memory map by supplying a function to create Insert/Remove objects. Updates from other processes can be obtained by calling fetchUpdates().

The name of the Synchronizer is also the stream name of the table segment. Different instances of Synchronizer with same name will point to the same table segment.

§Exmaples

// two synchronizer instances with the same name can communicate with each other.
let mut synchronizer1 = client_factory
    .create_synchronizer(scope.clone(), "synchronizer".to_owned())
    .await;

let mut synchronizer2 = client_factory
    .create_synchronizer(scope.clone(), "synchronizer".to_owned())
    .await;

let result = synchronizer1
    .insert(|table| {
        table.insert(
            "outer_key_foo".to_owned(),
            "inner_key_bar".to_owned(),
            "i32".to_owned(),
            Box::new(1),
        );
        Ok(None)
    })
    .await;
assert!(result.is_ok());

let entries_num = synchronizer2.fetch_updates().await.expect("fetch updates");
assert_eq!(entries_num, 1);
let value_option = synchronizer2.get("outer_key_foo", "inner_key_bar");
assert!(value_option.is_some());

Implementations§

source§

impl Synchronizer

source

pub fn get_outer_map(&self) -> HashMap<String, HashMap<String, Value>>

Get the outer map currently held in memory. The return type does not contain the version information.

source

pub fn get_inner_map(&self, outer_key: &str) -> HashMap<String, Value>

Get the inner map currently held in memory. The return type does not contain the version information.

source

pub fn get_name(&self) -> String

Get the name of the Synchronizer.

source

pub fn get(&self, outer_key: &str, inner_key: &str) -> Option<&Value>

Get the Value associated with the map. The data in Value is not deserialized and the caller should call deserialize_from to deserialize.

source

pub fn get_key_version( &self, outer_key: &str, inner_key: &Option<String> ) -> Version

Get the Key version of the given key,

source

pub async fn fetch_updates(&mut self) -> Result<i32, TableError>

Fetch the latest map from remote server and apply it to the local map.

source

pub async fn insert<R>( &mut self, updates_generator: impl FnMut(&mut Update) -> Result<R, SynchronizerError> ) -> Result<R, SynchronizerError>

Insert/Update a list of keys and applies it atomically to the local map. This will update the local map to the latest version.

source

pub async fn remove<R>( &mut self, deletes_generator: impl FnMut(&mut Update) -> Result<R, SynchronizerError> ) -> Result<R, SynchronizerError>

Remove a list of keys and apply it atomically to local map. This will update the local map to latest version.

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

source§

fn from(t: T) -> T

Returns the argument unchanged.

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

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

impl<T> Same for T

§

type Output = T

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

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