Skip to content

Commit 2dabefc

Browse files
peer pings: pass the hashmap in args instead of the function
1 parent 1002963 commit 2dabefc

File tree

3 files changed

+9
-22
lines changed

3 files changed

+9
-22
lines changed

packages/core/src/lib/base_protocol.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,10 @@ export class BaseProtocol implements IBaseProtocol {
5555
}
5656

5757
protected async getPeer(peerId?: PeerId): Promise<Peer> {
58+
const { peerPings } = KeepAliveManager.getInstance();
5859
const { peer } = await selectPeerForProtocol(
5960
this.peerStore,
60-
KeepAliveManager.getInstance().getPing.bind(
61-
KeepAliveManager.getInstance()
62-
),
61+
peerPings,
6362
[this.multicodec],
6463
peerId
6564
);

packages/core/src/lib/keep_alive_manager.ts

+1-9
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export class KeepAliveManager {
1717
private options: KeepAliveOptions;
1818
private relay?: IRelay;
1919
private libp2pPing: PingService;
20-
private peerPings: Map<string, number>;
20+
public peerPings: Map<string, number>;
2121

2222
private constructor(
2323
libp2pPing: PingService,
@@ -56,14 +56,6 @@ export class KeepAliveManager {
5656
return KeepAliveManager.instance;
5757
}
5858

59-
public async getPing(peerId: PeerId): Promise<number> {
60-
const ping = this.peerPings.get(peerId.toString());
61-
if (!ping) {
62-
return await this.libp2pPing.ping(peerId);
63-
}
64-
return ping;
65-
}
66-
6759
public start(peerId: PeerId): void {
6860
// Just in case a timer already exist for this peer
6961
this.stop(peerId);

packages/utils/src/libp2p/index.ts

+6-10
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,15 @@ export function selectRandomPeer(peers: Peer[]): Peer | undefined {
2323
* @returns The peer with the lowest latency, or undefined if no peer could be reached
2424
*/
2525
export async function selectLowestLatencyPeer(
26-
getPing: (peerId: PeerId) => Promise<number>,
26+
peerPings: Map<string, number>,
2727
peers: Peer[]
2828
): Promise<Peer | undefined> {
2929
if (peers.length === 0) return;
3030

3131
const results = await Promise.all(
32-
peers.map(async (peer) => {
33-
try {
34-
const ping = await getPing(peer.id);
35-
return { peer, ping };
36-
} catch (error) {
37-
return { peer, ping: Infinity };
38-
}
32+
peers.map((peer) => {
33+
const ping = peerPings.get(peer.id.toString()) ?? Infinity;
34+
return { peer, ping };
3935
})
4036
);
4137

@@ -73,7 +69,7 @@ export async function getPeersForProtocol(
7369
*/
7470
export async function selectPeerForProtocol(
7571
peerStore: PeerStore,
76-
getPing: (peerId: PeerId) => Promise<number>,
72+
peerPings: Map<string, number>,
7773
protocols: string[],
7874
peerId?: PeerId
7975
): Promise<{ peer: Peer; protocol: string }> {
@@ -87,7 +83,7 @@ export async function selectPeerForProtocol(
8783
}
8884
} else {
8985
const peers = await getPeersForProtocol(peerStore, protocols);
90-
peer = await selectLowestLatencyPeer(getPing, peers);
86+
peer = await selectLowestLatencyPeer(peerPings, peers);
9187
if (!peer) {
9288
peer = selectRandomPeer(peers);
9389
if (!peer)

0 commit comments

Comments
 (0)