Skip to content

Commit 7069caa

Browse files
committed
better load balance method
1 parent 620c9d1 commit 7069caa

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

compute/src/node/rpc.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,26 +43,18 @@ async fn get_rpc_for_network(
4343
network: &DriaNetwork,
4444
version: &SemanticVersion,
4545
) -> Result<Multiaddr> {
46-
#[derive(serde::Deserialize, Debug)]
47-
struct DriaNodesApiResponse {
48-
pub rpc: Multiaddr,
49-
}
50-
51-
// url to be used is determined by the network type
52-
let base_url = match network {
53-
DriaNetwork::Mainnet => "https://dkn.dria.co/available-nodes",
54-
DriaNetwork::Testnet => "https://dkn.dria.co/available-nodes",
55-
};
56-
let url = format!("{}/{}", base_url, version.as_major_minor());
57-
58-
// make the request
59-
let response = reqwest::get(url).await?;
60-
let response_body = response
61-
.json::<DriaNodesApiResponse>()
46+
let response = reqwest::get(network.discovery_url(version)).await?;
47+
let rpcs_and_peer_counts = response
48+
.json::<Vec<(Multiaddr, usize)>>()
6249
.await
6350
.wrap_err("could not parse API response")?;
6451

65-
Ok(response_body.rpc)
52+
// returns the RPC address with the least peer count (for load balancing)
53+
rpcs_and_peer_counts
54+
.into_iter()
55+
.min_by_key(|(_, peer_count)| *peer_count)
56+
.ok_or_eyre("no RPCs were returned by discovery API")
57+
.map(|(addr, _)| addr)
6658
}
6759

6860
#[cfg(test)]
@@ -77,4 +69,16 @@ mod tests {
7769
.await;
7870
assert!(node.is_ok());
7971
}
72+
73+
#[test]
74+
fn test_deserialize() {
75+
let input = r#"[
76+
["/ip4/12.34.56.78/tcp/4001/p2p/16Uiu2HAmG7qrpSh8kenjuYqyrwxgEVdzqRV4wM1hHAZRq4j25VBC", 1],
77+
["/ip4/78.56.34.12/tcp/4001/p2p/16Uiu2HAmG7qrpSh8kenjuYqyrwxgEVdzqRV4wM1hHAZRq4j25VBC", 4]
78+
]"#;
79+
let result: Vec<(Multiaddr, usize)> = serde_json::from_str(input).unwrap();
80+
assert_eq!(result.len(), 2);
81+
assert_eq!(result[0].1, 1);
82+
assert_eq!(result[1].1, 4);
83+
}
8084
}

0 commit comments

Comments
 (0)