From fd0e9dc3db3595b0460295d4db809da1316373b4 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Thu, 13 Feb 2025 14:30:56 +0100 Subject: [PATCH] fix static file derive (#14473) --- .../src/providers/database/builder.rs | 32 ++++++++++++++----- examples/db-access/src/main.rs | 8 ++--- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/crates/storage/provider/src/providers/database/builder.rs b/crates/storage/provider/src/providers/database/builder.rs index b5044ff02..8e1087ef7 100644 --- a/crates/storage/provider/src/providers/database/builder.rs +++ b/crates/storage/provider/src/providers/database/builder.rs @@ -119,15 +119,14 @@ impl ReadOnlyConfig { /// ```text /// -`datadir` /// |__db - /// |__static_files + /// |__static_files /// ``` /// /// By default this watches the static file directory for changes, see also /// [`StaticFileProvider::read_only`] pub fn from_datadir(datadir: impl AsRef) -> Self { let datadir = datadir.as_ref(); - let db_path = datadir.join("db"); - Self::from_db_dir(db_path) + Self::from_dirs(datadir.join("db"), datadir.join("static_files")) } /// Derives the [`ReadOnlyConfig`] from the database dir. @@ -136,16 +135,35 @@ impl ReadOnlyConfig { /// /// ```text /// - db - /// |__static_files + /// -static_files /// ``` /// /// By default this watches the static file directory for changes, see also /// [`StaticFileProvider::read_only`] + /// + /// # Panics + /// + /// If the path does not exist pub fn from_db_dir(db_dir: impl AsRef) -> Self { let db_dir = db_dir.as_ref(); + let static_files_dir = std::fs::canonicalize(db_dir) + .unwrap() + .parent() + .unwrap() + .to_path_buf() + .join("static_files"); + Self::from_dirs(db_dir, static_files_dir) + } + + /// Creates the config for the given paths. + /// + /// + /// By default this watches the static file directory for changes, see also + /// [`StaticFileProvider::read_only`] + pub fn from_dirs(db_dir: impl AsRef, static_files_dir: impl AsRef) -> Self { Self { - static_files_dir: db_dir.join("static_files"), - db_dir: db_dir.into(), + static_files_dir: static_files_dir.as_ref().into(), + db_dir: db_dir.as_ref().into(), db_args: Default::default(), watch_static_files: true, } @@ -247,8 +265,6 @@ impl TypesAnd2 { { TypesAnd3::new(self.val_1, self.val_2, static_file_provider) } - - // TODO: add helper fns for opening static file provider } /// This is staging type that contains the configured types and _three_ values. diff --git a/examples/db-access/src/main.rs b/examples/db-access/src/main.rs index 4d02b39d9..25c631a20 100644 --- a/examples/db-access/src/main.rs +++ b/examples/db-access/src/main.rs @@ -20,13 +20,13 @@ use reth_ethereum::{ // These abstractions do not include any caching and the user is responsible for doing that. // Other parts of the code which include caching are parts of the `EthApi` abstraction. fn main() -> eyre::Result<()> { - // Opens a RO handle to the database file. - let db_path = std::env::var("RETH_DB_PATH")?; + // The path to data directory, e.g. "~/.local/reth/share/mainnet" + let datadir = std::env::var("RETH_DATADIR")?; - // Instantiate a provider factory for Ethereum mainnet using the provided DB path. + // Instantiate a provider factory for Ethereum mainnet using the provided datadir path. let spec = ChainSpecBuilder::mainnet().build(); let factory = EthereumNode::provider_factory_builder() - .open_read_only(spec.into(), ReadOnlyConfig::from_db_dir(db_path))?; + .open_read_only(spec.into(), ReadOnlyConfig::from_datadir(datadir))?; // This call opens a RO transaction on the database. To write to the DB you'd need to call // the `provider_rw` function and look for the `Writer` variants of the traits.