Skip to content

Commit 5e2eeba

Browse files
authored
Merge pull request #846 from openmina/fix/p2p/incoming
Fix incoming peer handling
2 parents b2a2107 + a212457 commit 5e2eeba

File tree

4 files changed

+28
-56
lines changed

4 files changed

+28
-56
lines changed

node/src/rpc/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ mod rpc_actions;
2424
pub use rpc_actions::*;
2525

2626
mod rpc_reducer;
27+
pub use rpc_reducer::collect_rpc_peers_info;
2728

2829
mod rpc_impls;
2930

@@ -164,6 +165,7 @@ pub struct RpcPeerInfo {
164165
pub best_tip_timestamp: Option<u64>,
165166
pub connection_status: PeerConnectionStatus,
166167
pub address: Option<String>,
168+
pub incoming: bool,
167169
pub time: u64,
168170
}
169171

node/src/rpc/rpc_reducer.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -613,35 +613,38 @@ impl RpcState {
613613
}
614614
}
615615

616-
fn collect_rpc_peers_info(state: &crate::State) -> Vec<RpcPeerInfo> {
616+
pub fn collect_rpc_peers_info(state: &crate::State) -> Vec<RpcPeerInfo> {
617617
state.p2p.ready().map_or_else(Vec::new, |p2p| {
618618
p2p.peers
619619
.iter()
620620
.map(|(peer_id, state)| {
621621
let best_tip = state.status.as_ready().and_then(|r| r.best_tip.as_ref());
622-
let (connection_status, time) = match &state.status {
622+
let (connection_status, time, incoming) = match &state.status {
623623
p2p::P2pPeerStatus::Connecting(c) => match c {
624624
p2p::connection::P2pConnectionState::Outgoing(o) => {
625-
(PeerConnectionStatus::Connecting, o.time().into())
625+
(PeerConnectionStatus::Connecting, o.time().into(), false)
626626
}
627627
p2p::connection::P2pConnectionState::Incoming(i) => {
628-
(PeerConnectionStatus::Connecting, i.time().into())
628+
(PeerConnectionStatus::Connecting, i.time().into(), true)
629629
}
630630
},
631631
p2p::P2pPeerStatus::Disconnecting { time } => {
632-
(PeerConnectionStatus::Disconnected, (*time).into())
632+
(PeerConnectionStatus::Disconnected, (*time).into(), false)
633633
}
634634
p2p::P2pPeerStatus::Disconnected { time } => {
635-
(PeerConnectionStatus::Disconnected, (*time).into())
636-
}
637-
p2p::P2pPeerStatus::Ready(r) => {
638-
(PeerConnectionStatus::Connected, r.connected_since.into())
635+
(PeerConnectionStatus::Disconnected, (*time).into(), false)
639636
}
637+
p2p::P2pPeerStatus::Ready(r) => (
638+
PeerConnectionStatus::Connected,
639+
r.connected_since.into(),
640+
r.is_incoming,
641+
),
640642
};
641643
RpcPeerInfo {
642644
peer_id: *peer_id,
643645
connection_status,
644646
address: state.dial_opts.as_ref().map(|opts| opts.to_string()),
647+
incoming,
645648
best_tip: best_tip.map(|bt| bt.hash.clone()),
646649
best_tip_height: best_tip.map(|bt| bt.height()),
647650
best_tip_global_slot: best_tip.map(|bt| bt.global_slot_since_genesis()),

node/src/rpc_effectful/rpc_effectful_effects.rs

Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
use super::RpcEffectfulAction;
1+
use super::{super::rpc, RpcEffectfulAction};
22
use crate::{
33
block_producer::BlockProducerWonSlot,
44
external_snark_worker::available_job_to_snark_worker_spec,
55
p2p::connection::P2pConnectionResponse,
66
p2p_ready,
77
rpc::{
88
AccountQuery, AccountSlim, ActionStatsQuery, ActionStatsResponse, CurrentMessageProgress,
9-
LedgerSyncProgress, MessagesStats, PeerConnectionStatus, RpcAction, RpcBlockProducerStats,
9+
LedgerSyncProgress, MessagesStats, RpcAction, RpcBlockProducerStats,
1010
RpcMessageProgressResponse, RpcNodeStatus, RpcNodeStatusTransactionPool,
1111
RpcNodeStatusTransitionFrontier, RpcNodeStatusTransitionFrontierBlockSummary,
12-
RpcNodeStatusTransitionFrontierSync, RpcPeerInfo, RpcRequestExtraData, RpcScanStateSummary,
12+
RpcNodeStatusTransitionFrontierSync, RpcRequestExtraData, RpcScanStateSummary,
1313
RpcScanStateSummaryBlock, RpcScanStateSummaryBlockTransaction,
1414
RpcScanStateSummaryBlockTransactionKind, RpcScanStateSummaryScanStateJob,
1515
RpcSnarkPoolJobFull, RpcSnarkPoolJobSnarkWork, RpcSnarkPoolJobSummary,
@@ -72,7 +72,7 @@ pub fn rpc_effects<S: Service>(store: &mut Store<S>, action: ActionWithMeta<RpcE
7272
target: state.transition_frontier.sync.best_tip().map(block_summary),
7373
},
7474
},
75-
peers: collect_rpc_peers_info(state),
75+
peers: rpc::collect_rpc_peers_info(state),
7676
snark_pool: state.snark_pool.jobs_iter().fold(
7777
Default::default(),
7878
|mut acc, job| {
@@ -709,43 +709,3 @@ pub fn rpc_effects<S: Service>(store: &mut Store<S>, action: ActionWithMeta<RpcE
709709
}
710710
}
711711
}
712-
713-
fn collect_rpc_peers_info(state: &crate::State) -> Vec<RpcPeerInfo> {
714-
state.p2p.ready().map_or_else(Vec::new, |p2p| {
715-
p2p.peers
716-
.iter()
717-
.map(|(peer_id, state)| {
718-
let best_tip = state.status.as_ready().and_then(|r| r.best_tip.as_ref());
719-
let (connection_status, time) = match &state.status {
720-
p2p::P2pPeerStatus::Connecting(c) => match c {
721-
p2p::connection::P2pConnectionState::Outgoing(o) => {
722-
(PeerConnectionStatus::Connecting, o.time().into())
723-
}
724-
p2p::connection::P2pConnectionState::Incoming(i) => {
725-
(PeerConnectionStatus::Connecting, i.time().into())
726-
}
727-
},
728-
p2p::P2pPeerStatus::Disconnecting { time } => {
729-
(PeerConnectionStatus::Disconnected, (*time).into())
730-
}
731-
p2p::P2pPeerStatus::Disconnected { time } => {
732-
(PeerConnectionStatus::Disconnected, (*time).into())
733-
}
734-
p2p::P2pPeerStatus::Ready(r) => {
735-
(PeerConnectionStatus::Connected, r.connected_since.into())
736-
}
737-
};
738-
RpcPeerInfo {
739-
peer_id: *peer_id,
740-
connection_status,
741-
address: state.dial_opts.as_ref().map(|opts| opts.to_string()),
742-
best_tip: best_tip.map(|bt| bt.hash.clone()),
743-
best_tip_height: best_tip.map(|bt| bt.height()),
744-
best_tip_global_slot: best_tip.map(|bt| bt.global_slot_since_genesis()),
745-
best_tip_timestamp: best_tip.map(|bt| bt.timestamp().into()),
746-
time,
747-
}
748-
})
749-
.collect()
750-
})
751-
}

p2p/src/connection/incoming/p2p_connection_incoming_reducer.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ use crate::{
99
connection::{
1010
incoming::P2pConnectionIncomingError,
1111
incoming_effectful::P2pConnectionIncomingEffectfulAction,
12-
outgoing::P2pConnectionOutgoingInitOpts, P2pConnectionResponse, P2pConnectionState,
12+
outgoing::{P2pConnectionOutgoingInitLibp2pOpts, P2pConnectionOutgoingInitOpts},
13+
P2pConnectionResponse, P2pConnectionState,
1314
},
1415
disconnection::{P2pDisconnectionAction, P2pDisconnectionReason},
15-
webrtc::{HttpSignalingInfo, SignalingMethod},
16+
webrtc::{Host, HttpSignalingInfo, SignalingMethod},
1617
ConnectionAddr, P2pNetworkSchedulerAction, P2pPeerAction, P2pPeerState, P2pPeerStatus,
1718
P2pState, PeerId,
1819
};
@@ -416,7 +417,13 @@ impl P2pConnectionIncomingState {
416417
.entry(peer_id)
417418
.or_insert_with(|| P2pPeerState {
418419
is_libp2p: true,
419-
dial_opts: None,
420+
dial_opts: Some(P2pConnectionOutgoingInitOpts::LibP2P(
421+
P2pConnectionOutgoingInitLibp2pOpts {
422+
peer_id,
423+
host: Host::from(addr.ip()),
424+
port: addr.port(),
425+
},
426+
)),
420427
status: P2pPeerStatus::Disconnected { time: meta.time() },
421428
identify: None,
422429
});

0 commit comments

Comments
 (0)