fix static file derive (#14473)

This commit is contained in:
Matthias Seitz
2025-02-13 14:30:56 +01:00
committed by GitHub
parent b45478c08c
commit fd0e9dc3db
2 changed files with 28 additions and 12 deletions

View File

@ -126,8 +126,7 @@ impl ReadOnlyConfig {
/// [`StaticFileProvider::read_only`]
pub fn from_datadir(datadir: impl AsRef<Path>) -> 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<Path>) -> 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<Path>, static_files_dir: impl AsRef<Path>) -> 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<N, Val1, Val2> TypesAnd2<N, Val1, Val2> {
{
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.

View File

@ -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.