Skip to main content

PathOpLog

Struct PathOpLog 

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

The path operation log - an operation-based CRDT

This is a grow-only set of operations with causal ordering. Conflict resolution is deterministic based on:

  1. Lamport timestamp (higher wins for concurrent ops on same path)
  2. Peer ID (lexicographic tie-breaker)

Implementations§

Source§

impl PathOpLog

Source

pub fn new() -> Self

Create a new empty log

Source

pub fn from_operation(op: &PathOperation) -> Self

Create a log containing a single operation

Source

pub fn rebuild_clock(&mut self)

Rebuild local clock from operations (call after deserialization)

Source

pub fn record( &mut self, peer_id: PublicKey, op_type: OpType, path: impl Into<PathBuf>, content_link: Option<Link>, is_dir: bool, ) -> OpId

Record a new local operation

The peer_id identifies who is recording this operation. Returns the OpId of the recorded operation.

Source

pub fn merge(&mut self, other: &PathOpLog) -> usize

Merge operations from another log (CRDT merge)

Returns the number of new operations added

Source

pub fn merge_with_resolver( &mut self, other: &PathOpLog, resolver: &dyn ConflictResolver, local_peer: &PublicKey, ) -> MergeResult

Merge operations from another log with conflict resolution

Unlike the basic merge(), this method:

  1. Detects conflicts between local and incoming operations
  2. Uses the provided resolver to decide how to handle each conflict
  3. Returns detailed information about what conflicts were found and resolved
§Arguments
  • other - The incoming log to merge
  • resolver - The conflict resolution strategy to use
  • local_peer - The local peer’s identity (for tie-breaking)
§Returns

A MergeResult containing:

  • Number of operations added
  • List of resolved conflicts
  • List of unresolved conflicts (when using ForkOnConflict)
Source

pub fn operations(&self) -> &BTreeMap<OpId, PathOperation>

Get all operations

Source

pub fn resolve_path(&self, path: impl AsRef<Path>) -> Option<&PathOperation>

Resolve the current state of a path

Returns the winning operation for the path (if any). The operation with the highest OpId wins.

Source

pub fn resolve_all(&self) -> BTreeMap<PathBuf, &PathOperation>

Resolve the entire filesystem state from operations

Returns a map of path -> winning operation for all paths that currently exist (excludes paths where Remove was the winning op)

Source

pub fn len(&self) -> usize

Get the number of operations

Source

pub fn is_empty(&self) -> bool

Check if empty

Source

pub fn clear_preserving_clock(&mut self)

Clear operations but preserve the local clock value.

This is used after persisting operations to a manifest. We clear the operations (since they’re now saved) but keep the clock so future operations have unique timestamps across save cycles.

Source

pub fn ops_for_path(&self, path: impl AsRef<Path>) -> Vec<&PathOperation>

Get operations affecting a specific path, in order

Source

pub fn ops_in_order(&self) -> impl Iterator<Item = &PathOperation>

Get all operations in order (oldest to newest)

Trait Implementations§

Source§

impl BlockEncoded<DagCborCodec> for PathOpLog

Source§

fn encode(&self) -> Result<Vec<u8>, CodecError>

Source§

fn decode(data: &[u8]) -> Result<Self, CodecError>

Source§

fn codec(&self) -> u64

Source§

impl Clone for PathOpLog

Source§

fn clone(&self) -> PathOpLog

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for PathOpLog

Source§

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

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

impl Default for PathOpLog

Source§

fn default() -> PathOpLog

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

impl<'de> Deserialize<'de> for PathOpLog

Source§

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

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

impl PartialEq for PathOpLog

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · 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 Serialize for PathOpLog

Source§

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

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

impl StructuralPartialEq for PathOpLog

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

Source§

fn compat(self) -> Compat<T>

Applies the Compat adapter by value. Read more
Source§

fn compat_ref(&self) -> Compat<&T>

Applies the Compat adapter by shared reference. Read more
Source§

fn compat_mut(&mut self) -> Compat<&mut T>

Applies the Compat adapter by mutable reference. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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, 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> 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<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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: 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 = 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
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

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

Source§

impl<T> RpcMessage for T
where T: Debug + Serialize + DeserializeOwned + Send + Sync + Unpin + 'static,