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();
|
||||
dir.push(H64::from(spec.genesis_header().hash()).hex());
|
||||
//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 gb = spec.genesis_block();
|
||||
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 state_path_str = state_path.to_str().unwrap();
|
||||
let mut state_db = if config.prefer_journal {
|
||||
new_optiononedb(state_path_str)
|
||||
} else {
|
||||
new_archivedb(state_path_str)
|
||||
};
|
||||
let mut state_db = journaldb::new(state_path_str, config.pruning);
|
||||
|
||||
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");
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
pub use block_queue::BlockQueueConfig;
|
||||
pub use blockchain::BlockChainConfig;
|
||||
use util::journaldb;
|
||||
|
||||
/// Client configuration. Includes configs for all sub-systems.
|
||||
#[derive(Debug, Default)]
|
||||
@ -24,8 +25,8 @@ pub struct ClientConfig {
|
||||
pub queue: BlockQueueConfig,
|
||||
/// Blockchain configuration.
|
||||
pub blockchain: BlockChainConfig,
|
||||
/// Prefer journal rather than archive.
|
||||
pub prefer_journal: bool,
|
||||
/// The JournalDB ("pruning") algorithm to use.
|
||||
pub pruning: journaldb::Algorithm,
|
||||
/// The name of the client instance.
|
||||
pub name: String,
|
||||
}
|
||||
|
@ -80,7 +80,8 @@ Protocol Options:
|
||||
or olympic, frontier, homestead, mainnet, morden, or testnet [default: homestead].
|
||||
--testnet Equivalent to --chain testnet (geth-compatible).
|
||||
--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]
|
||||
--keys-path PATH Specify the path for JSON key files to be found [default: $HOME/.web3/keys]
|
||||
--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-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
|
||||
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).
|
||||
--rpcaddr HOST Equivalent to --jsonrpc-addr HOST (geth-compatible).
|
||||
--rpcport PORT Equivalent to --jsonrpc-port PORT (geth-compatible).
|
||||
@ -141,7 +142,7 @@ struct Args {
|
||||
flag_identity: String,
|
||||
flag_cache: Option<usize>,
|
||||
flag_keys_path: String,
|
||||
flag_pruning: bool,
|
||||
flag_pruning: String,
|
||||
flag_no_bootstrap: bool,
|
||||
flag_listen_address: 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.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.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();
|
||||
@ -424,7 +431,7 @@ impl Configuration {
|
||||
self.args.flag_rpcaddr.as_ref().unwrap_or(&self.args.flag_jsonrpc_addr),
|
||||
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);
|
||||
// TODO: use this as the API list.
|
||||
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.
|
||||
pub use self::traits::JournalDB;
|
||||
|
||||
/// Create a new JournalDB trait object which is an ArchiveDB.
|
||||
pub fn new_archivedb(path: &str) -> Box<JournalDB> { Box::new(archivedb::ArchiveDB::new(path)) }
|
||||
/// A journal database algorithm.
|
||||
#[derive(Debug)]
|
||||
pub enum Algorithm {
|
||||
/// Keep all keys forever.
|
||||
Archive,
|
||||
|
||||
/// Create a new JournalDB trait object which is an OptionOneDB.
|
||||
pub fn new_optiononedb(path: &str) -> Box<JournalDB> { Box::new(optiononedb::OptionOneDB::new(path)) }
|
||||
/// Ancient and recent history maintained separately; recent history lasts for particular
|
||||
/// 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 memorydb::*;
|
||||
pub use overlaydb::*;
|
||||
pub use journaldb::*;
|
||||
pub use journaldb::JournalDB;
|
||||
pub use math::*;
|
||||
pub use crypto::*;
|
||||
pub use triehash::*;
|
||||
|
Loading…
Reference in New Issue
Block a user