From 69da8f04fcfd5ce19365bd89ca73c13cbc40d76a Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Tue, 9 Jan 2024 11:19:36 +0100 Subject: [PATCH] feat: add pitfalls for persistent storage as a warning (#441) --- README.md | 23 ++++++ src/cl/lighthouse/lighthouse_launcher.star | 15 ++++ src/cl/lodestar/lodestar_launcher.star | 18 ++++- src/cl/nimbus/nimbus_launcher.star | 18 ++++- src/cl/prysm/prysm_launcher.star | 17 ++++- src/cl/teku/teku_launcher.star | 18 ++++- src/el/besu/besu_launcher.star | 15 ++++ src/el/erigon/erigon_launcher.star | 16 +++++ src/el/ethereumjs/ethereumjs_launcher.star | 17 ++++- src/el/geth/geth_launcher.star | 15 ++++ src/el/nethermind/nethermind_launcher.star | 15 ++++ src/el/reth/reth_launcher.star | 15 ++++ src/package_io/constants.star | 81 ++++++++++++++++++++++ src/package_io/input_parser.star | 4 ++ src/participant_network.star | 3 + 15 files changed, 285 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e86aa9ad6..09eae396a 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,19 @@ Where `network_params.yaml` contains the parameters for your network in your hom Kurtosis packages work the same way over Docker or on Kubernetes. Please visit our [Kubernetes docs](https://docs.kurtosis.com/k8s) to learn how to spin up a private testnet on a Kubernetes cluster. +#### Considerations for Running on a Public Testnet with a Cloud Provider +When running on a public testnet using a cloud provider's Kubernetes cluster, there are a few important factors to consider: + +1. State Growth: The growth of the state might be faster than anticipated. This could potentially lead to issues if the default parameters become insufficient over time. It's important to monitor state growth and adjust parameters as necessary. + +2. Persistent Storage Speed: Most cloud providers provision their Kubernetes clusters with relatively slow persistent storage by default. This can cause performance issues, particularly with Ethereum Light (EL) clients. + +3. Network Syncing: The disk speed provided by cloud providers may not be sufficient to sync with networks that have high demands, such as the mainnet. This could lead to syncing issues and delays. + +To mitigate these issues, you can use the `el_client_volume_size` and `cl_client_volume_size` flags to override the default settings locally. This allows you to allocate more storage to the EL and CL clients, which can help accommodate faster state growth and improve syncing performance. However, keep in mind that increasing the volume size may also increase your cloud provider costs. Always monitor your usage and adjust as necessary to balance performance and cost. + +For optimal performance, we recommend using a cloud provider that allows you to provision Kubernetes clusters with fast persistent storage or self hosting your own Kubernetes cluster with fast persistent storage. + #### Tear down The testnet will reside in an [enclave][enclave] - an isolated, ephemeral environment. The enclave and its contents (e.g. running containers, files artifacts, etc) will persist until torn down. You can remove an enclave and its contents with: @@ -125,6 +138,11 @@ participants: # A list of optional extra env_vars the el container should spin up with el_extra_env_vars: {} + # Persistent storage size for the EL client container (in MB) + # Defaults to 0, which means that the default size for the client will be used + # Default values can be found in /src/package_io/constants.star VOLUME_SIZE + el_client_volume_size: 0 + # A list of optional extra labels the el container should spin up with # Example; el_extra_labels: {"ethereum-package.partition": "1"} el_extra_labels: {} @@ -154,6 +172,11 @@ participants: # Defaults to false cl_split_mode_enabled: false + # Persistent storage size for the CL client container (in MB) + # Defaults to 0, which means that the default size for the client will be used + # Default values can be found in /src/package_io/constants.star VOLUME_SIZE + cl_client_volume_size: 0 + # A list of optional extra params that will be passed to the CL client Beacon container for modifying its behaviour # If the client combines the Beacon & validator nodes (e.g. Teku, Nimbus), then this list will be passed to the combined Beacon-validator node beacon_extra_params: [] diff --git a/src/cl/lighthouse/lighthouse_launcher.star b/src/cl/lighthouse/lighthouse_launcher.star index e76d1ddf6..1b6f1f552 100644 --- a/src/cl/lighthouse/lighthouse_launcher.star +++ b/src/cl/lighthouse/lighthouse_launcher.star @@ -120,6 +120,7 @@ def launch( extra_beacon_labels, extra_validator_labels, persistent, + cl_volume_size, split_mode_enabled=False, ): beacon_service_name = "{0}".format(service_name) @@ -135,6 +136,17 @@ def launch( bn_max_cpu = int(bn_max_cpu) if int(bn_max_cpu) > 0 else BEACON_MAX_CPU bn_min_mem = int(bn_min_mem) if int(bn_min_mem) > 0 else BEACON_MIN_MEMORY bn_max_mem = int(bn_max_mem) if int(bn_max_mem) > 0 else BEACON_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + cl_volume_size = ( + int(cl_volume_size) + if int(cl_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["lighthouse_volume_size"] + ) # Launch Beacon node beacon_config = get_beacon_config( @@ -156,6 +168,7 @@ def launch( extra_beacon_params, extra_beacon_labels, persistent, + cl_volume_size, ) beacon_service = plan.add_service(beacon_service_name, beacon_config) @@ -283,6 +296,7 @@ def get_beacon_config( extra_params, extra_labels, persistent, + cl_volume_size, ): # If snooper is enabled use the snooper engine context, otherwise use the execution client context if snooper_enabled: @@ -390,6 +404,7 @@ def get_beacon_config( if persistent: files[BEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER] = Directory( persistent_key="data-{0}".format(service_name), + size=cl_volume_size, ) return ServiceConfig( image=image, diff --git a/src/cl/lodestar/lodestar_launcher.star b/src/cl/lodestar/lodestar_launcher.star index 9faa4ad08..d6abc2f3b 100644 --- a/src/cl/lodestar/lodestar_launcher.star +++ b/src/cl/lodestar/lodestar_launcher.star @@ -99,6 +99,7 @@ def launch( extra_beacon_labels, extra_validator_labels, persistent, + cl_volume_size, split_mode_enabled=False, ): beacon_service_name = "{0}".format(service_name) @@ -114,6 +115,18 @@ def launch( bn_min_mem = int(bn_min_mem) if int(bn_min_mem) > 0 else BEACON_MIN_MEMORY bn_max_mem = int(bn_max_mem) if int(bn_max_mem) > 0 else BEACON_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + cl_volume_size = ( + int(cl_volume_size) + if int(cl_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["lodestar_volume_size"] + ) + # Launch Beacon node beacon_config = get_beacon_config( plan, @@ -134,6 +147,7 @@ def launch( extra_beacon_params, extra_beacon_labels, persistent, + cl_volume_size, ) beacon_service = plan.add_service(beacon_service_name, beacon_config) @@ -253,6 +267,7 @@ def get_beacon_config( extra_params, extra_labels, persistent, + cl_volume_size, ): el_client_rpc_url_str = "http://{0}:{1}".format( el_client_context.ip_addr, @@ -344,7 +359,8 @@ def get_beacon_config( if persistent: files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory( - persistent_key="data-{0}".format(service_name) + persistent_key="data-{0}".format(service_name), + size=cl_volume_size, ) return ServiceConfig( image=image, diff --git a/src/cl/nimbus/nimbus_launcher.star b/src/cl/nimbus/nimbus_launcher.star index 55a33bc5a..afc69792a 100644 --- a/src/cl/nimbus/nimbus_launcher.star +++ b/src/cl/nimbus/nimbus_launcher.star @@ -138,6 +138,7 @@ def launch( extra_beacon_labels, extra_validator_labels, persistent, + cl_volume_size, split_mode_enabled, ): beacon_service_name = "{0}".format(service_name) @@ -161,6 +162,18 @@ def launch( bn_min_mem = int(bn_min_mem) if int(bn_min_mem) > 0 else BEACON_MIN_MEMORY bn_max_mem = int(bn_max_mem) if int(bn_max_mem) > 0 else BEACON_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + cl_volume_size = ( + int(cl_volume_size) + if int(cl_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["nimbus_volume_size"] + ) + beacon_config = get_beacon_config( plan, launcher.el_cl_genesis_data, @@ -182,6 +195,7 @@ def launch( extra_beacon_labels, split_mode_enabled, persistent, + cl_volume_size, ) beacon_service = plan.add_service(beacon_service_name, beacon_config) @@ -291,6 +305,7 @@ def get_beacon_config( extra_labels, split_mode_enabled, persistent, + cl_volume_size, ): validator_keys_dirpath = "" validator_secrets_dirpath = "" @@ -392,7 +407,8 @@ def get_beacon_config( if persistent: files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory( - persistent_key="data-{0}".format(service_name) + persistent_key="data-{0}".format(service_name), + size=cl_volume_size, ) return ServiceConfig( diff --git a/src/cl/prysm/prysm_launcher.star b/src/cl/prysm/prysm_launcher.star index 19962e5b3..3cdbe1132 100644 --- a/src/cl/prysm/prysm_launcher.star +++ b/src/cl/prysm/prysm_launcher.star @@ -111,6 +111,7 @@ def launch( extra_beacon_labels, extra_validator_labels, persistent, + cl_volume_size, split_mode_enabled=False, ): split_images = images.split(IMAGE_SEPARATOR_DELIMITER) @@ -140,6 +141,17 @@ def launch( bn_max_cpu = int(bn_max_cpu) if int(bn_max_cpu) > 0 else BEACON_MAX_CPU bn_min_mem = int(bn_min_mem) if int(bn_min_mem) > 0 else BEACON_MIN_MEMORY bn_max_mem = int(bn_max_mem) if int(bn_max_mem) > 0 else BEACON_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + cl_volume_size = ( + int(cl_volume_size) + if int(cl_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["prysm_volume_size"] + ) beacon_config = get_beacon_config( plan, @@ -160,6 +172,7 @@ def launch( extra_beacon_params, extra_beacon_labels, persistent, + cl_volume_size, ) beacon_service = plan.add_service(beacon_service_name, beacon_config) @@ -271,6 +284,7 @@ def get_beacon_config( extra_params, extra_labels, persistent, + cl_volume_size, ): # If snooper is enabled use the snooper engine context, otherwise use the execution client context if snooper_enabled: @@ -350,7 +364,8 @@ def get_beacon_config( if persistent: files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory( - persistent_key="data-{0}".format(service_name) + persistent_key="data-{0}".format(service_name), + size=cl_volume_size, ) return ServiceConfig( diff --git a/src/cl/teku/teku_launcher.star b/src/cl/teku/teku_launcher.star index 917ceefb3..71608ea33 100644 --- a/src/cl/teku/teku_launcher.star +++ b/src/cl/teku/teku_launcher.star @@ -124,6 +124,7 @@ def launch( extra_beacon_labels, extra_validator_labels, persistent, + cl_volume_size, split_mode_enabled, ): beacon_service_name = "{0}".format(service_name) @@ -143,6 +144,18 @@ def launch( bn_min_mem = int(bn_min_mem) if int(bn_min_mem) > 0 else BEACON_MIN_MEMORY bn_max_mem = int(bn_max_mem) if int(bn_max_mem) > 0 else BEACON_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + cl_volume_size = ( + int(cl_volume_size) + if int(cl_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["teku_volume_size"] + ) + config = get_beacon_config( plan, launcher.el_cl_genesis_data, @@ -164,6 +177,7 @@ def launch( extra_beacon_labels, split_mode_enabled, persistent, + cl_volume_size, ) beacon_service = plan.add_service(service_name, config) @@ -276,6 +290,7 @@ def get_beacon_config( extra_labels, split_mode_enabled, persistent, + cl_volume_size, ): validator_keys_dirpath = "" validator_secrets_dirpath = "" @@ -399,7 +414,8 @@ def get_beacon_config( if persistent: files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory( - persistent_key="data-{0}".format(service_name) + persistent_key="data-{0}".format(service_name), + size=cl_volume_size, ) return ServiceConfig( image=image, diff --git a/src/el/besu/besu_launcher.star b/src/el/besu/besu_launcher.star index b7c2b6eca..e39a36374 100644 --- a/src/el/besu/besu_launcher.star +++ b/src/el/besu/besu_launcher.star @@ -75,6 +75,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ): log_level = input_parser.get_client_log_level_or_default( participant_log_level, global_log_level, BESU_LOG_LEVELS @@ -84,6 +85,17 @@ def launch( el_max_cpu = int(el_max_cpu) if int(el_max_cpu) > 0 else EXECUTION_MAX_CPU el_min_mem = int(el_min_mem) if int(el_min_mem) > 0 else EXECUTION_MIN_MEMORY el_max_mem = int(el_max_mem) if int(el_max_mem) > 0 else EXECUTION_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + el_volume_size = ( + el_volume_size + if int(el_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["besu_volume_size"] + ) cl_client_name = service_name.split("-")[3] @@ -105,6 +117,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ) service = plan.add_service(service_name, config) @@ -147,6 +160,7 @@ def get_config( extra_env_vars, extra_labels, persistent, + el_volume_size, ): cmd = [ "besu", @@ -219,6 +233,7 @@ def get_config( if persistent: files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory( persistent_key="data-{0}".format(service_name), + size=el_volume_size, ) return ServiceConfig( image=image, diff --git a/src/el/erigon/erigon_launcher.star b/src/el/erigon/erigon_launcher.star index f5651327e..3f47d1001 100644 --- a/src/el/erigon/erigon_launcher.star +++ b/src/el/erigon/erigon_launcher.star @@ -77,6 +77,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ): log_level = input_parser.get_client_log_level_or_default( participant_log_level, global_log_level, ERIGON_LOG_LEVELS @@ -87,6 +88,18 @@ def launch( el_min_mem = el_min_mem if int(el_min_mem) > 0 else EXECUTION_MIN_MEMORY el_max_mem = el_max_mem if int(el_max_mem) > 0 else EXECUTION_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + el_volume_size = ( + el_volume_size + if int(el_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["erigon_volume_size"] + ) + cl_client_name = service_name.split("-")[3] config = get_config( @@ -107,6 +120,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ) service = plan.add_service(service_name, config) @@ -151,6 +165,7 @@ def get_config( extra_env_vars, extra_labels, persistent, + el_volume_size, ): init_datadir_cmd_str = "erigon init --datadir={0} {1}".format( EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER, @@ -237,6 +252,7 @@ def get_config( if persistent: files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory( persistent_key="data-{0}".format(service_name), + size=el_volume_size, ) return ServiceConfig( image=image, diff --git a/src/el/ethereumjs/ethereumjs_launcher.star b/src/el/ethereumjs/ethereumjs_launcher.star index 4e731d758..a0a391a42 100644 --- a/src/el/ethereumjs/ethereumjs_launcher.star +++ b/src/el/ethereumjs/ethereumjs_launcher.star @@ -70,7 +70,6 @@ def launch( image, participant_log_level, global_log_level, - # If empty then the node will be launched as a bootnode existing_el_clients, el_min_cpu, el_max_cpu, @@ -80,6 +79,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ): log_level = input_parser.get_client_log_level_or_default( participant_log_level, global_log_level, VERBOSITY_LEVELS @@ -90,6 +90,18 @@ def launch( el_min_mem = el_min_mem if int(el_min_mem) > 0 else EXECUTION_MIN_MEMORY el_max_mem = el_max_mem if int(el_max_mem) > 0 else EXECUTION_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + el_volume_size = ( + el_volume_size + if int(el_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["ethereumjs_volume_size"] + ) + cl_client_name = service_name.split("-")[3] config = get_config( @@ -110,6 +122,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ) service = plan.add_service(service_name, config) @@ -151,6 +164,7 @@ def get_config( extra_env_vars, extra_labels, persistent, + el_volume_size, ): cmd = [ "--dataDir=" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER, @@ -214,6 +228,7 @@ def get_config( if persistent: files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory( persistent_key="data-{0}".format(service_name), + size=el_volume_size, ) return ServiceConfig( image=image, diff --git a/src/el/geth/geth_launcher.star b/src/el/geth/geth_launcher.star index 00bca8bd9..e7d013fed 100644 --- a/src/el/geth/geth_launcher.star +++ b/src/el/geth/geth_launcher.star @@ -87,6 +87,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ): log_level = input_parser.get_client_log_level_or_default( participant_log_level, global_log_level, VERBOSITY_LEVELS @@ -95,6 +96,17 @@ def launch( el_max_cpu = el_max_cpu if int(el_max_cpu) > 0 else EXECUTION_MAX_CPU el_min_mem = el_min_mem if int(el_min_mem) > 0 else EXECUTION_MIN_MEMORY el_max_mem = el_max_mem if int(el_max_mem) > 0 else EXECUTION_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + el_volume_size = ( + el_volume_size + if int(el_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["geth_volume_size"] + ) cl_client_name = service_name.split("-")[3] @@ -119,6 +131,7 @@ def launch( launcher.electra_fork_epoch, launcher.final_genesis_timestamp, persistent, + el_volume_size, ) service = plan.add_service(service_name, config) @@ -166,6 +179,7 @@ def get_config( electra_fork_epoch, final_genesis_timestamp, persistent, + el_volume_size, ): # TODO: Remove this once electra fork has path based storage scheme implemented if electra_fork_epoch != None or "verkle" in network: @@ -296,6 +310,7 @@ def get_config( if persistent: files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory( persistent_key="data-{0}".format(service_name), + size=el_volume_size, ) return ServiceConfig( image=image, diff --git a/src/el/nethermind/nethermind_launcher.star b/src/el/nethermind/nethermind_launcher.star index 61feaec94..0c7bdd8b4 100644 --- a/src/el/nethermind/nethermind_launcher.star +++ b/src/el/nethermind/nethermind_launcher.star @@ -75,6 +75,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ): log_level = input_parser.get_client_log_level_or_default( participant_log_level, global_log_level, NETHERMIND_LOG_LEVELS @@ -84,6 +85,17 @@ def launch( el_max_cpu = el_max_cpu if int(el_max_cpu) > 0 else EXECUTION_MAX_CPU el_min_mem = el_min_mem if int(el_min_mem) > 0 else EXECUTION_MIN_MEMORY el_max_mem = el_max_mem if int(el_max_mem) > 0 else EXECUTION_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + el_volume_size = ( + el_volume_size + if int(el_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["nethermind_volume_size"] + ) cl_client_name = service_name.split("-")[3] @@ -105,6 +117,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ) service = plan.add_service(service_name, config) @@ -148,6 +161,7 @@ def get_config( extra_env_vars, extra_labels, persistent, + el_volume_size, ): cmd = [ "--log=" + log_level, @@ -210,6 +224,7 @@ def get_config( if persistent: files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory( persistent_key="data-{0}".format(service_name), + size=el_volume_size, ) return ServiceConfig( diff --git a/src/el/reth/reth_launcher.star b/src/el/reth/reth_launcher.star index 41d1eb49a..17ff0bf33 100644 --- a/src/el/reth/reth_launcher.star +++ b/src/el/reth/reth_launcher.star @@ -78,6 +78,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ): log_level = input_parser.get_client_log_level_or_default( participant_log_level, global_log_level, VERBOSITY_LEVELS @@ -87,6 +88,17 @@ def launch( el_max_cpu = el_max_cpu if int(el_max_cpu) > 0 else EXECUTION_MAX_CPU el_min_mem = el_min_mem if int(el_min_mem) > 0 else EXECUTION_MIN_MEMORY el_max_mem = el_max_mem if int(el_max_mem) > 0 else EXECUTION_MAX_MEMORY + network_name = ( + "devnets" + if launcher.network != "kurtosis" + and launcher.network not in constants.PUBLIC_NETWORKS + else launcher.network + ) + el_volume_size = ( + el_volume_size + if int(el_volume_size) > 0 + else constants.VOLUME_SIZE[network_name]["reth_volume_size"] + ) cl_client_name = service_name.split("-")[3] @@ -108,6 +120,7 @@ def launch( extra_env_vars, extra_labels, persistent, + el_volume_size, ) service = plan.add_service(service_name, config) @@ -150,6 +163,7 @@ def get_config( extra_env_vars, extra_labels, persistent, + el_volume_size, ): init_datadir_cmd_str = "reth init --datadir={0} --chain={1}".format( EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER, @@ -226,6 +240,7 @@ def get_config( if persistent: files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory( persistent_key="data-{0}".format(service_name), + size=el_volume_size, ) return ServiceConfig( image=image, diff --git a/src/package_io/constants.star b/src/package_io/constants.star index 08824c874..34660efb7 100644 --- a/src/package_io/constants.star +++ b/src/package_io/constants.star @@ -79,3 +79,84 @@ GENESIS_TIME = { "sepolia": 1655733600, "holesky": 1695902400, } + +VOLUME_SIZE = { + "mainnet": { + "geth_volume_size": 1000000, # 1TB + "erigon_volume_size": 3000000, # 3TB + "nethermind_volume_size": 1000000, # 1TB + "besu_volume_size": 1000000, # 1TB + "reth_volume_size": 3000000, # 3TB + "ethereumjs_volume_size": 1000000, # 1TB + "prysm_volume_size": 500000, # 500GB + "lighthouse_volume_size": 500000, # 500GB + "teku_volume_size": 500000, # 500GB + "nimbus_volume_size": 500000, # 500GB + "lodestar_volume_size": 500000, # 500GB + }, + "goerli": { + "geth_volume_size": 800000, # 800GB + "erigon_volume_size": 1200000, # 1200GB + "nethermind_volume_size": 800000, # 800GB + "besu_volume_size": 800000, # 800GB + "reth_volume_size": 1200000, # 1200GB + "ethereumjs_volume_size": 800000, # 800GB + "prysm_volume_size": 300000, # 300GB + "lighthouse_volume_size": 300000, # 300GB + "teku_volume_size": 300000, # 300GB + "nimbus_volume_size": 300000, # 300GB + "lodestar_volume_size": 300000, # 300GB + }, + "sepolia": { + "geth_volume_size": 300000, # 300GB + "erigon_volume_size": 500000, # 500GB + "nethermind_volume_size": 300000, # 300GB + "besu_volume_size": 300000, # 300GB + "reth_volume_size": 500000, # 500GB + "ethereumjs_volume_size": 300000, # 300GB + "prysm_volume_size": 150000, # 150GB + "lighthouse_volume_size": 150000, # 150GB + "teku_volume_size": 150000, # 150GB + "nimbus_volume_size": 150000, # 150GB + "lodestar_volume_size": 150000, # 150GB + }, + "holesky": { + "geth_volume_size": 100000, # 100GB + "erigon_volume_size": 200000, # 200GB + "nethermind_volume_size": 100000, # 100GB + "besu_volume_size": 100000, # 100GB + "reth_volume_size": 200000, # 200GB + "ethereumjs_volume_size": 100000, # 100GB + "prysm_volume_size": 100000, # 100GB + "lighthouse_volume_size": 100000, # 100GB + "teku_volume_size": 100000, # 100GB + "nimbus_volume_size": 100000, # 100GB + "lodestar_volume_size": 100000, # 100GB + }, + "devnets": { + "geth_volume_size": 100000, # 100GB + "erigon_volume_size": 200000, # 200GB + "nethermind_volume_size": 100000, # 100GB + "besu_volume_size": 100000, # 100GB + "reth_volume_size": 200000, # 200GB + "ethereumjs_volume_size": 100000, # 100GB + "prysm_volume_size": 100000, # 100GB + "lighthouse_volume_size": 100000, # 100GB + "teku_volume_size": 100000, # 100GB + "nimbus_volume_size": 100000, # 100GB + "lodestar_volume_size": 100000, # 100GB + }, + "kurtosis": { + "geth_volume_size": 3000, # 3GB + "erigon_volume_size": 3000, # 3GB + "nethermind_volume_size": 3000, # 3GB + "besu_volume_size": 3000, # 3GB + "reth_volume_size": 3000, # 3GB + "ethereumjs_volume_size": 3000, # 3GB + "prysm_volume_size": 1000, # 1GB + "lighthouse_volume_size": 1000, # 1GB + "teku_volume_size": 1000, # 1GB + "nimbus_volume_size": 1000, # 1GB + "lodestar_volume_size": 1000, # 1GB + }, +} diff --git a/src/package_io/input_parser.star b/src/package_io/input_parser.star index 0d397a40a..1d75e64f7 100644 --- a/src/package_io/input_parser.star +++ b/src/package_io/input_parser.star @@ -123,12 +123,14 @@ def input_parser(plan, input_args): el_client_type=participant["el_client_type"], el_client_image=participant["el_client_image"], el_client_log_level=participant["el_client_log_level"], + el_client_volume_size=participant["el_client_volume_size"], el_extra_params=participant["el_extra_params"], el_extra_env_vars=participant["el_extra_env_vars"], el_extra_labels=participant["el_extra_labels"], cl_client_type=participant["cl_client_type"], cl_client_image=participant["cl_client_image"], cl_client_log_level=participant["cl_client_log_level"], + cl_client_volume_size=participant["cl_client_volume_size"], cl_split_mode_enabled=participant["cl_split_mode_enabled"], beacon_extra_params=participant["beacon_extra_params"], beacon_extra_labels=participant["beacon_extra_labels"], @@ -445,12 +447,14 @@ def default_participant(): "el_client_type": "geth", "el_client_image": "", "el_client_log_level": "", + "el_client_volume_size": 0, "el_extra_params": [], "el_extra_env_vars": {}, "el_extra_labels": {}, "cl_client_type": "lighthouse", "cl_client_image": "", "cl_client_log_level": "", + "cl_client_volume_size": 0, "cl_split_mode_enabled": False, "beacon_extra_params": [], "beacon_extra_labels": {}, diff --git a/src/participant_network.star b/src/participant_network.star index 2c854938a..175d5c731 100644 --- a/src/participant_network.star +++ b/src/participant_network.star @@ -290,6 +290,7 @@ def launch_participant_network( participant.el_extra_env_vars, participant.el_extra_labels, persistent, + participant.el_client_volume_size, ) # Add participant el additional prometheus metrics @@ -435,6 +436,7 @@ def launch_participant_network( participant.beacon_extra_labels, participant.validator_extra_labels, persistent, + participant.cl_client_volume_size, participant.cl_split_mode_enabled, ) else: @@ -466,6 +468,7 @@ def launch_participant_network( participant.beacon_extra_labels, participant.validator_extra_labels, persistent, + participant.cl_client_volume_size, participant.cl_split_mode_enabled, )