mirror of
https://github.com/romanz/electrs.git
synced 2024-11-19 09:54:09 +01:00
Add a 'blocks_dir' option analogous to bitcoind's '-blocksdir'
The '-blocksdir' startup option allows one to store blk*.dat on an external disk, while keeping the index (blocks/index/) on the same disk. This makes electrs aware of such an option, while still keeping the same default behaviour (blk*.dat in '<config_dir>/blocks/'). Signed-off-by: Antoine Poinsot <darosior@protonmail.com>
This commit is contained in:
parent
fac73dc1bf
commit
f1d611fe19
@ -29,6 +29,11 @@ type = "std::path::PathBuf"
|
|||||||
doc = "Data directory of Bitcoind (default: ~/.bitcoin/)"
|
doc = "Data directory of Bitcoind (default: ~/.bitcoin/)"
|
||||||
default = "crate::config::default_daemon_dir()"
|
default = "crate::config::default_daemon_dir()"
|
||||||
|
|
||||||
|
[[param]]
|
||||||
|
name = "blocks_dir"
|
||||||
|
type = "std::path::PathBuf"
|
||||||
|
doc = "Analogous to bitcoind's -blocksdir option, this specifies the directory containing the raw blocks files (blk*.dat)"
|
||||||
|
|
||||||
[[param]]
|
[[param]]
|
||||||
name = "cookie"
|
name = "cookie"
|
||||||
type = "String"
|
type = "String"
|
||||||
|
@ -21,6 +21,7 @@ fn run() -> Result<()> {
|
|||||||
|
|
||||||
let daemon = Daemon::new(
|
let daemon = Daemon::new(
|
||||||
&config.daemon_dir,
|
&config.daemon_dir,
|
||||||
|
&config.blocks_dir,
|
||||||
config.daemon_rpc_addr,
|
config.daemon_rpc_addr,
|
||||||
config.cookie_getter(),
|
config.cookie_getter(),
|
||||||
config.network_type,
|
config.network_type,
|
||||||
|
@ -31,6 +31,7 @@ fn run_server(config: &Config) -> Result<()> {
|
|||||||
|
|
||||||
let daemon = Daemon::new(
|
let daemon = Daemon::new(
|
||||||
&config.daemon_dir,
|
&config.daemon_dir,
|
||||||
|
&config.blocks_dir,
|
||||||
config.daemon_rpc_addr,
|
config.daemon_rpc_addr,
|
||||||
config.cookie_getter(),
|
config.cookie_getter(),
|
||||||
config.network_type,
|
config.network_type,
|
||||||
|
@ -128,6 +128,7 @@ pub struct Config {
|
|||||||
pub network_type: Network,
|
pub network_type: Network,
|
||||||
pub db_path: PathBuf,
|
pub db_path: PathBuf,
|
||||||
pub daemon_dir: PathBuf,
|
pub daemon_dir: PathBuf,
|
||||||
|
pub blocks_dir: PathBuf,
|
||||||
pub daemon_rpc_addr: SocketAddr,
|
pub daemon_rpc_addr: SocketAddr,
|
||||||
pub electrum_rpc_addr: SocketAddr,
|
pub electrum_rpc_addr: SocketAddr,
|
||||||
pub monitoring_addr: SocketAddr,
|
pub monitoring_addr: SocketAddr,
|
||||||
@ -152,6 +153,10 @@ fn default_daemon_dir() -> PathBuf {
|
|||||||
home
|
home
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn default_blocks_dir(daemon_dir: &Path) -> PathBuf {
|
||||||
|
daemon_dir.join("blocks")
|
||||||
|
}
|
||||||
|
|
||||||
fn create_cookie_getter(
|
fn create_cookie_getter(
|
||||||
cookie: Option<String>,
|
cookie: Option<String>,
|
||||||
cookie_file: Option<PathBuf>,
|
cookie_file: Option<PathBuf>,
|
||||||
@ -230,6 +235,10 @@ impl Config {
|
|||||||
Network::Regtest => config.daemon_dir.push("regtest"),
|
Network::Regtest => config.daemon_dir.push("regtest"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let blocks_dir = config.blocks_dir.unwrap_or(
|
||||||
|
default_blocks_dir(&config.daemon_dir)
|
||||||
|
);
|
||||||
|
|
||||||
let cookie_getter =
|
let cookie_getter =
|
||||||
create_cookie_getter(config.cookie, config.cookie_file, &config.daemon_dir);
|
create_cookie_getter(config.cookie, config.cookie_file, &config.daemon_dir);
|
||||||
|
|
||||||
@ -260,6 +269,7 @@ impl Config {
|
|||||||
network_type: config.network,
|
network_type: config.network,
|
||||||
db_path: config.db_dir,
|
db_path: config.db_dir,
|
||||||
daemon_dir: config.daemon_dir,
|
daemon_dir: config.daemon_dir,
|
||||||
|
blocks_dir,
|
||||||
daemon_rpc_addr,
|
daemon_rpc_addr,
|
||||||
electrum_rpc_addr,
|
electrum_rpc_addr,
|
||||||
monitoring_addr,
|
monitoring_addr,
|
||||||
@ -302,6 +312,7 @@ debug_struct! { Config,
|
|||||||
network_type,
|
network_type,
|
||||||
db_path,
|
db_path,
|
||||||
daemon_dir,
|
daemon_dir,
|
||||||
|
blocks_dir,
|
||||||
daemon_rpc_addr,
|
daemon_rpc_addr,
|
||||||
electrum_rpc_addr,
|
electrum_rpc_addr,
|
||||||
monitoring_addr,
|
monitoring_addr,
|
||||||
|
@ -288,6 +288,7 @@ impl Counter {
|
|||||||
|
|
||||||
pub struct Daemon {
|
pub struct Daemon {
|
||||||
daemon_dir: PathBuf,
|
daemon_dir: PathBuf,
|
||||||
|
blocks_dir: PathBuf,
|
||||||
network: Network,
|
network: Network,
|
||||||
conn: Mutex<Connection>,
|
conn: Mutex<Connection>,
|
||||||
message_id: Counter, // for monotonic JSONRPC 'id'
|
message_id: Counter, // for monotonic JSONRPC 'id'
|
||||||
@ -302,6 +303,7 @@ pub struct Daemon {
|
|||||||
impl Daemon {
|
impl Daemon {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
daemon_dir: &PathBuf,
|
daemon_dir: &PathBuf,
|
||||||
|
blocks_dir: &PathBuf,
|
||||||
daemon_rpc_addr: SocketAddr,
|
daemon_rpc_addr: SocketAddr,
|
||||||
cookie_getter: Arc<dyn CookieGetter>,
|
cookie_getter: Arc<dyn CookieGetter>,
|
||||||
network: Network,
|
network: Network,
|
||||||
@ -311,6 +313,7 @@ impl Daemon {
|
|||||||
) -> Result<Daemon> {
|
) -> Result<Daemon> {
|
||||||
let daemon = Daemon {
|
let daemon = Daemon {
|
||||||
daemon_dir: daemon_dir.clone(),
|
daemon_dir: daemon_dir.clone(),
|
||||||
|
blocks_dir: blocks_dir.clone(),
|
||||||
network,
|
network,
|
||||||
conn: Mutex::new(Connection::new(
|
conn: Mutex::new(Connection::new(
|
||||||
daemon_rpc_addr,
|
daemon_rpc_addr,
|
||||||
@ -360,6 +363,7 @@ impl Daemon {
|
|||||||
pub fn reconnect(&self) -> Result<Daemon> {
|
pub fn reconnect(&self) -> Result<Daemon> {
|
||||||
Ok(Daemon {
|
Ok(Daemon {
|
||||||
daemon_dir: self.daemon_dir.clone(),
|
daemon_dir: self.daemon_dir.clone(),
|
||||||
|
blocks_dir: self.blocks_dir.clone(),
|
||||||
network: self.network,
|
network: self.network,
|
||||||
conn: Mutex::new(self.conn.lock().unwrap().reconnect()?),
|
conn: Mutex::new(self.conn.lock().unwrap().reconnect()?),
|
||||||
message_id: Counter::new(),
|
message_id: Counter::new(),
|
||||||
@ -371,9 +375,7 @@ impl Daemon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn list_blk_files(&self) -> Result<Vec<PathBuf>> {
|
pub fn list_blk_files(&self) -> Result<Vec<PathBuf>> {
|
||||||
let mut path = self.daemon_dir.clone();
|
let path = self.blocks_dir.join("blk*.dat");
|
||||||
path.push("blocks");
|
|
||||||
path.push("blk*.dat");
|
|
||||||
info!("listing block files at {:?}", path);
|
info!("listing block files at {:?}", path);
|
||||||
let mut paths: Vec<PathBuf> = glob::glob(path.to_str().unwrap())
|
let mut paths: Vec<PathBuf> = glob::glob(path.to_str().unwrap())
|
||||||
.chain_err(|| "failed to list blk*.dat files")?
|
.chain_err(|| "failed to list blk*.dat files")?
|
||||||
|
Loading…
Reference in New Issue
Block a user