Skip to content

Commit eea160a

Browse files
committed
use serde_json for storage settings
1 parent 40a3cb2 commit eea160a

File tree

6 files changed

+36
-25
lines changed

6 files changed

+36
-25
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/storage/db-api/src/models/metadata.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ impl StorageSettings {
2323
Self { receipts_on_static_files: false }
2424
}
2525

26+
/// Creates `StorageSettings` for legacy nodes.
27+
///
28+
/// This explicitly sets `receipts_on_static_files` to `false`, ensuring older nodes
29+
/// continue writing receipts to the database when receipt pruning is enabled.
30+
pub const fn legacy() -> Self {
31+
Self { receipts_on_static_files: false }
32+
}
33+
2634
/// Sets the `receipts_static_files` flag to true.
2735
pub const fn with_receipts_on_static_files(mut self) -> Self {
2836
self.receipts_on_static_files = true;

crates/storage/provider/src/providers/database/mod.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,17 @@ impl<N: ProviderNodeTypes> ProviderFactory<N> {
8484
chain_spec: Arc<N::ChainSpec>,
8585
static_file_provider: StaticFileProvider<N::Primitives>,
8686
) -> ProviderResult<Self> {
87+
let legacy_settings = StorageSettings::legacy();
8788
let storage_settings = DatabaseProvider::<_, N>::new(
8889
db.tx()?,
8990
chain_spec.clone(),
9091
static_file_provider.clone(),
9192
Default::default(),
9293
Default::default(),
93-
Arc::new(RwLock::new(StorageSettings::default())),
94+
Arc::new(RwLock::new(legacy_settings)),
9495
)
9596
.storage_settings()?
96-
.unwrap_or_default();
97+
.unwrap_or(legacy_settings);
9798

9899
Ok(Self {
99100
db,
@@ -129,7 +130,6 @@ impl<N: NodeTypesWithDB> ProviderFactory<N> {
129130
pub fn into_db(self) -> N::DB {
130131
self.db
131132
}
132-
133133
}
134134

135135
impl<N: NodeTypesWithDB> StorageSettingsCache for ProviderFactory<N> {
@@ -150,15 +150,16 @@ impl<N: NodeTypesWithDB<DB = Arc<DatabaseEnv>>> ProviderFactory<N> {
150150
chain_spec: Arc<N::ChainSpec>,
151151
args: DatabaseArguments,
152152
static_file_provider: StaticFileProvider<N::Primitives>,
153-
) -> RethResult<Self> {
154-
Ok(Self {
155-
db: Arc::new(init_db(path, args).map_err(RethError::msg)?),
153+
) -> RethResult<Self>
154+
where
155+
N: ProviderNodeTypes,
156+
{
157+
Self::new(
158+
Arc::new(init_db(path, args).map_err(RethError::msg)?),
156159
chain_spec,
157160
static_file_provider,
158-
prune_modes: PruneModes::default(),
159-
storage: Default::default(),
160-
storage_settings: Arc::new(RwLock::new(StorageSettings::default())),
161-
})
161+
)
162+
.map_err(RethError::Provider)
162163
}
163164
}
164165

crates/storage/provider/src/providers/database/provider.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ use reth_prune_types::{
5858
use reth_stages_types::{StageCheckpoint, StageId};
5959
use reth_static_file_types::StaticFileSegment;
6060
use reth_storage_api::{
61-
BlockBodyIndicesProvider, BlockBodyReader, MetadataProvider, MetadataWriter, NodePrimitivesProvider, StateProvider, StorageChangeSetReader, StorageSettingsCache, TryIntoHistoricalStateProvider
61+
BlockBodyIndicesProvider, BlockBodyReader, MetadataProvider, MetadataWriter,
62+
NodePrimitivesProvider, StateProvider, StorageChangeSetReader, StorageSettingsCache,
63+
TryIntoHistoricalStateProvider,
6264
};
6365
use reth_storage_errors::provider::ProviderResult;
6466
use reth_trie::{
@@ -497,8 +499,9 @@ impl<TX: DbTx + 'static, N: NodeTypesForProvider> DatabaseProvider<TX, N> {
497499
static_file_provider: StaticFileProvider<N::Primitives>,
498500
prune_modes: PruneModes,
499501
storage: Arc<N::Storage>,
502+
storage_settings: Arc<RwLock<StorageSettings>>,
500503
) -> Self {
501-
Self { tx, chain_spec, static_file_provider, prune_modes, storage }
504+
Self { tx, chain_spec, static_file_provider, prune_modes, storage, storage_settings }
502505
}
503506

504507
/// Consume `DbTx` or `DbTxMut`.

crates/storage/storage-api/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ workspace = true
1313

1414
[dependencies]
1515
# reth
16-
reth-codecs = { workspace = true, optional = true }
1716
reth-db-models.workspace = true
1817
reth-chainspec.workspace = true
1918
reth-db-api = { workspace = true, optional = true }
@@ -33,6 +32,7 @@ alloy-consensus.workspace = true
3332
alloy-rpc-types-engine.workspace = true
3433

3534
auto_impl.workspace = true
35+
serde_json = { workspace = true, optional = true }
3636

3737
[features]
3838
default = ["std"]
@@ -51,15 +51,15 @@ std = [
5151
"reth-storage-errors/std",
5252
"reth-db-models/std",
5353
"reth-trie-common/std",
54+
"serde_json?/std",
5455
]
5556

5657
db-api = [
57-
"dep:reth-codecs",
5858
"dep:reth-db-api",
59+
"dep:serde_json",
5960
]
6061

6162
serde = [
62-
"reth-codecs/serde",
6363
"reth-ethereum-primitives/serde",
6464
"reth-db-models/serde",
6565
"reth-execution-types/serde",

crates/storage/storage-api/src/metadata.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
//! Metadata provider trait for reading and writing node metadata.
22
3-
use reth_codecs::Compact;
43
use reth_db_api::models::StorageSettings;
5-
use reth_storage_errors::provider::ProviderResult;
4+
use reth_storage_errors::provider::{ProviderError, ProviderResult};
65

76
/// Metadata keys.
87
pub mod keys {
@@ -18,9 +17,9 @@ pub trait MetadataProvider: Send + Sync {
1817

1918
/// Get storage settings for this node
2019
fn storage_settings(&self) -> ProviderResult<Option<StorageSettings>> {
21-
Ok(self
22-
.get_metadata(keys::STORAGE_SETTINGS)?
23-
.map(|bytes| StorageSettings::from_compact(&bytes, bytes.len()).0))
20+
self.get_metadata(keys::STORAGE_SETTINGS)?
21+
.map(|bytes| serde_json::from_slice(&bytes).map_err(ProviderError::other))
22+
.transpose()
2423
}
2524
}
2625

@@ -34,10 +33,10 @@ pub trait MetadataWriter: Send + Sync {
3433
/// Be sure to update provider factory cache with
3534
/// [`StorageSettingsCache::set_storage_settings_cache`].
3635
fn write_storage_settings(&self, settings: StorageSettings) -> ProviderResult<()> {
37-
use reth_codecs::Compact;
38-
let mut buf = Vec::new();
39-
settings.to_compact(&mut buf);
40-
self.write_metadata(keys::STORAGE_SETTINGS, buf)
36+
self.write_metadata(
37+
keys::STORAGE_SETTINGS,
38+
serde_json::to_vec(&settings).map_err(ProviderError::other)?,
39+
)
4140
}
4241
}
4342

0 commit comments

Comments
 (0)