mirror of
https://github.com/loro-dev/loro.git
synced 2025-01-23 05:24:51 +00:00
chore: visibility & named
This commit is contained in:
parent
caaaa666ae
commit
524ab9dabd
1 changed files with 16 additions and 16 deletions
|
@ -55,13 +55,13 @@ impl OpLog {
|
||||||
let local_change = to_local_op(change, converter);
|
let local_change = to_local_op(change, converter);
|
||||||
let local_change = PendingChange::Known(local_change);
|
let local_change = PendingChange::Known(local_change);
|
||||||
match remote_change_apply_state(&latest_vv, &local_change) {
|
match remote_change_apply_state(&latest_vv, &local_change) {
|
||||||
ChangeApplyState::Directly => {
|
ChangeApplyState::CanApplyDirectly => {
|
||||||
latest_vv.set_end(local_change.id_end());
|
latest_vv.set_end(local_change.id_end());
|
||||||
ans.push(local_change.id_last());
|
ans.push(local_change.id_last());
|
||||||
self.apply_local_change_from_remote(local_change);
|
self.apply_local_change_from_remote(local_change);
|
||||||
}
|
}
|
||||||
ChangeApplyState::Existing => {}
|
ChangeApplyState::Applied => {}
|
||||||
ChangeApplyState::Future(miss_dep) => self
|
ChangeApplyState::AwaitingDependency(miss_dep) => self
|
||||||
.pending_changes
|
.pending_changes
|
||||||
.changes
|
.changes
|
||||||
.entry(miss_dep)
|
.entry(miss_dep)
|
||||||
|
@ -82,7 +82,7 @@ impl OpLog {
|
||||||
let local_change = to_local_op(change, converter);
|
let local_change = to_local_op(change, converter);
|
||||||
let local_change = PendingChange::Unknown(local_change);
|
let local_change = PendingChange::Unknown(local_change);
|
||||||
match remote_change_apply_state(latest_vv, &local_change) {
|
match remote_change_apply_state(latest_vv, &local_change) {
|
||||||
ChangeApplyState::Future(miss_dep) => self
|
ChangeApplyState::AwaitingDependency(miss_dep) => self
|
||||||
.pending_changes
|
.pending_changes
|
||||||
.changes
|
.changes
|
||||||
.entry(miss_dep)
|
.entry(miss_dep)
|
||||||
|
@ -133,13 +133,13 @@ impl OpLog {
|
||||||
let Some(pending_changes) = self.pending_changes.changes.remove(&id) else{continue;};
|
let Some(pending_changes) = self.pending_changes.changes.remove(&id) else{continue;};
|
||||||
for pending_change in pending_changes {
|
for pending_change in pending_changes {
|
||||||
match remote_change_apply_state(latest_vv, &pending_change) {
|
match remote_change_apply_state(latest_vv, &pending_change) {
|
||||||
ChangeApplyState::Directly => {
|
ChangeApplyState::CanApplyDirectly => {
|
||||||
id_stack.push(pending_change.id_last());
|
id_stack.push(pending_change.id_last());
|
||||||
latest_vv.set_end(pending_change.id_end());
|
latest_vv.set_end(pending_change.id_end());
|
||||||
self.apply_local_change_from_remote(pending_change);
|
self.apply_local_change_from_remote(pending_change);
|
||||||
}
|
}
|
||||||
ChangeApplyState::Existing => {}
|
ChangeApplyState::Applied => {}
|
||||||
ChangeApplyState::Future(miss_dep) => self
|
ChangeApplyState::AwaitingDependency(miss_dep) => self
|
||||||
.pending_changes
|
.pending_changes
|
||||||
.changes
|
.changes
|
||||||
.entry(miss_dep)
|
.entry(miss_dep)
|
||||||
|
@ -217,30 +217,30 @@ pub(super) fn to_local_op(change: Change<RemoteOp>, converter: &mut OpConverter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum ChangeApplyState {
|
enum ChangeApplyState {
|
||||||
Existing,
|
Applied,
|
||||||
Directly,
|
CanApplyDirectly,
|
||||||
// The id of first missing dep
|
// The id of first missing dep
|
||||||
Future(ID),
|
AwaitingDependency(ID),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn remote_change_apply_state(vv: &VersionVector, change: &Change) -> ChangeApplyState {
|
fn remote_change_apply_state(vv: &VersionVector, change: &Change) -> ChangeApplyState {
|
||||||
let peer = change.id.peer;
|
let peer = change.id.peer;
|
||||||
let CounterSpan { start, end } = change.ctr_span();
|
let CounterSpan { start, end } = change.ctr_span();
|
||||||
let vv_latest_ctr = vv.get(&peer).copied().unwrap_or(0);
|
let vv_latest_ctr = vv.get(&peer).copied().unwrap_or(0);
|
||||||
if vv_latest_ctr < start {
|
if vv_latest_ctr < start {
|
||||||
return ChangeApplyState::Future(change.id.inc(-1));
|
return ChangeApplyState::AwaitingDependency(change.id.inc(-1));
|
||||||
}
|
}
|
||||||
if vv_latest_ctr >= end {
|
if vv_latest_ctr >= end {
|
||||||
return ChangeApplyState::Existing;
|
return ChangeApplyState::Applied;
|
||||||
}
|
}
|
||||||
for dep in change.deps.as_ref().iter() {
|
for dep in change.deps.as_ref().iter() {
|
||||||
let dep_vv_latest_ctr = vv.get(&dep.peer).copied().unwrap_or(0);
|
let dep_vv_latest_ctr = vv.get(&dep.peer).copied().unwrap_or(0);
|
||||||
if dep_vv_latest_ctr - 1 < dep.counter {
|
if dep_vv_latest_ctr - 1 < dep.counter {
|
||||||
return ChangeApplyState::Future(*dep);
|
return ChangeApplyState::AwaitingDependency(*dep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ChangeApplyState::Directly
|
ChangeApplyState::CanApplyDirectly
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
Loading…
Reference in a new issue