#!/bin/bash -e here=$(dirname "$0") SOLANA_ROOT="$(cd "$here"/..; pwd)" # shellcheck source=net/common.sh source "$here"/common.sh usage() { exitcode=0 if [[ -n "$1" ]]; then exitcode=1 echo "Error: $*" fi cat <> "$logFile" } startLeader() { declare ipAddress=$1 declare logFile="$2" echo "****************" echo "Starting leader: $leaderIp" common_start_setup "$ipAddress" "$logFile" ( set -x rsync -vPrz -e "ssh ${sshOptions[*]}" "$SOLANA_ROOT"/farf/bin/* "$ipAddress":~/.cargo/bin/ ssh "${sshOptions[@]}" -f "$ipAddress" \ "./solana/net/remote/remote_leader.sh" ) >> "$logFile" } startValidator() { declare ipAddress=$1 declare logFile="$2" echo "*******************" echo "Starting validator: $leaderIp" common_start_setup "$ipAddress" "$logFile" ( set -x ssh "${sshOptions[@]}" -f "$ipAddress" \ "./solana/net/remote/remote_validator.sh $leaderIp" ) >> "$logFile" } startClient() { declare ipAddress=$1 declare logFile="$2" echo "****************" echo "Starting client: $leaderIp" common_start_setup "$ipAddress" "$logFile" ssh "${sshOptions[@]}" -f "$ipAddress" \ "./solana/net/remote/remote_client.sh $leaderIp" >> "$logFile" } start() { echo "Deployment started at $(date)" SECONDS=0 leaderDeployTime= startLeader "$leaderIp" "$netLogDir/leader-$leaderIp.log" leaderDeployTime=$SECONDS SECONDS=0 for ipAddress in "${validatorIpList[@]}"; do startValidator "$ipAddress" "$netLogDir/validator-$ipAddress.log" & done wait validatorDeployTime=$SECONDS SECONDS=0 for ipAddress in "${clientIpList[@]}"; do startClient "$ipAddress" "$netLogDir/client-$ipAddress.log" done clientDeployTime=$SECONDS SECONDS=0 wait echo echo "=================================================================" echo "Deployment finished at $(date)" echo "Leader deployment took $leaderDeployTime seconds" echo "Validator deployment (${#validatorIpList[@]} instances) took $validatorDeployTime seconds" echo "Client deployment (${#clientIpList[@]} instances) took $clientDeployTime seconds" echo "Logs in $netLogDir:" ls -l "$netLogDir" } stop_node() { local ipAddress=$1 echo "**************" echo "Stopping node: $ipAddress" ( set -x ssh "${sshOptions[@]}" "$ipAddress" " set -x; pkill -9 solana-; pkill -9 validator; pkill -9 leader; " ) || true } stop() { SECONDS=0 stop_node "$leaderIp" for ipAddress in "${validatorIpList[@]}" "${clientIpList[@]}"; do stop_node "$ipAddress" done echo "Stopping nodes took $SECONDS seconds" } mkdir -p log if [[ $command == "start" ]]; then build stop start elif [[ $command == "stop" ]]; then stop else usage "Unknown command: $command" fi