solana/net/remote/remote-sanity.sh

174 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
#
# This script is to be run on the bootstrap full node
#
cd "$(dirname "$0")"/../..
deployMethod=
entrypointIp=
numNodes=
[[ -r deployConfig ]] || {
echo deployConfig missing
exit 1
}
# shellcheck source=/dev/null # deployConfig is written by remote-node.sh
source deployConfig
missing() {
echo "Error: $1 not specified"
exit 1
}
[[ -n $deployMethod ]] || missing deployMethod
[[ -n $entrypointIp ]] || missing entrypointIp
[[ -n $numNodes ]] || missing numNodes
[[ -n $leaderRotation ]] || missing leaderRotation
ledgerVerify=true
validatorSanity=true
rejectExtraNodes=false
while [[ $1 = -o ]]; do
opt="$2"
shift 2
case $opt in
noLedgerVerify)
ledgerVerify=false
;;
noValidatorSanity)
validatorSanity=false
;;
rejectExtraNodes)
rejectExtraNodes=true
;;
*)
echo "Error: unknown option: $opt"
exit 1
;;
esac
done
RUST_LOG="$1"
export RUST_LOG=${RUST_LOG:-solana=info} # if RUST_LOG is unset, default to info
source net/common.sh
loadConfigFile
case $deployMethod in
snap)
PATH="/snap/bin:$PATH"
export USE_SNAP=1
entrypointRsyncUrl="$entrypointIp"
solana_bench_tps=solana.bench-tps
solana_ledger_tool=solana.ledger-tool
solana_keygen=solana.keygen
ledger=/var/snap/solana/current/config-local/bootstrap-leader-ledger
client_id=~/snap/solana/current/config/client-id.json
;;
local|tar)
PATH="$HOME"/.cargo/bin:"$PATH"
export USE_INSTALL=1
if [[ -r target/perf-libs/env.sh ]]; then
# shellcheck source=/dev/null
source target/perf-libs/env.sh
fi
entrypointRsyncUrl="$entrypointIp:~/solana"
solana_bench_tps=solana-bench-tps
solana_ledger_tool=solana-ledger-tool
solana_keygen=solana-keygen
ledger=config-local/bootstrap-leader-ledger
client_id=config/client-id.json
;;
*)
echo "Unknown deployment method: $deployMethod"
exit 1
esac
echo "+++ $entrypointIp: node count ($numNodes expected)"
(
set -x
$solana_keygen -o "$client_id"
maybeRejectExtraNodes=
if $rejectExtraNodes; then
maybeRejectExtraNodes="--reject-extra-nodes"
fi
timeout 2m $solana_bench_tps \
--network "$entrypointIp:8001" \
--drone "$entrypointIp:9900" \
--identity "$client_id" \
--num-nodes "$numNodes" \
$maybeRejectExtraNodes \
--converge-only
)
echo "--- RPC API: getTransactionCount"
(
set -x
curl --retry 5 --retry-delay 2 --retry-connrefused \
-X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1, "method":"getTransactionCount"}' \
http://"$entrypointIp":8899
)
echo "--- $entrypointIp: wallet sanity"
(
set -x
scripts/wallet-sanity.sh --host "$entrypointIp"
)
echo "--- $entrypointIp: verify ledger"
if $ledgerVerify; then
if [[ -d $ledger ]]; then
(
set -x
rm -rf /var/tmp/ledger-verify
du -hs "$ledger"
time cp -r "$ledger" /var/tmp/ledger-verify
time $solana_ledger_tool --ledger /var/tmp/ledger-verify verify
)
else
echo "^^^ +++"
echo "Ledger verify skipped: directory does not exist: $ledger"
fi
else
echo "^^^ +++"
echo "Note: ledger verify disabled"
fi
echo "--- $entrypointIp: validator sanity"
if $validatorSanity; then
(
set -x -o pipefail
timeout 10s ./multinode-demo/fullnode-x.sh \
"$entrypointRsyncUrl" \
"$entrypointIp:8001" 2>&1 | tee validator-sanity.log
) || {
exitcode=$?
[[ $exitcode -eq 124 ]] || exit $exitcode
}
wc -l validator-sanity.log
if grep -C100 panic validator-sanity.log; then
echo "^^^ +++"
echo "Panic observed"
exit 1
else
echo "Validator sanity log looks ok"
fi
else
echo "^^^ +++"
echo "Note: validator sanity disabled"
fi
echo --- Pass