Reorganise command line options into more general engine.
This commit is contained in:
parent
7e8b6c3660
commit
38d470f3bc
@ -131,7 +131,8 @@ impl<V> Client<V> where V: Verifier {
|
|||||||
let mut dir = path.to_path_buf();
|
let mut dir = path.to_path_buf();
|
||||||
dir.push(H64::from(spec.genesis_header().hash()).hex());
|
dir.push(H64::from(spec.genesis_header().hash()).hex());
|
||||||
//TODO: sec/fat: pruned/full versioning
|
//TODO: sec/fat: pruned/full versioning
|
||||||
dir.push(format!("v{}-sec-{}", CLIENT_DB_VER_STR, if config.prefer_journal { "pruned" } else { "archive" }));
|
// version here is a bit useless now, since it's controlled only be the pruning algo.
|
||||||
|
dir.push(format!("v{}-sec-{}", CLIENT_DB_VER_STR, config.pruning));
|
||||||
let path = dir.as_path();
|
let path = dir.as_path();
|
||||||
let gb = spec.genesis_block();
|
let gb = spec.genesis_block();
|
||||||
let chain = Arc::new(BlockChain::new(config.blockchain, &gb, path));
|
let chain = Arc::new(BlockChain::new(config.blockchain, &gb, path));
|
||||||
@ -140,11 +141,7 @@ impl<V> Client<V> where V: Verifier {
|
|||||||
|
|
||||||
let engine = Arc::new(try!(spec.to_engine()));
|
let engine = Arc::new(try!(spec.to_engine()));
|
||||||
let state_path_str = state_path.to_str().unwrap();
|
let state_path_str = state_path.to_str().unwrap();
|
||||||
let mut state_db = if config.prefer_journal {
|
let mut state_db = journaldb::new(state_path_str, config.pruning);
|
||||||
new_optiononedb(state_path_str)
|
|
||||||
} else {
|
|
||||||
new_archivedb(state_path_str)
|
|
||||||
};
|
|
||||||
|
|
||||||
if state_db.is_empty() && engine.spec().ensure_db_good(state_db.as_hashdb_mut()) {
|
if state_db.is_empty() && engine.spec().ensure_db_good(state_db.as_hashdb_mut()) {
|
||||||
state_db.commit(0, &engine.spec().genesis_header().hash(), None).expect("Error commiting genesis state to state DB");
|
state_db.commit(0, &engine.spec().genesis_header().hash(), None).expect("Error commiting genesis state to state DB");
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
pub use block_queue::BlockQueueConfig;
|
pub use block_queue::BlockQueueConfig;
|
||||||
pub use blockchain::BlockChainConfig;
|
pub use blockchain::BlockChainConfig;
|
||||||
|
use util::journaldb;
|
||||||
|
|
||||||
/// Client configuration. Includes configs for all sub-systems.
|
/// Client configuration. Includes configs for all sub-systems.
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
@ -24,8 +25,8 @@ pub struct ClientConfig {
|
|||||||
pub queue: BlockQueueConfig,
|
pub queue: BlockQueueConfig,
|
||||||
/// Blockchain configuration.
|
/// Blockchain configuration.
|
||||||
pub blockchain: BlockChainConfig,
|
pub blockchain: BlockChainConfig,
|
||||||
/// Prefer journal rather than archive.
|
/// The JournalDB ("pruning") algorithm to use.
|
||||||
pub prefer_journal: bool,
|
pub pruning: journaldb::Algorithm,
|
||||||
/// The name of the client instance.
|
/// The name of the client instance.
|
||||||
pub name: String,
|
pub name: String,
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,8 @@ Protocol Options:
|
|||||||
or olympic, frontier, homestead, mainnet, morden, or testnet [default: homestead].
|
or olympic, frontier, homestead, mainnet, morden, or testnet [default: homestead].
|
||||||
--testnet Equivalent to --chain testnet (geth-compatible).
|
--testnet Equivalent to --chain testnet (geth-compatible).
|
||||||
--networkid INDEX Override the network identifier from the chain we are on.
|
--networkid INDEX Override the network identifier from the chain we are on.
|
||||||
--pruning Client should prune the state/storage trie.
|
--pruning METHOD Configure pruning of the state/storage trie. METHOD may be one of: archive,
|
||||||
|
light (experimental) [default: archive].
|
||||||
-d --datadir PATH Specify the database & configuration directory path [default: $HOME/.parity]
|
-d --datadir PATH Specify the database & configuration directory path [default: $HOME/.parity]
|
||||||
--keys-path PATH Specify the path for JSON key files to be found [default: $HOME/.web3/keys]
|
--keys-path PATH Specify the path for JSON key files to be found [default: $HOME/.web3/keys]
|
||||||
--identity NAME Specify your node's name.
|
--identity NAME Specify your node's name.
|
||||||
@ -101,7 +102,7 @@ API and Console Options:
|
|||||||
--jsonrpc-port PORT Specify the port portion of the JSONRPC API server [default: 8545].
|
--jsonrpc-port PORT Specify the port portion of the JSONRPC API server [default: 8545].
|
||||||
--jsonrpc-cors URL Specify CORS header for JSON-RPC API responses [default: null].
|
--jsonrpc-cors URL Specify CORS header for JSON-RPC API responses [default: null].
|
||||||
--jsonrpc-apis APIS Specify the APIs available through the JSONRPC interface. APIS is a comma-delimited
|
--jsonrpc-apis APIS Specify the APIs available through the JSONRPC interface. APIS is a comma-delimited
|
||||||
list of API name. Possible name are web3, eth and net. [default: web3,eth,net].
|
list of API name. Possible names are web3, eth and net. [default: web3,eth,net].
|
||||||
--rpc Equivalent to --jsonrpc (geth-compatible).
|
--rpc Equivalent to --jsonrpc (geth-compatible).
|
||||||
--rpcaddr HOST Equivalent to --jsonrpc-addr HOST (geth-compatible).
|
--rpcaddr HOST Equivalent to --jsonrpc-addr HOST (geth-compatible).
|
||||||
--rpcport PORT Equivalent to --jsonrpc-port PORT (geth-compatible).
|
--rpcport PORT Equivalent to --jsonrpc-port PORT (geth-compatible).
|
||||||
@ -141,7 +142,7 @@ struct Args {
|
|||||||
flag_identity: String,
|
flag_identity: String,
|
||||||
flag_cache: Option<usize>,
|
flag_cache: Option<usize>,
|
||||||
flag_keys_path: String,
|
flag_keys_path: String,
|
||||||
flag_pruning: bool,
|
flag_pruning: String,
|
||||||
flag_no_bootstrap: bool,
|
flag_no_bootstrap: bool,
|
||||||
flag_listen_address: String,
|
flag_listen_address: String,
|
||||||
flag_public_address: Option<String>,
|
flag_public_address: Option<String>,
|
||||||
@ -403,7 +404,13 @@ impl Configuration {
|
|||||||
client_config.blockchain.max_cache_size = self.args.flag_cache_max_size;
|
client_config.blockchain.max_cache_size = self.args.flag_cache_max_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
client_config.prefer_journal = self.args.flag_pruning;
|
client_config.pruning = match self.args.flag_pruning.as_str() {
|
||||||
|
"archive" => journaldb::Algorithm::Archive,
|
||||||
|
"pruned" => journaldb::Algorithm::EarlyMerge,
|
||||||
|
// "fast" => journaldb::Algorithm::OverlayRecent, // TODO: @arkpar uncomment this once option 2 is merged.
|
||||||
|
// "slow" => journaldb::Algorithm::RefCounted, // TODO: @gavofyork uncomment this once ref-count algo is merged.
|
||||||
|
_ => { die!("{}: Invalid pruning method given.", self.args.flag_pruning); }
|
||||||
|
};
|
||||||
client_config.name = self.args.flag_identity.clone();
|
client_config.name = self.args.flag_identity.clone();
|
||||||
client_config.queue.max_mem_use = self.args.flag_queue_max_size;
|
client_config.queue.max_mem_use = self.args.flag_queue_max_size;
|
||||||
let mut service = ClientService::start(client_config, spec, net_settings, &Path::new(&self.path())).unwrap();
|
let mut service = ClientService::start(client_config, spec, net_settings, &Path::new(&self.path())).unwrap();
|
||||||
@ -424,7 +431,7 @@ impl Configuration {
|
|||||||
self.args.flag_rpcaddr.as_ref().unwrap_or(&self.args.flag_jsonrpc_addr),
|
self.args.flag_rpcaddr.as_ref().unwrap_or(&self.args.flag_jsonrpc_addr),
|
||||||
self.args.flag_rpcport.unwrap_or(self.args.flag_jsonrpc_port)
|
self.args.flag_rpcport.unwrap_or(self.args.flag_jsonrpc_port)
|
||||||
);
|
);
|
||||||
SocketAddr::from_str(&url).unwrap_or_else(|_|die!("{}: Invalid JSONRPC listen host/port given.", url));
|
SocketAddr::from_str(&url).unwrap_or_else(|_| die!("{}: Invalid JSONRPC listen host/port given.", url));
|
||||||
let cors = self.args.flag_rpccorsdomain.as_ref().unwrap_or(&self.args.flag_jsonrpc_cors);
|
let cors = self.args.flag_rpccorsdomain.as_ref().unwrap_or(&self.args.flag_jsonrpc_cors);
|
||||||
// TODO: use this as the API list.
|
// TODO: use this as the API list.
|
||||||
let apis = self.args.flag_rpcapi.as_ref().unwrap_or(&self.args.flag_jsonrpc_apis);
|
let apis = self.args.flag_rpcapi.as_ref().unwrap_or(&self.args.flag_jsonrpc_apis);
|
||||||
|
@ -26,8 +26,53 @@ mod optiononedb;
|
|||||||
/// Export the JournalDB trait.
|
/// Export the JournalDB trait.
|
||||||
pub use self::traits::JournalDB;
|
pub use self::traits::JournalDB;
|
||||||
|
|
||||||
/// Create a new JournalDB trait object which is an ArchiveDB.
|
/// A journal database algorithm.
|
||||||
pub fn new_archivedb(path: &str) -> Box<JournalDB> { Box::new(archivedb::ArchiveDB::new(path)) }
|
#[derive(Debug)]
|
||||||
|
pub enum Algorithm {
|
||||||
|
/// Keep all keys forever.
|
||||||
|
Archive,
|
||||||
|
|
||||||
/// Create a new JournalDB trait object which is an OptionOneDB.
|
/// Ancient and recent history maintained separately; recent history lasts for particular
|
||||||
pub fn new_optiononedb(path: &str) -> Box<JournalDB> { Box::new(optiononedb::OptionOneDB::new(path)) }
|
/// number of blocks.
|
||||||
|
///
|
||||||
|
/// Inserts go into backing database, journal retains knowledge of whether backing DB key is
|
||||||
|
/// ancient or recent. Non-canon inserts get explicitly reverted and removed from backing DB.
|
||||||
|
EarlyMerge,
|
||||||
|
|
||||||
|
/// Ancient and recent history maintained separately; recent history lasts for particular
|
||||||
|
/// number of blocks.
|
||||||
|
///
|
||||||
|
/// Inserts go into memory overlay, which is tried for key fetches. Memory overlay gets
|
||||||
|
/// flushed in backing only at end of recent history.
|
||||||
|
OverlayRecent,
|
||||||
|
|
||||||
|
/// Ancient and recent history maintained separately; recent history lasts for particular
|
||||||
|
/// number of blocks.
|
||||||
|
///
|
||||||
|
/// References are counted in disk-backed DB.
|
||||||
|
RefCounted,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Algorithm {
|
||||||
|
fn default() -> Algorithm { Algorithm::Archive }
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Algorithm {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "{}", match self {
|
||||||
|
&Algorithm::Archive => "archive",
|
||||||
|
&Algorithm::EarlyMerge => "earlymerge",
|
||||||
|
&Algorithm::OverlayRecent => "overlayrecent",
|
||||||
|
&Algorithm::RefCounted => "refcounted",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a new JournalDB trait object.
|
||||||
|
pub fn new(path: &str, algorithm: Algorithm) -> Box<JournalDB> {
|
||||||
|
match algorithm {
|
||||||
|
Algorithm::Archive => Box::new(archivedb::ArchiveDB::new(path)),
|
||||||
|
Algorithm::EarlyMerge => Box::new(optiononedb::OptionOneDB::new(path)),
|
||||||
|
_ => unimplemented!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -154,7 +154,7 @@ pub use rlp::*;
|
|||||||
pub use hashdb::*;
|
pub use hashdb::*;
|
||||||
pub use memorydb::*;
|
pub use memorydb::*;
|
||||||
pub use overlaydb::*;
|
pub use overlaydb::*;
|
||||||
pub use journaldb::*;
|
pub use journaldb::JournalDB;
|
||||||
pub use math::*;
|
pub use math::*;
|
||||||
pub use crypto::*;
|
pub use crypto::*;
|
||||||
pub use triehash::*;
|
pub use triehash::*;
|
||||||
|
Loading…
Reference in New Issue
Block a user