bug fixes

This commit is contained in:
viraladmin 2026-06-11 15:43:48 -06:00
parent 0845fd3ba6
commit 38dabfa27f
1 changed files with 21 additions and 15 deletions

View File

@ -167,6 +167,12 @@ impl NodeInfo {
match streams {
streams if !streams.is_empty() => {
for (peer_key, unlocked_stream) in streams {
let Some((peer_ip, _)) = peer_key.rsplit_once(':') else {
continue;
};
if !remote_ip.is_empty() && peer_ip == remote_ip {
continue;
}
let hashmap_key = reserve_transient_entry_with_context(
map.clone(),
Some(message_type),
@ -185,12 +191,6 @@ impl NodeInfo {
for monitor in monitor_bytes.iter().take(monitor_count as usize) {
message.extend_from_slice(monitor);
}
let Some((peer_ip, _)) = peer_key.rsplit_once(':') else {
continue;
};
if !remote_ip.is_empty() && peer_ip == remote_ip {
continue;
}
RpcResponse::send_raw(&unlocked_stream, Some(&peer_key), &message).await;
}
}
@ -255,7 +255,7 @@ impl NodeInfo {
}
let mut penalize_duplicate_ip = false;
let mut accepted_existing_node = false;
let mut state_changed = false;
{
let mut address_map = ADDRESS_MAP.lock().await;
@ -309,16 +309,18 @@ impl NodeInfo {
existing_node.monitoring = monitors.clone();
if existing_node.deleted_timestamp > 0 {
if existing_node.ip == edit.ip {
existing_node.added_by = edit.modified_by.clone();
existing_node.added_timestamp = edit.modified_timestamp;
existing_node.added_signature = edit.modified_signature.clone();
existing_node.blocks_mined = blocks_mined;
existing_node.deleted_timestamp = 0_u64;
existing_node.deleted_block = 0_u32;
drop(address_map);
Self::persist_recovery_snapshot("node revive").await;
return RpcResponse::Binary(b"Success".to_vec());
state_changed = true;
} else {
address_map.remove(&edit.address);
}
} else {
if edit.modified_timestamp < existing_node.added_timestamp {
if edit.modified_timestamp > existing_node.added_timestamp {
*existing_node = NodeInfo::new(
edit.ip.clone(),
blocks_mined,
@ -326,12 +328,13 @@ impl NodeInfo {
edit.modified_timestamp,
edit.modified_signature.clone(),
);
existing_node.monitoring = monitors.clone();
state_changed = true;
}
accepted_existing_node = true;
}
}
if !accepted_existing_node {
if !address_map.contains_key(&edit.address) {
if let Some(existing_node) = address_map.values_mut().find(|node| node.ip == edit.ip) {
if existing_node.deleted_timestamp == 0 && edit.ip != GENESIS_IP {
penalize_duplicate_ip = true;
@ -355,6 +358,7 @@ impl NodeInfo {
node
},
);
state_changed = true;
}
}
}
@ -373,9 +377,11 @@ impl NodeInfo {
return RpcResponse::Binary(b"Error: Ip Already exists.".to_vec());
}
if state_changed {
Self::persist_recovery_snapshot("node add").await;
}
if !remote_ip.is_empty() {
if state_changed && !remote_ip.is_empty() {
let broadcast_map = map.clone();
let broadcast_edit = edit.clone();
let broadcast_remote_ip = remote_ip.clone();