Skip to content

Commit

Permalink
fix(node): wider range to replicate out
Browse files Browse the repository at this point in the history
  • Loading branch information
maqi committed Jan 22, 2025
1 parent f2bb64a commit ce7dd29
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
2 changes: 1 addition & 1 deletion ant-networking/src/cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1149,7 +1149,7 @@ impl SwarmDriver {
) -> Result<Vec<PeerId>> {
let is_periodic_replicate = target.as_peer_id().is_some();
let expected_candidates = if is_periodic_replicate {
CLOSE_GROUP_SIZE + 4
K_VALUE.into()
} else {
CLOSE_GROUP_SIZE
};
Expand Down
19 changes: 12 additions & 7 deletions ant-networking/src/replication_fetcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -466,16 +466,19 @@ impl ReplicationFetcher {
"Distance to target {addr:?} is {distance:?}, against range {distance_range:?}"
);
let mut is_in_range = distance <= *distance_range;
if !is_in_range {
// For middle-range records, they could be farther than distance_range,
// but still supposed to be held by the closest group to us.
if !is_in_range && distance - *distance_range < *distance_range {
closest_k_peers.sort_by_key(|key| key.distance(addr));
let closest_group: HashSet<_> = closest_k_peers.iter().take(CLOSE_GROUP_SIZE).collect();
if closest_group.contains(&self_address) {
debug!("Record {addr:?} has a far distance but still among {CLOSE_GROUP_SIZE} closest within {} neighbourd.", closest_k_peers.len());
is_in_range = true;
} else {
out_of_range_keys.push(addr.clone());
}
}
if !is_in_range {
out_of_range_keys.push(addr.clone());
}
is_in_range
});
}
Expand Down Expand Up @@ -687,8 +690,8 @@ mod tests {
// Set distance range
let distance_target = NetworkAddress::from_peer(PeerId::random());
let distance_range = self_address.distance(&distance_target);
let distance_256 = convert_distance_to_u256(&distance_range);
replication_fetcher.set_replication_distance_range(distance_256);
let distance_range_256 = convert_distance_to_u256(&distance_range);
replication_fetcher.set_replication_distance_range(distance_range_256);

let mut closest_k_peers = vec![];
(0..19).for_each(|_| {
Expand All @@ -703,9 +706,11 @@ mod tests {
let random_data: Vec<u8> = (0..50).map(|_| rand::random::<u8>()).collect();
let key = NetworkAddress::from_record_key(&RecordKey::from(random_data));

if key.distance(&self_address) <= distance_range {
let distance = key.distance(&self_address);
let distance_256 = convert_distance_to_u256(&distance);
if distance <= distance_range {
in_range_keys += 1;
} else {
} else if distance_256 - distance_range_256 < distance_range_256 {
closest_k_peers_include_self.sort_by_key(|addr| key.distance(addr));
let closest_group: HashSet<_> = closest_k_peers_include_self
.iter()
Expand Down

0 comments on commit ce7dd29

Please sign in to comment.