Create network-specific nodes files (#1970)

This commit is contained in:
Tomasz Drwięga 2016-08-21 11:23:47 +02:00 committed by Gav Wood
parent fcfacc76d5
commit f69b3f8522
4 changed files with 23 additions and 5 deletions

View File

@ -32,7 +32,7 @@ use ethcore_rpc::NetworkSettings;
use cache::CacheConfig; use cache::CacheConfig;
use helpers::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_price, replace_home, use helpers::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_price, replace_home,
geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address}; geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address};
use params::{ResealPolicy, AccountsConfig, GasPricerConfig, MinerExtras}; use params::{ResealPolicy, AccountsConfig, GasPricerConfig, MinerExtras, SpecType};
use ethcore_logger::Config as LogConfig; use ethcore_logger::Config as LogConfig;
use dir::Directories; use dir::Directories;
use dapps::Configuration as DappsConfiguration; use dapps::Configuration as DappsConfiguration;
@ -440,13 +440,23 @@ impl Configuration {
ret.min_peers = self.min_peers(); ret.min_peers = self.min_peers();
let mut net_path = PathBuf::from(self.directories().db); let mut net_path = PathBuf::from(self.directories().db);
net_path.push("network"); net_path.push("network");
let net_specific_path = net_path.join(&try!(self.network_specific_path()));
ret.config_path = Some(net_path.to_str().unwrap().to_owned()); ret.config_path = Some(net_path.to_str().unwrap().to_owned());
ret.net_config_path = Some(net_specific_path.to_str().unwrap().to_owned());
ret.reserved_nodes = try!(self.init_reserved_nodes()); ret.reserved_nodes = try!(self.init_reserved_nodes());
ret.allow_non_reserved = !self.args.flag_reserved_only; ret.allow_non_reserved = !self.args.flag_reserved_only;
Ok(ret) Ok(ret)
} }
fn network_specific_path(&self) -> Result<PathBuf, String> {
let spec_type : SpecType = try!(self.chain().parse());
let spec = try!(spec_type.spec());
let id = try!(self.network_id());
let mut path = PathBuf::new();
path.push(format!("{}", id.unwrap_or_else(|| spec.network_id())));
Ok(path)
}
fn network_id(&self) -> Result<Option<U256>, String> { fn network_id(&self) -> Result<Option<U256>, String> {
let net_id = self.args.flag_network_id.as_ref().or(self.args.flag_networkid.as_ref()); let net_id = self.args.flag_network_id.as_ref().or(self.args.flag_networkid.as_ref());
match net_id { match net_id {

View File

@ -172,6 +172,7 @@ pub fn default_network_config() -> ::ethsync::NetworkConfiguration {
use ethsync::NetworkConfiguration; use ethsync::NetworkConfiguration;
NetworkConfiguration { NetworkConfiguration {
config_path: Some(replace_home("$HOME/.parity/network")), config_path: Some(replace_home("$HOME/.parity/network")),
net_config_path: Some(replace_home("$HOME/.parity/network/1")),
listen_address: Some("0.0.0.0:30303".into()), listen_address: Some("0.0.0.0:30303".into()),
public_address: None, public_address: None,
udp_port: None, udp_port: None,

View File

@ -215,8 +215,10 @@ impl ManageNetwork for EthSync {
#[derive(Binary, Debug, Clone, PartialEq, Eq)] #[derive(Binary, Debug, Clone, PartialEq, Eq)]
/// Network service configuration /// Network service configuration
pub struct NetworkConfiguration { pub struct NetworkConfiguration {
/// Directory path to store network configuration. None means nothing will be saved /// Directory path to store general network configuration. None means nothing will be saved
pub config_path: Option<String>, pub config_path: Option<String>,
/// Directory path to store network-specific configuration. None means nothing will be saved
pub net_config_path: Option<String>,
/// IP address to listen for incoming connections. Listen to all connections by default /// IP address to listen for incoming connections. Listen to all connections by default
pub listen_address: Option<String>, pub listen_address: Option<String>,
/// IP address to advertise. Detected automatically if none. /// IP address to advertise. Detected automatically if none.
@ -264,6 +266,7 @@ impl NetworkConfiguration {
Ok(BasicNetworkConfiguration { Ok(BasicNetworkConfiguration {
config_path: self.config_path, config_path: self.config_path,
net_config_path: self.net_config_path,
listen_address: match self.listen_address { None => None, Some(addr) => Some(try!(SocketAddr::from_str(&addr))) }, listen_address: match self.listen_address { None => None, Some(addr) => Some(try!(SocketAddr::from_str(&addr))) },
public_address: match self.public_address { None => None, Some(addr) => Some(try!(SocketAddr::from_str(&addr))) }, public_address: match self.public_address { None => None, Some(addr) => Some(try!(SocketAddr::from_str(&addr))) },
udp_port: self.udp_port, udp_port: self.udp_port,
@ -283,6 +286,7 @@ impl From<BasicNetworkConfiguration> for NetworkConfiguration {
fn from(other: BasicNetworkConfiguration) -> Self { fn from(other: BasicNetworkConfiguration) -> Self {
NetworkConfiguration { NetworkConfiguration {
config_path: other.config_path, config_path: other.config_path,
net_config_path: other.net_config_path,
listen_address: other.listen_address.and_then(|addr| Some(format!("{}", addr))), listen_address: other.listen_address.and_then(|addr| Some(format!("{}", addr))),
public_address: other.public_address.and_then(|addr| Some(format!("{}", addr))), public_address: other.public_address.and_then(|addr| Some(format!("{}", addr))),
udp_port: other.udp_port, udp_port: other.udp_port,

View File

@ -53,8 +53,10 @@ const MAINTENANCE_TIMEOUT: u64 = 1000;
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone)]
/// Network service configuration /// Network service configuration
pub struct NetworkConfiguration { pub struct NetworkConfiguration {
/// Directory path to store network configuration. None means nothing will be saved /// Directory path to store general network configuration. None means nothing will be saved
pub config_path: Option<String>, pub config_path: Option<String>,
/// Directory path to store network-specific configuration. None means nothing will be saved
pub net_config_path: Option<String>,
/// IP address to listen for incoming connections. Listen to all connections by default /// IP address to listen for incoming connections. Listen to all connections by default
pub listen_address: Option<SocketAddr>, pub listen_address: Option<SocketAddr>,
/// IP address to advertise. Detected automatically if none. /// IP address to advertise. Detected automatically if none.
@ -90,6 +92,7 @@ impl NetworkConfiguration {
pub fn new() -> Self { pub fn new() -> Self {
NetworkConfiguration { NetworkConfiguration {
config_path: None, config_path: None,
net_config_path: None,
listen_address: None, listen_address: None,
public_address: None, public_address: None,
udp_port: None, udp_port: None,
@ -367,7 +370,7 @@ impl Host {
}, },
|s| KeyPair::from_secret(s).expect("Error creating node secret key")) |s| KeyPair::from_secret(s).expect("Error creating node secret key"))
}; };
let path = config.config_path.clone(); let path = config.net_config_path.clone();
// Setup the server socket // Setup the server socket
let tcp_listener = try!(TcpListener::bind(&listen_address)); let tcp_listener = try!(TcpListener::bind(&listen_address));
listen_address = SocketAddr::new(listen_address.ip(), try!(tcp_listener.local_addr()).port()); listen_address = SocketAddr::new(listen_address.ip(), try!(tcp_listener.local_addr()).port());