Ensure --dynamic-port-range is wide enough

This commit is contained in:
Michael Vines 2020-04-14 12:00:36 -07:00
parent 892e425d87
commit 83a96c557d
2 changed files with 13 additions and 4 deletions

View File

@ -65,6 +65,7 @@ use std::{
}; };
pub const VALIDATOR_PORT_RANGE: PortRange = (8000, 10_000); pub const VALIDATOR_PORT_RANGE: PortRange = (8000, 10_000);
pub const MINIMUM_VALIDATOR_PORT_RANGE_WIDTH: u16 = 10; // VALIDATOR_PORT_RANGE must be at least this wide
/// The Data plane fanout size, also used as the neighborhood size /// The Data plane fanout size, also used as the neighborhood size
pub const DATA_PLANE_FANOUT: usize = 200; pub const DATA_PLANE_FANOUT: usize = 200;

View File

@ -14,7 +14,7 @@ use solana_core::ledger_cleanup_service::{
DEFAULT_MAX_LEDGER_SHREDS, DEFAULT_MIN_MAX_LEDGER_SHREDS, DEFAULT_MAX_LEDGER_SHREDS, DEFAULT_MIN_MAX_LEDGER_SHREDS,
}; };
use solana_core::{ use solana_core::{
cluster_info::{ClusterInfo, Node, VALIDATOR_PORT_RANGE}, cluster_info::{ClusterInfo, Node, MINIMUM_VALIDATOR_PORT_RANGE_WIDTH, VALIDATOR_PORT_RANGE},
contact_info::ContactInfo, contact_info::ContactInfo,
gossip_service::GossipService, gossip_service::GossipService,
rpc::JsonRpcConfig, rpc::JsonRpcConfig,
@ -55,8 +55,16 @@ fn port_validator(port: String) -> Result<(), String> {
} }
fn port_range_validator(port_range: String) -> Result<(), String> { fn port_range_validator(port_range: String) -> Result<(), String> {
if solana_net_utils::parse_port_range(&port_range).is_some() { if let Some((start, end)) = solana_net_utils::parse_port_range(&port_range) {
Ok(()) if end - start < MINIMUM_VALIDATOR_PORT_RANGE_WIDTH {
Err(format!(
"Port range is too small. Try --dynamic-port-range {}-{}",
start,
start + MINIMUM_VALIDATOR_PORT_RANGE_WIDTH
))
} else {
Ok(())
}
} else { } else {
Err("Invalid port range".to_string()) Err("Invalid port range".to_string())
} }
@ -517,7 +525,7 @@ pub fn main() {
.value_name("PORT") .value_name("PORT")
.takes_value(true) .takes_value(true)
.validator(port_validator) .validator(port_validator)
.help("RPC port to use for this node"), .help("Use this port for JSON RPC, and the next port for the RPC websocket"),
) )
.arg( .arg(
Arg::with_name("private_rpc") Arg::with_name("private_rpc")