From 038f48855dc26e1daf25940fee6b7fc7dd02328c Mon Sep 17 00:00:00 2001 From: "Nicolas \"Norswap\" Laurent" Date: Mon, 15 Jan 2024 01:51:24 +0100 Subject: [PATCH] simplify clean logic and make sure it deletes archived log files --- account_abstraction.py | 15 ++++----------- block_explorer.py | 16 ++++------------ l1.py | 24 +++++++----------------- l2.py | 31 +++++++++++-------------------- l2_engine.py | 4 +--- l2_node.py | 9 +++++---- libroll/libroll.py | 25 +++++++++++++++++++++++++ roll.py | 2 +- 8 files changed, 58 insertions(+), 68 deletions(-) diff --git a/account_abstraction.py b/account_abstraction.py index e4573bc..8f905ed 100644 --- a/account_abstraction.py +++ b/account_abstraction.py @@ -207,23 +207,16 @@ def clean(config: Config): """ Deletes the account abstraction deployment outputs and build logs. """ - paths = [ + lib.remove_paths(config, [ os.path.join(config.logs_dir, "build_aa_contracts.log"), os.path.join(config.logs_dir, "install_bundler.log"), os.path.join(config.logs_dir, "build_paymaster.log"), os.path.join(config.logs_dir, config.deploy_aa_log_file_name), config.stackup_bundler_log_file, config.paymaster_log_file, - ] - - for path in paths: - if os.path.exists(path): - lib.debug(f"Removing {path}") - os.remove(path) - - path = "account-abstraction/deployments/opstack" - lib.debug(f"Removing {path}") - shutil.rmtree(path, ignore_errors=True) + # dirs + "account-abstraction/deployments/opstack", + ]) #################################################################################################### diff --git a/block_explorer.py b/block_explorer.py index 7ecae10..8fd29c3 100644 --- a/block_explorer.py +++ b/block_explorer.py @@ -150,22 +150,14 @@ def clean(config: Config): """ Deletes the block explorer databases, logs, and containers. """ - - dir_paths = [ + lib.remove_paths(config, [ + config.blockscout_log_file, + # dirs "blockscout/docker-compose/services/blockscout-db-data", "blockscout/docker-compose/services/logs", "blockscout/docker-compose/services/redis-data", "blockscout/docker-compose/services/stats-db-data", - ] - - for path in dir_paths: - lib.debug(f"Removing {path}") - shutil.rmtree(path, ignore_errors=True) - - path = config.blockscout_log_file - if os.path.exists(path): - lib.debug(f"Removing {path}") - os.remove(path) + ]) lib.run("remove blockscout containers", f"docker compose --project-name {_COMPOSE_PROJECT_NAME} rm --stop --force") diff --git a/l1.py b/l1.py index 57d6aed..1349a56 100644 --- a/l1.py +++ b/l1.py @@ -247,26 +247,16 @@ def clean(config: Config): """ Cleans up L1 deployment outputs. """ - paths = [ - os.path.join(config.logs_dir, "l1_node.log"), + lib.remove_paths(config, [ + config.l1_node_log_file, os.path.join(config.logs_dir, "temp_geth.log"), config.l1_genesis_path, config.l1_allocs_path, - config.op_deploy_config_path - ] - - for path in paths: - if os.path.exists(path): - lib.debug(f"Removing {path}") - os.remove(path) - - if os.path.exists(config.l1_data_dir): - lib.debug(f"Removing {config.l1_data_dir}") - shutil.rmtree(config.l1_data_dir, ignore_errors=True) - - if os.path.exists(config.op_deployment_artifacts_dir): - lib.debug(f"Removing {config.op_deployment_artifacts_dir}") - shutil.rmtree(config.op_deployment_artifacts_dir, ignore_errors=True) + config.op_deploy_config_path, + # dirs + config.l1_data_dir, + config.op_deployment_artifacts_dir, + ]) if config.l1_contracts_in_genesis: print( diff --git a/l2.py b/l2.py index 17294f1..f96d890 100644 --- a/l2.py +++ b/l2.py @@ -70,7 +70,7 @@ def clean(config: Config): """ Cleans up L2 deployment outputs. """ - paths = [ + lib.remove_paths(config, [ config.addresses_path, config.l2_genesis_path, config.rollup_config_path, @@ -80,27 +80,18 @@ def clean(config: Config): config.op_deploy_config_path, os.path.join(config.logs_dir, "deploy_l1_contracts.log"), os.path.join(config.logs_dir, "create_l1_artifacts.log"), - os.path.join(config.logs_dir, "l2_batcher.log"), - os.path.join(config.logs_dir, "l2_engine.log"), - os.path.join(config.logs_dir, "l2_node.log"), - os.path.join(config.logs_dir, "l2_proposer.log") - ] - - for path in paths: - if os.path.exists(path): - lib.debug(f"Removing {path}") - os.remove(path) + os.path.join(config.logs_dir, "init_l2_genesis.log"), + config.l2_batcher_log_file, + config.l2_engine_log_file, + config.l2_node_log_file, + config.l2_proposer_log_file, + # dirs + config.op_deployment_artifacts_dir, + config.abi_dir, + ]) l2_engine.clean(config) - l2_node.clean() - - if os.path.exists(config.op_deployment_artifacts_dir): - lib.debug(f"Removing {config.op_deployment_artifacts_dir}") - shutil.rmtree(config.op_deployment_artifacts_dir, ignore_errors=True) - - if os.path.exists(config.abi_dir): - lib.debug(f"Removing {config.abi_dir}") - shutil.rmtree(config.abi_dir, ignore_errors=True) + l2_node.clean(config) #################################################################################################### diff --git a/l2_engine.py b/l2_engine.py index ae08034..e88796b 100644 --- a/l2_engine.py +++ b/l2_engine.py @@ -117,8 +117,6 @@ def clean(config: Config): """ Cleans up L2 execution engine's databases. """ - if os.path.exists(config.l2_engine_data_dir): - lib.debug(f"Removing {config.l2_engine_data_dir}") - shutil.rmtree(config.l2_engine_data_dir, ignore_errors=True) + lib.remove_paths(config, [config.l2_engine_data_dir]) #################################################################################################### diff --git a/l2_node.py b/l2_node.py index 1739bed..d9141d2 100644 --- a/l2_node.py +++ b/l2_node.py @@ -90,13 +90,14 @@ def on_exit(): #################################################################################################### -def clean(): +def clean(config: Config): """ Delete the L2 node's p2p databases. """ - lib.debug("Removing L2 node's p2p databases") - shutil.rmtree("opnode_discovery_db", ignore_errors=True) - shutil.rmtree("opnode_peerstore_db", ignore_errors=True) + lib.remove_paths(config, [ + "opnode_discovery_db", + "opnode_peerstore_db", + ]) #################################################################################################### diff --git a/libroll/libroll.py b/libroll/libroll.py index 4c5b0b9..2995193 100644 --- a/libroll/libroll.py +++ b/libroll/libroll.py @@ -1,11 +1,14 @@ +import glob import http.client import os +import shutil import socket import time from dataclasses import dataclass from typing import Callable import state +from config import Config from .cmd import run_roll_log @@ -284,4 +287,26 @@ def append_to_file(file_path: str, text: str): with open(file_path, "a") as file: file.write(text) + +#################################################################################################### + +def remove_paths(config: Config, paths: list[str]): + """ + Removes the given paths, if they exist, as well as archived logs if one of the passed path is + a logfile. + """ + for path in paths: + if os.path.isfile(path): + debug(f"Removing {path}") + os.remove(path) + if path.startswith(config.logs_dir): + basename = os.path.basename(path) + debug(f"Removing archived logs for {basename}") + archived_logs = glob.glob(os.path.join(config.logrotate_old_dir, basename) + "*") + for log in archived_logs: + os.remove(log) + elif os.path.isdir(path): + debug(f"Removing {path}") + shutil.rmtree(path, ignore_errors=True) + #################################################################################################### diff --git a/roll.py b/roll.py index a1bac68..8f00980 100755 --- a/roll.py +++ b/roll.py @@ -388,7 +388,7 @@ def main(): elif state.args.command == "l2-sequencer": if state.args.clean_first: - l2_node.clean() + l2_node.clean(config) l2_node.start(config, sequencer=True) wait(config)