forked from paradigmxyz/reth
-
Notifications
You must be signed in to change notification settings - Fork 10
feat: prune cli added #507
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| //! Command that prunes the OP proofs storage. | ||
|
|
||
| use clap::Parser; | ||
| use reth_cli::chainspec::ChainSpecParser; | ||
| use reth_cli_commands::common::{AccessRights, CliNodeTypes, Environment, EnvironmentArgs}; | ||
| use reth_node_core::version::version_metadata; | ||
| use reth_optimism_chainspec::OpChainSpec; | ||
| use reth_optimism_primitives::OpPrimitives; | ||
| use reth_optimism_trie::{ | ||
| db::MdbxProofsStorage, OpProofStoragePruner, OpProofsStorage, OpProofsStore, | ||
| }; | ||
| use std::{path::PathBuf, sync::Arc}; | ||
| use tracing::info; | ||
|
|
||
| /// Prunes the proofs storage by removing old proof history and state updates. | ||
| #[derive(Debug, Parser)] | ||
| pub struct PruneOpProofsCommand<C: ChainSpecParser> { | ||
| #[command(flatten)] | ||
| env: EnvironmentArgs<C>, | ||
|
|
||
| /// The path to the storage DB for proofs history. | ||
| #[arg( | ||
| long = "proofs-history.storage-path", | ||
| value_name = "PROOFS_HISTORY_STORAGE_PATH", | ||
| required = true | ||
| )] | ||
| pub storage_path: PathBuf, | ||
|
|
||
| /// The window to span blocks for proofs history. Value is the number of blocks. | ||
| /// Default is 1 month of blocks based on 2 seconds block time. | ||
| /// 30 * 24 * 60 * 60 / 2 = `1_296_000` | ||
| #[arg( | ||
| long = "proofs-history.window", | ||
| default_value_t = 1_296_000, | ||
| value_name = "PROOFS_HISTORY_WINDOW" | ||
| )] | ||
| pub proofs_history_window: u64, | ||
| } | ||
|
|
||
| impl<C: ChainSpecParser<ChainSpec = OpChainSpec>> PruneOpProofsCommand<C> { | ||
| /// Execute [`PruneOpProofsCommand`]. | ||
| pub async fn execute<N: CliNodeTypes<ChainSpec = C::ChainSpec, Primitives = OpPrimitives>>( | ||
| self, | ||
| ) -> eyre::Result<()> { | ||
| info!(target: "reth::cli", "reth {} starting", version_metadata().short_version); | ||
| info!(target: "reth::cli", "Pruning OP proofs storage at: {:?}", self.storage_path); | ||
|
|
||
| // Initialize the environment with read-only access | ||
| let Environment { provider_factory, .. } = self.env.init::<N>(AccessRights::RO)?; | ||
|
|
||
| let storage: OpProofsStorage<Arc<MdbxProofsStorage>> = Arc::new( | ||
| MdbxProofsStorage::new(&self.storage_path) | ||
| .map_err(|e| eyre::eyre!("Failed to create MdbxProofsStorage: {e}"))?, | ||
| ) | ||
| .into(); | ||
|
|
||
| let earliest_block = storage.get_earliest_block_number().await?; | ||
| let latest_block = storage.get_latest_block_number().await?; | ||
| info!( | ||
| target: "reth::cli", | ||
| ?earliest_block, | ||
| ?latest_block, | ||
| "Current proofs storage block range" | ||
| ); | ||
|
|
||
| let pruner = | ||
| OpProofStoragePruner::new(storage, provider_factory, self.proofs_history_window); | ||
| pruner.run().await; | ||
| Ok(()) | ||
| } | ||
| } | ||
|
|
||
| impl<C: ChainSpecParser> PruneOpProofsCommand<C> { | ||
| /// Returns the underlying chain being used to run this command | ||
| pub const fn chain_spec(&self) -> Option<&Arc<C::ChainSpec>> { | ||
| Some(&self.env.chain) | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,247 @@ | ||
| # op-reth prune-op-proofs | ||
|
|
||
| Prunes the proofs storage by removing old proof history and state updates | ||
|
|
||
| ```bash | ||
| $ op-reth prune-op-proofs --help | ||
| ``` | ||
| ```txt | ||
| Usage: op-reth prune-op-proofs [OPTIONS] --proofs-history.storage-path <PROOFS_HISTORY_STORAGE_PATH> | ||
|
|
||
| Options: | ||
| -h, --help | ||
| Print help (see a summary with '-h') | ||
|
|
||
| Datadir: | ||
| --datadir <DATA_DIR> | ||
| The path to the data dir for all reth files and subdirectories. | ||
|
|
||
| Defaults to the OS-specific data directory: | ||
|
|
||
| - Linux: `$XDG_DATA_HOME/reth/` or `$HOME/.local/share/reth/` | ||
| - Windows: `{FOLDERID_RoamingAppData}/reth/` | ||
| - macOS: `$HOME/Library/Application Support/reth/` | ||
|
|
||
| [default: default] | ||
|
|
||
| --datadir.static-files <PATH> | ||
| The absolute path to store static files in. | ||
|
|
||
| --config <FILE> | ||
| The path to the configuration file to use | ||
|
|
||
| --chain <CHAIN_OR_PATH> | ||
| The chain this node is running. | ||
| Possible values are either a built-in chain or the path to a chain specification file. | ||
|
|
||
| Built-in chains: | ||
| optimism, optimism_sepolia, optimism-sepolia, base, base_sepolia, base-sepolia, arena-z, arena-z-sepolia, automata, base-devnet-0-sepolia-dev-0, bob, boba-sepolia, boba, camp-sepolia, celo, creator-chain-testnet-sepolia, cyber, cyber-sepolia, ethernity, ethernity-sepolia, fraxtal, funki, funki-sepolia, hashkeychain, ink, ink-sepolia, lisk, lisk-sepolia, lyra, metal, metal-sepolia, mint, mode, mode-sepolia, oplabs-devnet-0-sepolia-dev-0, orderly, ozean-sepolia, pivotal-sepolia, polynomial, race, race-sepolia, radius_testnet-sepolia, redstone, rehearsal-0-bn-0-rehearsal-0-bn, rehearsal-0-bn-1-rehearsal-0-bn, settlus-mainnet, settlus-sepolia-sepolia, shape, shape-sepolia, silent-data-mainnet, snax, soneium, soneium-minato-sepolia, sseed, swan, swell, tbn, tbn-sepolia, unichain, unichain-sepolia, worldchain, worldchain-sepolia, xterio-eth, zora, zora-sepolia, dev | ||
|
|
||
| [default: optimism] | ||
|
|
||
| Database: | ||
| --db.log-level <LOG_LEVEL> | ||
| Database logging level. Levels higher than "notice" require a debug build | ||
|
|
||
| Possible values: | ||
| - fatal: Enables logging for critical conditions, i.e. assertion failures | ||
| - error: Enables logging for error conditions | ||
| - warn: Enables logging for warning conditions | ||
| - notice: Enables logging for normal but significant condition | ||
| - verbose: Enables logging for verbose informational | ||
| - debug: Enables logging for debug-level messages | ||
| - trace: Enables logging for trace debug-level messages | ||
| - extra: Enables logging for extra debug-level messages | ||
|
|
||
| --db.exclusive <EXCLUSIVE> | ||
| Open environment in exclusive/monopolistic mode. Makes it possible to open a database on an NFS volume | ||
|
|
||
| [possible values: true, false] | ||
|
|
||
| --db.max-size <MAX_SIZE> | ||
| Maximum database size (e.g., 4TB, 8TB). | ||
|
|
||
| This sets the "map size" of the database. If the database grows beyond this limit, the node will stop with an "environment map size limit reached" error. | ||
|
|
||
| The default value is 8TB. | ||
|
|
||
| --db.page-size <PAGE_SIZE> | ||
| Database page size (e.g., 4KB, 8KB, 16KB). | ||
|
|
||
| Specifies the page size used by the MDBX database. | ||
|
|
||
| The page size determines the maximum database size. MDBX supports up to 2^31 pages, so with the default 4KB page size, the maximum database size is 8TB. To allow larger databases, increase this value to 8KB or higher. | ||
|
|
||
| WARNING: This setting is only configurable at database creation; changing it later requires re-syncing. | ||
|
|
||
| --db.growth-step <GROWTH_STEP> | ||
| Database growth step (e.g., 4GB, 4KB) | ||
|
|
||
| --db.read-transaction-timeout <READ_TRANSACTION_TIMEOUT> | ||
| Read transaction timeout in seconds, 0 means no timeout | ||
|
|
||
| --db.max-readers <MAX_READERS> | ||
| Maximum number of readers allowed to access the database concurrently | ||
|
|
||
| --db.sync-mode <SYNC_MODE> | ||
| Controls how aggressively the database synchronizes data to disk | ||
|
|
||
| Static Files: | ||
| --static-files.blocks-per-file.headers <BLOCKS_PER_FILE_HEADERS> | ||
| Number of blocks per file for the headers segment | ||
|
|
||
| --static-files.blocks-per-file.transactions <BLOCKS_PER_FILE_TRANSACTIONS> | ||
| Number of blocks per file for the transactions segment | ||
|
|
||
| --static-files.blocks-per-file.receipts <BLOCKS_PER_FILE_RECEIPTS> | ||
| Number of blocks per file for the receipts segment | ||
|
|
||
| --static-files.blocks-per-file.transaction-senders <BLOCKS_PER_FILE_TRANSACTION_SENDERS> | ||
| Number of blocks per file for the transaction senders segment | ||
|
|
||
| --static-files.receipts | ||
| Store receipts in static files instead of the database. | ||
|
|
||
| When enabled, receipts will be written to static files on disk instead of the database. | ||
|
|
||
| Note: This setting can only be configured at genesis initialization. Once the node has been initialized, changing this flag requires re-syncing from scratch. | ||
|
|
||
| --static-files.transaction-senders | ||
| Store transaction senders in static files instead of the database. | ||
|
|
||
| When enabled, transaction senders will be written to static files on disk instead of the database. | ||
|
|
||
| Note: This setting can only be configured at genesis initialization. Once the node has been initialized, changing this flag requires re-syncing from scratch. | ||
|
|
||
| --proofs-history.storage-path <PROOFS_HISTORY_STORAGE_PATH> | ||
| The path to the storage DB for proofs history | ||
|
|
||
| --proofs-history.window <PROOFS_HISTORY_WINDOW> | ||
| The window to span blocks for proofs history. Value is the number of blocks. Default is 1 month of blocks based on 2 seconds block time. 30 * 24 * 60 * 60 / 2 = `1_296_000` | ||
|
|
||
| [default: 1296000] | ||
|
|
||
| Logging: | ||
| --log.stdout.format <FORMAT> | ||
| The format to use for logs written to stdout | ||
|
|
||
| Possible values: | ||
| - json: Represents JSON formatting for logs. This format outputs log records as JSON objects, making it suitable for structured logging | ||
| - log-fmt: Represents logfmt (key=value) formatting for logs. This format is concise and human-readable, typically used in command-line applications | ||
| - terminal: Represents terminal-friendly formatting for logs | ||
|
|
||
| [default: terminal] | ||
|
|
||
| --log.stdout.filter <FILTER> | ||
| The filter to use for logs written to stdout | ||
|
|
||
| [default: ] | ||
|
|
||
| --log.file.format <FORMAT> | ||
| The format to use for logs written to the log file | ||
|
|
||
| Possible values: | ||
| - json: Represents JSON formatting for logs. This format outputs log records as JSON objects, making it suitable for structured logging | ||
| - log-fmt: Represents logfmt (key=value) formatting for logs. This format is concise and human-readable, typically used in command-line applications | ||
| - terminal: Represents terminal-friendly formatting for logs | ||
|
|
||
| [default: terminal] | ||
|
|
||
| --log.file.filter <FILTER> | ||
| The filter to use for logs written to the log file | ||
|
|
||
| [default: debug] | ||
|
|
||
| --log.file.directory <PATH> | ||
| The path to put log files in | ||
|
|
||
| [default: <CACHE_DIR>/logs] | ||
|
|
||
| --log.file.name <NAME> | ||
| The prefix name of the log files | ||
|
|
||
| [default: reth.log] | ||
|
|
||
| --log.file.max-size <SIZE> | ||
| The maximum size (in MB) of one log file | ||
|
|
||
| [default: 200] | ||
|
|
||
| --log.file.max-files <COUNT> | ||
| The maximum amount of log files that will be stored. If set to 0, background file logging is disabled | ||
|
|
||
| [default: 5] | ||
|
|
||
| --log.journald | ||
| Write logs to journald | ||
|
|
||
| --log.journald.filter <FILTER> | ||
| The filter to use for logs written to journald | ||
|
|
||
| [default: error] | ||
|
|
||
| --color <COLOR> | ||
| Sets whether or not the formatter emits ANSI terminal escape codes for colors and other text formatting | ||
|
|
||
| Possible values: | ||
| - always: Colors on | ||
| - auto: Auto-detect | ||
| - never: Colors off | ||
|
|
||
| [default: always] | ||
|
|
||
| Display: | ||
| -v, --verbosity... | ||
| Set the minimum log level. | ||
|
|
||
| -v Errors | ||
| -vv Warnings | ||
| -vvv Info | ||
| -vvvv Debug | ||
| -vvvvv Traces (warning: very verbose!) | ||
|
|
||
| -q, --quiet | ||
| Silence all log output | ||
|
|
||
| Tracing: | ||
| --tracing-otlp[=<URL>] | ||
| Enable `Opentelemetry` tracing export to an OTLP endpoint. | ||
|
|
||
| If no value provided, defaults based on protocol: - HTTP: `http://localhost:4318/v1/traces` - gRPC: `http://localhost:4317` | ||
|
|
||
| Example: --tracing-otlp=http://collector:4318/v1/traces | ||
|
|
||
| [env: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=] | ||
|
|
||
| --tracing-otlp-protocol <PROTOCOL> | ||
| OTLP transport protocol to use for exporting traces. | ||
|
|
||
| - `http`: expects endpoint path to end with `/v1/traces` - `grpc`: expects endpoint without a path | ||
|
|
||
| Defaults to HTTP if not specified. | ||
|
|
||
| Possible values: | ||
| - http: HTTP/Protobuf transport, port 4318, requires `/v1/traces` path | ||
| - grpc: gRPC transport, port 4317 | ||
|
|
||
| [env: OTEL_EXPORTER_OTLP_PROTOCOL=] | ||
| [default: http] | ||
|
|
||
| --tracing-otlp.filter <FILTER> | ||
| Set a filter directive for the OTLP tracer. This controls the verbosity of spans and events sent to the OTLP endpoint. It follows the same syntax as the `RUST_LOG` environment variable. | ||
|
|
||
| Example: --tracing-otlp.filter=info,reth=debug,hyper_util=off | ||
|
|
||
| Defaults to TRACE if not specified. | ||
|
|
||
| [default: debug] | ||
|
|
||
| --tracing-otlp.sample-ratio <RATIO> | ||
| Trace sampling ratio to control the percentage of traces to export. | ||
|
|
||
| Valid range: 0.0 to 1.0 - 1.0, default: Sample all traces - 0.01: Sample 1% of traces - 0.0: Disable sampling | ||
|
|
||
| Example: --tracing-otlp.sample-ratio=0.0. | ||
|
|
||
| [env: OTEL_TRACES_SAMPLER_ARG=] | ||
| ``` | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.