diff --git a/ci/testnet-deploy.sh b/ci/testnet-deploy.sh index ea06fe9f4..8a8bcb615 100755 --- a/ci/testnet-deploy.sh +++ b/ci/testnet-deploy.sh @@ -28,6 +28,7 @@ maybeStakeNodesInGenesisBlock= maybeExternalPrimordialAccountsFile= maybeLamports= maybeLetsEncrypt= +maybeFullnodeAdditionalDiskSize= usage() { exitcode=0 @@ -80,6 +81,8 @@ Deploys a CD testnet - If set, will not fetch logs from remote nodes --letsencrypt [dns name] - Attempt to generate a TLS certificate using this DNS name + --fullnode-additional-disk-size-gb [number] + - Size of additional disk in GB for all fullnodes Note: the SOLANA_METRICS_CONFIG environment variable is used to configure metrics @@ -113,6 +116,9 @@ while [[ -n $1 ]]; do elif [[ $1 = --letsencrypt ]]; then maybeLetsEncrypt="$1 $2" shift 2 + elif [[ $1 = --fullnode-additional-disk-size-gb ]]; then + maybeFullnodeAdditionalDiskSize="$1 $2" + shift 2 else usage "Unknown long option: $1" fi @@ -292,6 +298,11 @@ if ! $skipCreate; then create_args+=(-f) fi + if [[ -n $maybeFullnodeAdditionalDiskSize ]]; then + # shellcheck disable=SC2206 # Do not want to quote + create_args+=($maybeFullnodeAdditionalDiskSize) + fi + time net/"$cloudProvider".sh create "${create_args[@]}" else echo "--- $cloudProvider.sh config" diff --git a/multinode-demo/common.sh b/multinode-demo/common.sh index 1f2c7e07c..139a9556f 100644 --- a/multinode-demo/common.sh +++ b/multinode-demo/common.sh @@ -70,7 +70,12 @@ source "$SOLANA_ROOT"/scripts/configure-metrics.sh SOLANA_RSYNC_CONFIG_DIR=$SOLANA_ROOT/config # Configuration that remains local -SOLANA_CONFIG_DIR=$SOLANA_ROOT/config-local +SECONDARY_DISK_MOUNT_POINT=/mnt/extra-disk +if [[ -d $SECONDARY_DISK_MOUNT_POINT ]]; then + SOLANA_CONFIG_DIR=$SECONDARY_DISK_MOUNT_POINT/config-local +else + SOLANA_CONFIG_DIR=$SOLANA_ROOT/config-local +fi default_arg() { declare name=$1 diff --git a/net/gce.sh b/net/gce.sh index f366f6652..09c7834d5 100755 --- a/net/gce.sh +++ b/net/gce.sh @@ -63,6 +63,7 @@ blockstreamer=false fullNodeBootDiskSizeInGb=1000 clientBootDiskSizeInGb=75 replicatorBootDiskSizeInGb=1000 +fullNodeAdditionalDiskSizeInGb= externalNodes=false failOnValidatorBootupFailure=true @@ -126,7 +127,10 @@ Manage testnet instances --letsencrypt [dns name] - Attempt to generate a TLS certificate using this DNS name (useful only when the -a and -P options are also provided) - + --fullnode-additional-disk-size-gb [number] + - Add an additional [number] GB SSD to all fullnodes to store the config-local directory. + If not set, config-local will be written to the boot disk by default. + Only supported on GCE. config-specific options: -P - Use public network IP addresses (default: $publicNetwork) @@ -152,6 +156,9 @@ while [[ -n $1 ]]; do if [[ $1 = --letsencrypt ]]; then letsEncryptDomainName="$2" shift 2 + elif [[ $1 = --fullnode-additional-disk-size-gb ]]; then + fullNodeAdditionalDiskSizeInGb="$2" + shift 2 else usage "Unknown long option: $1" fi @@ -234,8 +241,14 @@ case $cloudProvider in gce) ;; ec2) + if [[ -n $fullNodeAdditionalDiskSizeInGb ]] ; then + usage "Error: --fullnode-additional-disk-size-gb currently only supported with cloud provider: gce" + fi ;; azure) + if [[ -n $fullNodeAdditionalDiskSizeInGb ]] ; then + usage "Error: --fullnode-additional-disk-size-gb currently only supported with cloud provider: gce" + fi ;; *) echo "Error: Unknown cloud provider: $cloudProvider" @@ -630,6 +643,10 @@ $( cat enable-nvidia-persistence-mode.sh fi + if [[ -n $fullNodeAdditionalDiskSizeInGb ]]; then + cat mount-additional-disk.sh + fi + ) cat > /etc/motd <