Eject bootstrap-leader support from fullnode.sh (#5301)
This commit is contained in:
		| @@ -74,8 +74,6 @@ source scripts/configure-metrics.sh | |||||||
| nodes=( | nodes=( | ||||||
|   "multinode-demo/drone.sh" |   "multinode-demo/drone.sh" | ||||||
|   "multinode-demo/bootstrap-leader.sh \ |   "multinode-demo/bootstrap-leader.sh \ | ||||||
|     --enable-rpc-exit \ |  | ||||||
|     --no-restart \ |  | ||||||
|     --init-complete-file init-complete-node1.log" |     --init-complete-file init-complete-node1.log" | ||||||
|   "multinode-demo/validator.sh \ |   "multinode-demo/validator.sh \ | ||||||
|     --enable-rpc-exit \ |     --enable-rpc-exit \ | ||||||
|   | |||||||
| @@ -2,6 +2,77 @@ | |||||||
| # | # | ||||||
| # Start the bootstrap leader node | # Start the bootstrap leader node | ||||||
| # | # | ||||||
|  | set -e | ||||||
|  |  | ||||||
| here=$(dirname "$0") | here=$(dirname "$0") | ||||||
| exec "$here"/fullnode.sh --bootstrap-leader "$@" | # shellcheck source=multinode-demo/common.sh | ||||||
|  | source "$here"/common.sh | ||||||
|  |  | ||||||
|  | if [[ -n $SOLANA_CUDA ]]; then | ||||||
|  |   program=$solana_validator_cuda | ||||||
|  | else | ||||||
|  |   program=$solana_validator | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | args=() | ||||||
|  | while [[ -n $1 ]]; do | ||||||
|  |   if [[ ${1:0:1} = - ]]; then | ||||||
|  |     if [[ $1 = --init-complete-file ]]; then | ||||||
|  |       args+=("$1" "$2") | ||||||
|  |       shift 2 | ||||||
|  |     else | ||||||
|  |       echo "Unknown argument: $1" | ||||||
|  |       $program --help | ||||||
|  |       exit 1 | ||||||
|  |     fi | ||||||
|  |   else | ||||||
|  |     echo "Unknown argument: $1" | ||||||
|  |     $program --help | ||||||
|  |     exit 1 | ||||||
|  |   fi | ||||||
|  | done | ||||||
|  |  | ||||||
|  | if [[ ! -d "$SOLANA_RSYNC_CONFIG_DIR"/ledger ]]; then | ||||||
|  |   echo "$SOLANA_RSYNC_CONFIG_DIR/ledger does not exist" | ||||||
|  |   echo | ||||||
|  |   echo "Please run: $here/setup.sh" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [[ -z $CI ]]; then # Skip in CI | ||||||
|  |   # shellcheck source=scripts/tune-system.sh | ||||||
|  |   source "$here"/../scripts/tune-system.sh | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | setup_secondary_mount | ||||||
|  |  | ||||||
|  | # These keypairs are created by ./setup.sh and included in the genesis block | ||||||
|  | identity_keypair=$SOLANA_CONFIG_DIR/bootstrap-leader-keypair.json | ||||||
|  | vote_keypair="$SOLANA_CONFIG_DIR"/bootstrap-leader-vote-keypair.json | ||||||
|  | storage_keypair=$SOLANA_CONFIG_DIR/bootstrap-leader-storage-keypair.json | ||||||
|  |  | ||||||
|  | ledger_config_dir="$SOLANA_CONFIG_DIR"/bootstrap-leader-ledger | ||||||
|  | [[ -d "$ledger_config_dir" ]] || ( | ||||||
|  |   set -x | ||||||
|  |   cp -a "$SOLANA_RSYNC_CONFIG_DIR"/ledger/ "$ledger_config_dir" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | args+=( | ||||||
|  |   --accounts "$SOLANA_CONFIG_DIR"/bootstrap-leader-accounts | ||||||
|  |   --enable-rpc-exit | ||||||
|  |   --gossip-port 8001 | ||||||
|  |   --identity "$identity_keypair" | ||||||
|  |   --ledger "$ledger_config_dir" | ||||||
|  |   --rpc-port 8899 | ||||||
|  |   --snapshot-path "$SOLANA_CONFIG_DIR"/bootstrap-leader-snapshots | ||||||
|  |   --storage-keypair "$storage_keypair" | ||||||
|  |   --voting-keypair "$vote_keypair" | ||||||
|  |   --rpc-drone-address 127.0.0.1:9900 | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | identity_pubkey=$($solana_keygen pubkey "$identity_keypair") | ||||||
|  | export SOLANA_METRICS_HOST_ID="$identity_pubkey" | ||||||
|  |  | ||||||
|  | set -x | ||||||
|  | # shellcheck disable=SC2086 # Don't want to double quote $program | ||||||
|  | exec $program "${args[@]}" | ||||||
|   | |||||||
| @@ -1,15 +1,11 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
| # | # | ||||||
| # Start a fullnode | # Start a validator | ||||||
| # | # | ||||||
| here=$(dirname "$0") | here=$(dirname "$0") | ||||||
| # shellcheck source=multinode-demo/common.sh | # shellcheck source=multinode-demo/common.sh | ||||||
| source "$here"/common.sh | source "$here"/common.sh | ||||||
|  |  | ||||||
| # shellcheck source=scripts/oom-score-adj.sh |  | ||||||
| source "$here"/../scripts/oom-score-adj.sh |  | ||||||
|  |  | ||||||
|  |  | ||||||
| fullnode_usage() { | fullnode_usage() { | ||||||
|   if [[ -n $1 ]]; then |   if [[ -n $1 ]]; then | ||||||
|     echo "$*" |     echo "$*" | ||||||
| @@ -136,15 +132,7 @@ setup_validator_accounts() { | |||||||
|   return 0 |   return 0 | ||||||
| } | } | ||||||
|  |  | ||||||
| ledger_not_setup() { |  | ||||||
|   echo "Error: $*" |  | ||||||
|   echo |  | ||||||
|   echo "Please run: ${here}/setup.sh" |  | ||||||
|   exit 1 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| args=() | args=() | ||||||
| node_type=validator |  | ||||||
| node_lamports=424242  # number of lamports to assign the node for transaction fees | node_lamports=424242  # number of lamports to assign the node for transaction fees | ||||||
| stake_lamports=42     # number of lamports to assign as stake | stake_lamports=42     # number of lamports to assign as stake | ||||||
| poll_for_new_genesis_block=0 | poll_for_new_genesis_block=0 | ||||||
| @@ -166,19 +154,12 @@ while [[ -n $1 ]]; do | |||||||
|     elif [[ $1 = --no-restart ]]; then |     elif [[ $1 = --no-restart ]]; then | ||||||
|       no_restart=1 |       no_restart=1 | ||||||
|       shift |       shift | ||||||
|     elif [[ $1 = --bootstrap-leader ]]; then |  | ||||||
|       node_type=bootstrap_leader |  | ||||||
|       generate_snapshots=1 |  | ||||||
|       shift |  | ||||||
|     elif [[ $1 = --generate-snapshots ]]; then |     elif [[ $1 = --generate-snapshots ]]; then | ||||||
|       generate_snapshots=1 |       generate_snapshots=1 | ||||||
|       shift |       shift | ||||||
|     elif [[ $1 = --no-snapshot ]]; then |     elif [[ $1 = --no-snapshot ]]; then | ||||||
|       boot_from_snapshot=0 |       boot_from_snapshot=0 | ||||||
|       shift |       shift | ||||||
|     elif [[ $1 = --validator ]]; then |  | ||||||
|       node_type=validator |  | ||||||
|       shift |  | ||||||
|     elif [[ $1 = --poll-for-new-genesis-block ]]; then |     elif [[ $1 = --poll-for-new-genesis-block ]]; then | ||||||
|       poll_for_new_genesis_block=1 |       poll_for_new_genesis_block=1 | ||||||
|       shift |       shift | ||||||
| @@ -263,34 +244,6 @@ fi | |||||||
|  |  | ||||||
| setup_secondary_mount | setup_secondary_mount | ||||||
|  |  | ||||||
| if [[ $node_type = bootstrap_leader ]]; then |  | ||||||
|   if [[ ${#positional_args[@]} -ne 0 ]]; then |  | ||||||
|     fullnode_usage "Unknown argument: ${positional_args[0]}" |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   [[ -f "$SOLANA_CONFIG_DIR"/bootstrap-leader-keypair.json ]] || |  | ||||||
|     ledger_not_setup "$SOLANA_CONFIG_DIR/bootstrap-leader-keypair.json not found" |  | ||||||
|  |  | ||||||
|   $solana_ledger_tool --ledger "$SOLANA_CONFIG_DIR"/bootstrap-leader-ledger verify |  | ||||||
|  |  | ||||||
|   # These four keypairs are created by ./setup.sh and encoded into the genesis |  | ||||||
|   # block |  | ||||||
|   identity_keypair_path=$SOLANA_CONFIG_DIR/bootstrap-leader-keypair.json |  | ||||||
|   voting_keypair_path="$SOLANA_CONFIG_DIR"/bootstrap-leader-vote-keypair.json |  | ||||||
|   stake_keypair_path=$SOLANA_CONFIG_DIR/bootstrap-leader-stake-keypair.json |  | ||||||
|   storage_keypair_path=$SOLANA_CONFIG_DIR/bootstrap-leader-storage-keypair.json |  | ||||||
|  |  | ||||||
|   ledger_config_dir="$SOLANA_CONFIG_DIR"/bootstrap-leader-ledger |  | ||||||
|   state_dir="$SOLANA_CONFIG_DIR"/bootstrap-leader-state |  | ||||||
|   configured_flag=$SOLANA_CONFIG_DIR/bootstrap-leader.configured |  | ||||||
|  |  | ||||||
|   default_arg --rpc-port 8899 |  | ||||||
|   if ((airdrops_enabled)); then |  | ||||||
|     default_arg --rpc-drone-address 127.0.0.1:9900 |  | ||||||
|   fi |  | ||||||
|   default_arg --gossip-port 8001 |  | ||||||
|  |  | ||||||
| elif [[ $node_type = validator ]]; then |  | ||||||
| if [[ ${#positional_args[@]} -gt 2 ]]; then | if [[ ${#positional_args[@]} -gt 2 ]]; then | ||||||
|   fullnode_usage "$@" |   fullnode_usage "$@" | ||||||
| fi | fi | ||||||
| @@ -322,10 +275,6 @@ elif [[ $node_type = validator ]]; then | |||||||
| fi | fi | ||||||
|  |  | ||||||
| rsync_entrypoint_url=$(rsync_url "$entrypoint") | rsync_entrypoint_url=$(rsync_url "$entrypoint") | ||||||
| else |  | ||||||
|   echo "Error: Unknown node_type: $node_type" |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| identity_pubkey=$($solana_keygen pubkey "$identity_keypair_path") | identity_pubkey=$($solana_keygen pubkey "$identity_keypair_path") | ||||||
| export SOLANA_METRICS_HOST_ID="$identity_pubkey" | export SOLANA_METRICS_HOST_ID="$identity_pubkey" | ||||||
| @@ -393,7 +342,7 @@ if ((reset_ledger)); then | |||||||
| fi | fi | ||||||
|  |  | ||||||
| while true; do | while true; do | ||||||
|   if [[ $node_type != bootstrap_leader ]] && new_genesis_block; then |   if new_genesis_block; then | ||||||
|     # If the genesis block has changed remove the now stale ledger and start all |     # If the genesis block has changed remove the now stale ledger and start all | ||||||
|     # over again |     # over again | ||||||
|     ( |     ( | ||||||
| @@ -402,12 +351,7 @@ while true; do | |||||||
|     ) |     ) | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   if [[ $node_type = bootstrap_leader && ! -d "$SOLANA_RSYNC_CONFIG_DIR"/ledger ]]; then |  | ||||||
|     ledger_not_setup "$SOLANA_RSYNC_CONFIG_DIR/ledger does not exist" |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   if [[ ! -d "$ledger_config_dir" ]]; then |   if [[ ! -d "$ledger_config_dir" ]]; then | ||||||
|     if [[ $node_type = validator ]]; then |  | ||||||
|     ( |     ( | ||||||
|       cd "$SOLANA_RSYNC_CONFIG_DIR" |       cd "$SOLANA_RSYNC_CONFIG_DIR" | ||||||
|  |  | ||||||
| @@ -438,8 +382,6 @@ while true; do | |||||||
|         echo "Extracted snapshot in $SECONDS seconds" |         echo "Extracted snapshot in $SECONDS seconds" | ||||||
|       fi |       fi | ||||||
|     ) |     ) | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     ( |     ( | ||||||
|       set -x |       set -x | ||||||
|       cp -a "$SOLANA_RSYNC_CONFIG_DIR"/ledger/ "$ledger_config_dir" |       cp -a "$SOLANA_RSYNC_CONFIG_DIR"/ledger/ "$ledger_config_dir" | ||||||
| @@ -450,14 +392,14 @@ while true; do | |||||||
|   stake_pubkey=$($solana_keygen pubkey "$stake_keypair_path") |   stake_pubkey=$($solana_keygen pubkey "$stake_keypair_path") | ||||||
|   storage_pubkey=$($solana_keygen pubkey "$storage_keypair_path") |   storage_pubkey=$($solana_keygen pubkey "$storage_keypair_path") | ||||||
|  |  | ||||||
|   if [[ $node_type = validator ]] && ((stake_lamports)); then |   if ((stake_lamports)); then | ||||||
|     setup_validator_accounts "${entrypoint_address%:*}" \ |     setup_validator_accounts "${entrypoint_address%:*}" \ | ||||||
|       "$node_lamports" \ |       "$node_lamports" \ | ||||||
|       "$stake_lamports" |       "$stake_lamports" | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   cat <<EOF |   cat <<EOF | ||||||
| ======================[ $node_type configuration ]====================== | ======================[ validator configuration ]====================== | ||||||
| identity pubkey: $identity_pubkey | identity pubkey: $identity_pubkey | ||||||
| vote pubkey: $vote_pubkey | vote pubkey: $vote_pubkey | ||||||
| stake pubkey: $stake_pubkey | stake pubkey: $stake_pubkey | ||||||
| @@ -473,7 +415,6 @@ EOF | |||||||
|   $program "${args[@]}" & |   $program "${args[@]}" & | ||||||
|   pid=$! |   pid=$! | ||||||
|   echo "pid: $pid" |   echo "pid: $pid" | ||||||
|   oom_score_adj "$pid" 1000 |  | ||||||
|  |  | ||||||
|   if ((no_restart)); then |   if ((no_restart)); then | ||||||
|     wait "$pid" |     wait "$pid" | ||||||
| @@ -485,7 +426,7 @@ EOF | |||||||
|   while true; do |   while true; do | ||||||
|     if [[ -z $pid ]] || ! kill -0 "$pid"; then |     if [[ -z $pid ]] || ! kill -0 "$pid"; then | ||||||
|       [[ -z $pid ]] || wait "$pid" |       [[ -z $pid ]] || wait "$pid" | ||||||
|       echo "############## $node_type exited, restarting ##############" |       echo "############## validator exited, restarting ##############" | ||||||
|       break |       break | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
| @@ -521,7 +462,7 @@ EOF | |||||||
|     if ((poll_for_new_genesis_block && --secs_to_next_genesis_poll == 0)); then |     if ((poll_for_new_genesis_block && --secs_to_next_genesis_poll == 0)); then | ||||||
|       echo "Polling for new genesis block..." |       echo "Polling for new genesis block..." | ||||||
|       if new_genesis_block; then |       if new_genesis_block; then | ||||||
|         echo "############## New genesis detected, restarting $node_type ##############" |         echo "############## New genesis detected, restarting ##############" | ||||||
|         break |         break | ||||||
|       fi |       fi | ||||||
|       secs_to_next_genesis_poll=60 |       secs_to_next_genesis_poll=60 | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| here=$(dirname "$0") | here=$(dirname "$0") | ||||||
| exec "$here"/fullnode.sh --validator "$@" | exec "$here"/fullnode.sh "$@" | ||||||
|   | |||||||
| @@ -58,6 +58,7 @@ genesisOptions="$genesisOptions" | |||||||
| airdropsEnabled=$airdropsEnabled | airdropsEnabled=$airdropsEnabled | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
|  | source scripts/oom-score-adj.sh | ||||||
| source net/common.sh | source net/common.sh | ||||||
| loadConfigFile | loadConfigFile | ||||||
|  |  | ||||||
| @@ -164,21 +165,20 @@ local|tar|skip) | |||||||
|       args+=($genesisOptions) |       args+=($genesisOptions) | ||||||
|       ./multinode-demo/setup.sh "${args[@]}" |       ./multinode-demo/setup.sh "${args[@]}" | ||||||
|     fi |     fi | ||||||
|     if [[ $airdropsEnabled = true ]]; then |  | ||||||
|       ./multinode-demo/drone.sh > drone.log 2>&1 & |  | ||||||
|     fi |  | ||||||
|     args=( |     args=( | ||||||
|       --enable-rpc-exit |       --enable-rpc-exit | ||||||
|       --gossip-port "$entrypointIp":8001 |       --gossip-port "$entrypointIp":8001 | ||||||
|  |       --init-complete-file "$initCompleteFile" | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     if [[ $airdropsEnabled != true ]]; then |     if [[ $airdropsEnabled = true ]]; then | ||||||
|       args+=(--no-airdrop) |       ./multinode-demo/drone.sh > drone.log 2>&1 & | ||||||
|     fi |     fi | ||||||
|     args+=(--init-complete-file "$initCompleteFile") |  | ||||||
|     # shellcheck disable=SC2206 # Don't want to double quote $extraNodeArgs |     # shellcheck disable=SC2206 # Don't want to double quote $extraNodeArgs | ||||||
|     args+=($extraNodeArgs) |     args+=($extraNodeArgs) | ||||||
|     nohup ./multinode-demo/validator.sh --bootstrap-leader "${args[@]}" > fullnode.log 2>&1 & |     nohup ./multinode-demo/validator.sh --bootstrap-leader "${args[@]}" > fullnode.log 2>&1 & | ||||||
|  |     pid=$! | ||||||
|  |     oom_score_adj "$pid" 1000 | ||||||
|     waitForNodeToInit |     waitForNodeToInit | ||||||
|     ;; |     ;; | ||||||
|   validator|blockstreamer) |   validator|blockstreamer) | ||||||
| @@ -265,6 +265,8 @@ local|tar|skip) | |||||||
|     # shellcheck disable=SC2206 # Don't want to double quote $extraNodeArgs |     # shellcheck disable=SC2206 # Don't want to double quote $extraNodeArgs | ||||||
|     args+=($extraNodeArgs) |     args+=($extraNodeArgs) | ||||||
|     nohup ./multinode-demo/validator.sh "${args[@]}" > fullnode.log 2>&1 & |     nohup ./multinode-demo/validator.sh "${args[@]}" > fullnode.log 2>&1 & | ||||||
|  |     pid=$! | ||||||
|  |     oom_score_adj "$pid" 1000 | ||||||
|     waitForNodeToInit |     waitForNodeToInit | ||||||
|     ;; |     ;; | ||||||
|   replicator) |   replicator) | ||||||
| @@ -284,6 +286,8 @@ local|tar|skip) | |||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     nohup ./multinode-demo/replicator.sh "${args[@]}" > fullnode.log 2>&1 & |     nohup ./multinode-demo/replicator.sh "${args[@]}" > fullnode.log 2>&1 & | ||||||
|  |     pid=$! | ||||||
|  |     oom_score_adj "$pid" 1000 | ||||||
|     sleep 1 |     sleep 1 | ||||||
|     ;; |     ;; | ||||||
|   *) |   *) | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ sysctl_write() { | |||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   echo "$ $cmd" |   echo "$ $cmd" | ||||||
|   $cmd |   $cmd || true | ||||||
|  |  | ||||||
|   # Some versions of sysctl exit with 0 on permission denied errors |   # Some versions of sysctl exit with 0 on permission denied errors | ||||||
|   current_value=$(sysctl -n "$name") |   current_value=$(sysctl -n "$name") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user