| 
									
										
										
										
											2018-11-11 08:19:04 -08:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | set -e | 
					
						
							| 
									
										
										
										
											2018-09-04 23:24:33 -07:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2018-12-05 16:40:08 -08:00
										 |  |  | # This script is to be run on the bootstrap full node | 
					
						
							| 
									
										
										
										
											2018-09-04 23:24:33 -07:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 09:21:03 -07:00
										 |  |  | cd "$(dirname "$0")"/../.. | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  | sanityTargetIp="$1" | 
					
						
							| 
									
										
										
										
											2019-06-05 12:06:54 -07:00
										 |  |  | shift | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 09:21:03 -07:00
										 |  |  | deployMethod= | 
					
						
							| 
									
										
										
										
											2018-09-04 22:21:58 -07:00
										 |  |  | entrypointIp= | 
					
						
							| 
									
										
										
										
											2018-09-04 09:21:03 -07:00
										 |  |  | numNodes= | 
					
						
							| 
									
										
										
										
											2019-04-29 21:38:03 -07:00
										 |  |  | failOnValidatorBootupFailure= | 
					
						
							| 
									
										
										
										
											2019-06-17 18:15:22 -07:00
										 |  |  | airdropsEnabled=true | 
					
						
							| 
									
										
										
										
											2018-09-04 22:21:58 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | [[ -r deployConfig ]] || { | 
					
						
							|  |  |  |   echo deployConfig missing | 
					
						
							|  |  |  |   exit 1 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | # shellcheck source=/dev/null # deployConfig is written by remote-node.sh | 
					
						
							| 
									
										
										
										
											2018-09-04 09:21:03 -07:00
										 |  |  | source deployConfig | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-07 08:46:20 -07:00
										 |  |  | missing() { | 
					
						
							|  |  |  |   echo "Error: $1 not specified" | 
					
						
							| 
									
										
										
										
											2018-09-04 09:21:03 -07:00
										 |  |  |   exit 1 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  | [[ -n $sanityTargetIp ]] || missing sanityTargetIp | 
					
						
							| 
									
										
										
										
											2018-12-05 17:33:32 -08:00
										 |  |  | [[ -n $deployMethod ]]   || missing deployMethod | 
					
						
							|  |  |  | [[ -n $entrypointIp ]]   || missing entrypointIp | 
					
						
							|  |  |  | [[ -n $numNodes ]]       || missing numNodes | 
					
						
							| 
									
										
										
										
											2019-04-29 21:38:03 -07:00
										 |  |  | [[ -n $failOnValidatorBootupFailure ]] || missing failOnValidatorBootupFailure | 
					
						
							| 
									
										
										
										
											2018-09-07 08:46:20 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | ledgerVerify=true | 
					
						
							|  |  |  | validatorSanity=true | 
					
						
							| 
									
										
										
										
											2019-06-05 15:31:29 -07:00
										 |  |  | installCheck=true | 
					
						
							| 
									
										
										
										
											2018-09-11 20:00:49 -07:00
										 |  |  | rejectExtraNodes=false | 
					
						
							| 
									
										
										
										
											2018-09-04 22:21:58 -07:00
										 |  |  | while [[ $1 = -o ]]; do | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  |   opt="$2" | 
					
						
							|  |  |  |   shift 2 | 
					
						
							|  |  |  |   case $opt in | 
					
						
							|  |  |  |   noLedgerVerify) | 
					
						
							|  |  |  |     ledgerVerify=false | 
					
						
							|  |  |  |     ;; | 
					
						
							|  |  |  |   noValidatorSanity) | 
					
						
							|  |  |  |     validatorSanity=false | 
					
						
							|  |  |  |     ;; | 
					
						
							| 
									
										
										
										
											2019-06-05 15:31:29 -07:00
										 |  |  |   noInstallCheck) | 
					
						
							|  |  |  |     installCheck=false | 
					
						
							|  |  |  |     ;; | 
					
						
							| 
									
										
										
										
											2018-09-11 20:00:49 -07:00
										 |  |  |   rejectExtraNodes) | 
					
						
							|  |  |  |     rejectExtraNodes=true | 
					
						
							|  |  |  |     ;; | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  |   *) | 
					
						
							|  |  |  |     echo "Error: unknown option: $opt" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  |     ;; | 
					
						
							|  |  |  |   esac | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-31 10:13:30 -07:00
										 |  |  | if [[ -n $1 ]]; then | 
					
						
							|  |  |  |   export RUST_LOG="$1" | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2019-01-09 12:57:00 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | source net/common.sh | 
					
						
							|  |  |  | loadConfigFile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case $deployMethod in | 
					
						
							| 
									
										
										
										
											2019-07-22 21:38:26 -07:00
										 |  |  | local|tar|skip) | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  |   PATH="$HOME"/.cargo/bin:"$PATH" | 
					
						
							|  |  |  |   export USE_INSTALL=1 | 
					
						
							| 
									
										
										
										
											2018-11-14 19:19:27 -08:00
										 |  |  |   if [[ -r target/perf-libs/env.sh ]]; then | 
					
						
							|  |  |  |     # shellcheck source=/dev/null | 
					
						
							|  |  |  |     source target/perf-libs/env.sh | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-01 17:43:07 -06:00
										 |  |  |   solana_gossip=solana-gossip | 
					
						
							| 
									
										
										
										
											2019-05-26 11:17:07 -07:00
										 |  |  |   solana_install=solana-install | 
					
						
							| 
									
										
										
										
											2018-09-08 07:07:10 +09:00
										 |  |  |   solana_keygen=solana-keygen | 
					
						
							| 
									
										
										
										
											2019-05-26 11:17:07 -07:00
										 |  |  |   solana_ledger_tool=solana-ledger-tool | 
					
						
							| 
									
										
										
										
											2018-09-08 07:07:10 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-05 12:42:52 -07:00
										 |  |  |   ledger=config/bootstrap-leader | 
					
						
							| 
									
										
										
										
											2019-07-30 22:43:47 -07:00
										 |  |  |   client_id=config/client-id.json | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  |   ;; | 
					
						
							|  |  |  | *) | 
					
						
							|  |  |  |   echo "Unknown deployment method: $deployMethod" | 
					
						
							|  |  |  |   exit 1 | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-29 21:38:03 -07:00
										 |  |  | if $failOnValidatorBootupFailure; then | 
					
						
							| 
									
										
										
										
											2019-04-30 08:56:53 -07:00
										 |  |  |   numSanityNodes="$numNodes" | 
					
						
							|  |  |  | else | 
					
						
							| 
									
										
										
										
											2019-04-29 21:38:03 -07:00
										 |  |  |   numSanityNodes=1 | 
					
						
							|  |  |  |   if $rejectExtraNodes; then | 
					
						
							|  |  |  |     echo "rejectExtraNodes cannot be used with failOnValidatorBootupFailure" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  | echo "+++ $sanityTargetIp: node count ($numSanityNodes expected)" | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | ( | 
					
						
							|  |  |  |   set -x | 
					
						
							| 
									
										
										
										
											2019-06-07 22:18:55 -07:00
										 |  |  |   $solana_keygen new -f -o "$client_id" | 
					
						
							| 
									
										
										
										
											2018-09-11 20:00:49 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-04 00:53:54 -06:00
										 |  |  |   nodeArg="num-nodes" | 
					
						
							| 
									
										
										
										
											2018-09-11 20:00:49 -07:00
										 |  |  |   if $rejectExtraNodes; then | 
					
						
							| 
									
										
										
										
											2019-04-04 00:53:54 -06:00
										 |  |  |     nodeArg="num-nodes-exactly" | 
					
						
							| 
									
										
										
										
											2018-09-11 20:00:49 -07:00
										 |  |  |   fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  |   timeout 2m $solana_gossip --entrypoint "$sanityTargetIp:8001" \
 | 
					
						
							| 
									
										
										
										
											2019-04-29 21:38:03 -07:00
										 |  |  |     spy --$nodeArg "$numSanityNodes" \
 | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  | echo "--- $sanityTargetIp: RPC API: getTransactionCount" | 
					
						
							| 
									
										
										
										
											2019-01-09 12:39:27 -07:00
										 |  |  | ( | 
					
						
							|  |  |  |   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"}' \
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  |     http://"$sanityTargetIp":8899 | 
					
						
							| 
									
										
										
										
											2019-01-09 12:39:27 -07:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-17 18:15:22 -07:00
										 |  |  | if [[ "$airdropsEnabled" = true ]]; then | 
					
						
							|  |  |  |   echo "--- $sanityTargetIp: wallet sanity" | 
					
						
							|  |  |  |   ( | 
					
						
							|  |  |  |     set -x | 
					
						
							|  |  |  |     scripts/wallet-sanity.sh --url http://"$sanityTargetIp":8899 | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   echo "^^^ +++" | 
					
						
							|  |  |  |   echo "Note: wallet sanity is disabled as airdrops are disabled" | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2019-01-09 12:39:27 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  | echo "--- $sanityTargetIp: verify ledger" | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | if $ledgerVerify; then | 
					
						
							|  |  |  |   if [[ -d $ledger ]]; then | 
					
						
							|  |  |  |     ( | 
					
						
							|  |  |  |       set -x | 
					
						
							|  |  |  |       rm -rf /var/tmp/ledger-verify | 
					
						
							| 
									
										
										
										
											2018-09-07 12:36:19 -07:00
										 |  |  |       du -hs "$ledger" | 
					
						
							|  |  |  |       time cp -r "$ledger" /var/tmp/ledger-verify | 
					
						
							|  |  |  |       time $solana_ledger_tool --ledger /var/tmp/ledger-verify verify | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  |     ) | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     echo "^^^ +++" | 
					
						
							| 
									
										
										
										
											2018-09-08 14:10:09 -07:00
										 |  |  |     echo "Ledger verify skipped: directory does not exist: $ledger" | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  |   fi | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   echo "^^^ +++" | 
					
						
							| 
									
										
										
										
											2018-09-08 14:10:09 -07:00
										 |  |  |   echo "Note: ledger verify disabled" | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  | echo "--- $sanityTargetIp: validator sanity" | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | if $validatorSanity; then | 
					
						
							|  |  |  |   ( | 
					
						
							| 
									
										
										
										
											2018-12-05 10:33:10 -08:00
										 |  |  |     set -x -o pipefail | 
					
						
							| 
									
										
										
										
											2019-07-31 10:46:25 -07:00
										 |  |  |     timeout 10s ./multinode-demo/validator-x.sh \
 | 
					
						
							| 
									
										
										
										
											2019-08-10 14:38:41 -07:00
										 |  |  |       --no-restart --entrypoint "$sanityTargetIp:8001" 2>&1 | tee validator-sanity.log | 
					
						
							| 
									
										
										
										
											2018-09-04 15:16:25 -07:00
										 |  |  |   ) || { | 
					
						
							|  |  |  |     exitcode=$? | 
					
						
							|  |  |  |     [[ $exitcode -eq 124 ]] || exit $exitcode | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-12-05 16:40:08 -08:00
										 |  |  |   wc -l validator-sanity.log | 
					
						
							|  |  |  |   if grep -C100 panic validator-sanity.log; then | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  |     echo "^^^ +++" | 
					
						
							|  |  |  |     echo "Panic observed" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  |   else | 
					
						
							| 
									
										
										
										
											2018-12-05 16:40:08 -08:00
										 |  |  |     echo "Validator sanity log looks ok" | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  |   fi | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   echo "^^^ +++" | 
					
						
							| 
									
										
										
										
											2018-09-08 14:10:09 -07:00
										 |  |  |   echo "Note: validator sanity disabled" | 
					
						
							| 
									
										
										
										
											2018-09-03 19:33:40 -10:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2018-09-08 14:12:32 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-05 15:31:29 -07:00
										 |  |  | if $installCheck && [[ -r update_manifest_keypair.json ]]; then | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  |   echo "--- $sanityTargetIp: solana-install test" | 
					
						
							| 
									
										
										
										
											2019-05-26 11:17:07 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   ( | 
					
						
							|  |  |  |     set -x | 
					
						
							|  |  |  |     rm -rf install-data-dir | 
					
						
							|  |  |  |     $solana_install init \
 | 
					
						
							|  |  |  |       --no-modify-path \
 | 
					
						
							|  |  |  |       --data-dir install-data-dir \
 | 
					
						
							| 
									
										
										
										
											2019-06-04 22:46:48 -07:00
										 |  |  |       --url http://"$sanityTargetIp":8899 \
 | 
					
						
							| 
									
										
										
										
											2019-05-26 11:17:07 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $solana_install info | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-08 14:12:32 -07:00
										 |  |  | echo --- Pass |