aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/tree.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/swarm/tree.rs')
-rw-r--r--src/swarm/tree.rs46
1 files changed, 2 insertions, 44 deletions
diff --git a/src/swarm/tree.rs b/src/swarm/tree.rs
index de865de..db3e920 100644
--- a/src/swarm/tree.rs
+++ b/src/swarm/tree.rs
@@ -30,8 +30,6 @@
use std::collections::{BTreeMap, BTreeSet, HashMap, VecDeque};
use std::sync::Arc;
-use tracing::trace;
-
use crate::locks::MutexExt;
use crate::state::AppState;
use crate::swarm::{reach, rtt, topology};
@@ -663,48 +661,8 @@ pub(crate) async fn forward(
from: &str,
changes: &[crate::document::ChangeHash],
) -> Option<Plan> {
- let mut plan = plan(state, writer).await?;
- if !changes.is_empty() {
- for neighbour in &plan.covered {
- if let Some(peer_state) = state.get_peer_state(neighbour).await {
- peer_state
- .lock()
- .await
- .sync
- .known_to_peer(changes, tokio::time::Instant::now());
- }
- }
- }
- plan.children.retain(|child| child != from);
- let children = &plan.children;
- let replica = if changes.is_empty() {
- None
- } else {
- Some(state.doc.read().await)
- };
- for child in children {
- if let Some(peer_state) = state.get_peer_state(child).await {
- let mut peer_state = peer_state.lock().await;
- peer_state.tree_writer = Some(writer);
- if let Some(replica) = &replica {
- peer_state.sync.with_predecessors(
- &replica.doc,
- changes,
- tokio::time::Instant::now(),
- );
- }
- }
- state.stats.tree_forward();
- state.request_sync(child);
- }
- if !children.is_empty() {
- trace!(
- writer,
- children = children.len(),
- "Passing a change on along the writer's tree"
- );
- }
- Some(plan)
+ let plan = plan(state, writer).await?;
+ Some(crate::swarm::dissemination::pass_on(state, writer, from, changes, plan).await)
}
/// Writers' trees as the way changes reach every member