Skip to main content

Entry

Struct Entry 

Source
pub struct Entry {
    pub did: Did,
    pub data: Vec<Encoded>,
    pub kind: EntryKind,
    pub crdt: EntryCrdt,
}
Expand description

A DHT storage entry with an EntryKind and a ring key represented as Did.

An Entry is data stored by ChordStorage. It is not a Chord node and does not participate in successor, predecessor, or finger-table membership.

The Did of an Entry is in the following format:

  • If kind value is EntryKind::Data, it’s sha1 of data topic.
  • If kind value is EntryKind::RelayMessage, it’s the destination Did of message plus 1 (to ensure that the message is sent to the successor of destination), thus while destination node going online, it will sync message from its successor.

Fields§

§did: Did

The ring key of this entry. It has the same representation as a node DID, but a different domain meaning.

§data: Vec<Encoded>

The data entity of Entry, encoded by Encoder.

§kind: EntryKind

The type indicates how the data is encoded and how the Did is generated.

§crdt: EntryCrdt

CRDT metadata that makes replicated merge a join-semilattice operation.

Implementations§

Source§

impl Entry

Source

pub fn new(did: Did, data: Vec<Encoded>, kind: EntryKind) -> Entry

Construct an entry with empty CRDT metadata.

Source

pub fn gen_did(topic: &str) -> Result<Did, Error>

Generate did from topic.

Source§

impl Entry

Source

pub fn join(&self, other: Entry) -> Result<Entry, Error>

Merge two entries from the same replicated carrier.

Law: for a fixed (did, kind) carrier, this is the state-based CRDT join. Data entries are bounded LWW element sets with an LWW overwrite register; relay entries are two-phase sets whose remove side is carried by tombstones.

Source

pub fn affine(&self, scalar: u16) -> Result<Vec<Entry>, Error>

Affine Transport entry to a list of affined did

Source

pub fn clone_with_did(&self, did: Did) -> Entry

Clone and setup with new DID

Source

pub fn try_into_storage_entry(self) -> Result<Entry, Error>

Normalize an entry immediately before it is persisted.

Post: normalization uses the same carrier materialization as Self::join; there is no second cap strategy outside the CRDT. Post: result.data.len() <= ENTRY_DATA_MAX_LEN. Post: result.data.len() == result.crdt.dots.len() for Data and RelayMessage entries.

Source

pub fn operate(&self, op: EntryOperation, actor: Did) -> Result<Entry, Error>

The entry point of EntryOperation. Will dispatch to different operation handlers according to the variant.

Source

pub fn overwrite(&self, other: Entry, actor: Did) -> Result<Entry, Error>

Overwrite current data with new data.

Preservation: the replacement is represented as a CRDT join. A newly stamped overwrite carries a reset floor, and materialization keeps only dots at or after that floor, so older payload dots are removed without a non-monotone assignment.

The handler of EntryOperation::Overwrite.

Source

pub fn extend(&self, other: Entry, actor: Did) -> Result<Entry, Error>

This method is used to extend data to a Data kind Entry. The handler of EntryOperation::Extend.

Source

pub fn touch(&self, other: Entry, actor: Did) -> Result<Entry, Error>

This method is used to extend data to a Data kind Entry uniquely. If any element is already existed, move it to the end of the data vector. The handler of EntryOperation::Touch.

Source

pub fn tombstone(&self, other: Entry) -> Result<Entry, Error>

Tombstone observed data or relay-message payloads.

Pre: self and other are the same data or relay-message carrier. Post: every removed payload is represented by an add-dot tombstone, so future joins with stale add replicas cannot resurrect it.

Source

pub fn compact_data(&self, removals: Entry, actor: Did) -> Result<Entry, Error>

Compact a Data kind entry using the receiver’s current visible payloads.

Pre: removals names the same Data carrier as self. Post: every current visible payload not listed in removals is preserved under the greatest observed register floor, and older tombstone metadata is pruned by that floor.

Trait Implementations§

Source§

impl Clone for Entry

Source§

fn clone(&self) -> Entry

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 Entry

Source§

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

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

impl<'de> Deserialize<'de> for Entry

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<Entry, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for Entry

Source§

impl PartialEq for Entry

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl Serialize for Entry

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Entry

Source§

impl TryFrom<(String, Encoded)> for Entry

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(_: (String, Encoded)) -> Result<Entry, Error>

Performs the conversion.
Source§

impl TryFrom<(String, String)> for Entry

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(_: (String, String)) -> Result<Entry, Error>

Performs the conversion.
Source§

impl TryFrom<MessagePayload> for Entry

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(msg: MessagePayload) -> Result<Entry, Error>

Performs the conversion.
Source§

impl TryFrom<String> for Entry

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(topic: String) -> Result<Entry, Error>

Performs the conversion.

Auto Trait Implementations§

§

impl Freeze for Entry

§

impl RefUnwindSafe for Entry

§

impl Send for Entry

§

impl Sync for Entry

§

impl Unpin for Entry

§

impl UnsafeUnpin for Entry

§

impl UnwindSafe for Entry

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

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

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<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T> MaybeSend for T
where T: Send + Sync,

Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
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> 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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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