Files
solana/multinode-demo/bootstrap-validator.sh

145 lines
3.0 KiB
Bash
Raw Normal View History

2018-12-07 10:00:35 -08:00
#!/usr/bin/env bash
#
# Start the bootstrap validator node
2018-12-07 10:00:35 -08:00
#
set -e
2018-12-07 10:00:35 -08:00
here=$(dirname "$0")
# shellcheck source=multinode-demo/common.sh
source "$here"/common.sh
if [[ "$SOLANA_GPU_MISSING" -eq 1 ]]; then
echo "Testnet requires GPUs, but none were found! Aborting..."
exit 1
fi
if [[ -n $SOLANA_CUDA ]]; then
program=$solana_validator_cuda
else
program=$solana_validator
fi
no_restart=0
args=()
while [[ -n $1 ]]; do
if [[ ${1:0:1} = - ]]; then
if [[ $1 = --init-complete-file ]]; then
args+=("$1" "$2")
shift 2
2019-11-20 16:57:24 -07:00
elif [[ $1 = --gossip-host ]]; then
args+=("$1" "$2")
shift 2
elif [[ $1 = --gossip-port ]]; then
args+=("$1" "$2")
shift 2
elif [[ $1 = --dev-halt-at-slot ]]; then
args+=("$1" "$2")
shift 2
elif [[ $1 = --dynamic-port-range ]]; then
args+=("$1" "$2")
shift 2
elif [[ $1 = --limit-ledger-size ]]; then
args+=("$1" "$2")
shift 2
elif [[ $1 = --no-rocksdb-compaction ]]; then
args+=("$1")
shift
elif [[ $1 = --enable-rpc-transaction-history ]]; then
args+=("$1")
shift
Long-term ledger storage with BigTable (bp #11222) (#11392) * ledger-storage-bigtable boilerplate (cherry picked from commit 9d2293bb32e90669ebd196886d4104d63e9bbfa8) * $ wget https://pki.goog/roots.pem -O pki-goog-roots.pem (cherry picked from commit 1617a025ce61bfeaf79b5a1cdff393346817747e) * Add access_token module (cherry picked from commit 59d266a1113f1b1452ffbc5644cf46ed79106e4e) * Add root_ca_certificate (cherry picked from commit faa016e4b7ee369e0cbf22bbab207b365d69ba74) * Add build-proto (cherry picked from commit c31e1f5bf0ffa5f1e1e0748e53a5109c5e0600dd) * UiTransactionEncoding is now copy (cherry picked from commit 494968be666032c62fd22a95cd87143303ccac12) * Increase timeout (cherry picked from commit 57dfebc5bad8745ecc532e6d5347eb0db8ff356e) * Add build-proto/build.sh output (cherry picked from commit 54dae6ba2c1b715f56ddaaaa650c07e5396ad1c6) * Supress doctest errors (cherry picked from commit 019c75797d94f9f4dfb0d886ad13f9f3c2757046) * Add compression (cherry picked from commit 243e05d59fbf586a822c2c3d4aad07790b55ea56) * Add bigtable (cherry picked from commit 6e0353965a3fd1ac2278f04aa880afe5faf990a2) * Add configuration info (cherry picked from commit 98cca1e774be21e116b52ca42c7e3b98d9485b13) * Add ledger-tool bigtable subcommands (cherry picked from commit f9049d6ee4e932a582b7825e236468ea37db8952) # Conflicts: # ledger-tool/Cargo.toml * Make room for tokio 0.2 (cherry picked from commit b876fb84ba74178443741ac9279105bd2453c2ff) # Conflicts: # core/Cargo.toml * Setup a tokio 0.2 runtime for RPC usage (cherry picked from commit 0e02740565b87508fd363101de9c292783bf85f3) # Conflicts: # core/Cargo.toml * Plumb Bigtable ledger storage into the RPC subsystem (cherry picked from commit dfae9a98644e29adc1d9dceeab53fa2b9b6d4335) # Conflicts: # core/Cargo.toml * Add RPC transaction history design (cherry picked from commit e56ea138c729e94e6bf91fa136a6bb7fbff36f2c) * Simplify access token refreshing (cherry picked from commit 1f7af14386b8b054a425f4507d80d4335f6a62e1) * Report block status more frequently (cherry picked from commit 22c46ebf9658da3dfff8c50e70b8f357a87e6d04) * after -> before (cherry picked from commit 227ea934ffe96677d398adb0b6b9d6d404ca9579) * Rebase * Cargo.lock Co-authored-by: Michael Vines <mvines@gmail.com>
2020-08-06 04:06:44 +00:00
elif [[ $1 = --enable-rpc-bigtable-ledger-storage ]]; then
args+=("$1")
shift
elif [[ $1 = --skip-poh-verify ]]; then
2019-10-21 10:21:43 -07:00
args+=("$1")
shift
elif [[ $1 = --log ]]; then
args+=("$1" "$2")
shift 2
elif [[ $1 = --no-restart ]]; then
no_restart=1
shift
elif [[ $1 == --wait-for-supermajority ]]; 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
# These keypairs are created by ./setup.sh and included in the genesis config
identity=$SOLANA_CONFIG_DIR/bootstrap-validator/identity.json
vote_account="$SOLANA_CONFIG_DIR"/bootstrap-validator/vote-account.json
ledger_dir="$SOLANA_CONFIG_DIR"/bootstrap-validator
2019-07-30 22:43:47 -07:00
[[ -d "$ledger_dir" ]] || {
echo "$ledger_dir does not exist"
echo
echo "Please run: $here/setup.sh"
exit 1
}
args+=(
--enable-rpc-exit
--enable-rpc-set-log-filter
2019-07-30 22:43:47 -07:00
--ledger "$ledger_dir"
--rpc-port 8899
--snapshot-interval-slots 200
--identity "$identity"
--vote-account "$vote_account"
2019-12-16 14:05:17 -07:00
--rpc-faucet-address 127.0.0.1:9900
)
default_arg --gossip-port 8001
default_arg --log -
pid=
kill_node() {
# Note: do not echo anything from this function to ensure $pid is actually
# killed when stdout/stderr are redirected
set +ex
if [[ -n $pid ]]; then
declare _pid=$pid
pid=
kill "$_pid" || true
wait "$_pid" || true
fi
}
kill_node_and_exit() {
kill_node
exit
}
trap 'kill_node_and_exit' INT TERM ERR
while true; do
echo "$program ${args[*]}"
$program "${args[@]}" &
pid=$!
echo "pid: $pid"
if ((no_restart)); then
wait "$pid"
exit $?
fi
while true; do
if [[ -z $pid ]] || ! kill -0 "$pid"; then
echo "############## validator exited, restarting ##############"
break
fi
sleep 1
done
kill_node
done