From 2289b20bca69ef619fd34b6e658f8f6e99f9180d Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Fri, 9 Sep 2022 17:40:21 +1000 Subject: [PATCH] Implement DB manager command --- database_manager/src/lib.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/database_manager/src/lib.rs b/database_manager/src/lib.rs index 50295df4b0..20147adb9f 100644 --- a/database_manager/src/lib.rs +++ b/database_manager/src/lib.rs @@ -59,6 +59,12 @@ pub fn inspect_cli_app<'a, 'b>() -> App<'a, 'b> { ) } +pub fn prune_payloads_app<'a, 'b>() -> App<'a, 'b> { + App::new("prune_payloads") + .setting(clap::AppSettings::ColoredHelp) + .about("Prune finalized execution payloads") +} + pub fn cli_app<'a, 'b>() -> App<'a, 'b> { App::new(CMD) .visible_aliases(&["db"]) @@ -85,6 +91,7 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> { .subcommand(migrate_cli_app()) .subcommand(version_cli_app()) .subcommand(inspect_cli_app()) + .subcommand(prune_payloads_app()) } fn parse_client_config( @@ -257,6 +264,30 @@ pub fn migrate_db( ) } +pub fn prune_payloads( + client_config: ClientConfig, + runtime_context: &RuntimeContext, + log: Logger, +) -> Result<(), Error> { + let spec = &runtime_context.eth2_config.spec; + let hot_path = client_config.get_db_path(); + let cold_path = client_config.get_freezer_db_path(); + + let db = HotColdDB::, LevelDB>::open( + &hot_path, + &cold_path, + |_, _, _| Ok(()), + client_config.store, + spec.clone(), + log, + )?; + + // If we're trigging a prune manually then ignore the check on the split's parent that bails + // out early. + let force = true; + db.try_prune_execution_payloads(force) +} + /// Run the database manager, returning an error string if the operation did not succeed. pub fn run(cli_args: &ArgMatches<'_>, mut env: Environment) -> Result<(), String> { let client_config = parse_client_config(cli_args, &env)?; @@ -273,6 +304,7 @@ pub fn run(cli_args: &ArgMatches<'_>, mut env: Environment) -> Re let inspect_config = parse_inspect_config(cli_args)?; inspect_db(inspect_config, client_config, &context, log) } + ("prune_payloads", Some(_)) => prune_payloads(client_config, &context, log), _ => { return Err("Unknown subcommand, for help `lighthouse database_manager --help`".into()) }