2019-10-10 11:12:13 -04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
|
2019-11-13 13:04:14 -05:00
|
|
|
function execution_step {
|
|
|
|
# shellcheck disable=SC2124
|
|
|
|
STEP="$@"
|
|
|
|
echo --- "${STEP[@]}"
|
|
|
|
}
|
|
|
|
|
2019-10-10 11:12:13 -04:00
|
|
|
function collect_logs {
|
2019-11-14 11:18:38 -05:00
|
|
|
execution_step "Collect logs from remote nodes"
|
2019-10-10 11:12:13 -04:00
|
|
|
rm -rf net/log
|
|
|
|
net/net.sh logs
|
2020-01-22 13:46:50 -05:00
|
|
|
for logfile in net/log/*; do
|
2019-10-10 11:12:13 -04:00
|
|
|
(
|
|
|
|
new_log=net/log/"$TESTNET_TAG"_"$NUMBER_OF_VALIDATOR_NODES"-nodes_"$(basename "$logfile")"
|
|
|
|
cp "$logfile" "$new_log"
|
|
|
|
upload-ci-artifact "$new_log"
|
|
|
|
)
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2019-11-12 14:51:36 -05:00
|
|
|
function analyze_packet_loss {
|
|
|
|
(
|
|
|
|
set -x
|
|
|
|
# shellcheck disable=SC1091
|
|
|
|
source net/config/config
|
|
|
|
mkdir -p iftop-logs
|
2019-11-13 14:41:42 -05:00
|
|
|
execution_step "Map private -> public IP addresses in iftop logs"
|
2019-11-12 14:51:36 -05:00
|
|
|
# shellcheck disable=SC2154
|
|
|
|
for i in "${!validatorIpList[@]}"; do
|
2019-11-13 14:41:42 -05:00
|
|
|
# shellcheck disable=SC2154
|
|
|
|
# shellcheck disable=SC2086
|
|
|
|
# shellcheck disable=SC2027
|
|
|
|
echo "{\"private\": \""${validatorIpListPrivate[$i]}""\", \"public\": \""${validatorIpList[$i]}""\"},"
|
|
|
|
done > ip_address_map.txt
|
|
|
|
|
|
|
|
for ip in "${validatorIpList[@]}"; do
|
|
|
|
net/scp.sh ip_address_map.txt solana@"$ip":~/solana/
|
|
|
|
done
|
|
|
|
|
|
|
|
execution_step "Remotely post-process iftop logs"
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
for ip in "${validatorIpList[@]}"; do
|
|
|
|
iftop_log=iftop-logs/$ip-iftop.log
|
2019-11-12 14:51:36 -05:00
|
|
|
# shellcheck disable=SC2016
|
2019-11-13 14:41:42 -05:00
|
|
|
net/ssh.sh solana@"$ip" 'PATH=$PATH:~/.cargo/bin/ ~/solana/scripts/iftop-postprocess.sh ~/solana/iftop.log temp.log ~solana/solana/ip_address_map.txt' > "$iftop_log"
|
|
|
|
upload-ci-artifact "$iftop_log"
|
2019-11-12 14:51:36 -05:00
|
|
|
done
|
2019-11-13 14:41:42 -05:00
|
|
|
|
2019-11-13 13:04:14 -05:00
|
|
|
execution_step "Analyzing Packet Loss"
|
2019-11-12 14:51:36 -05:00
|
|
|
solana-release/bin/solana-log-analyzer analyze -f ./iftop-logs/ | sort -k 2 -g
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2020-01-22 09:22:09 -07:00
|
|
|
function wait_for_bootstrap_validator_stake_drop {
|
2020-01-20 16:32:37 -05:00
|
|
|
max_stake="$1"
|
|
|
|
source net/common.sh
|
|
|
|
loadConfigFile
|
|
|
|
|
|
|
|
while true; do
|
2020-01-22 09:22:09 -07:00
|
|
|
bootstrap_validator_validator_info="$(ssh "${sshOptions[@]}" "${validatorIpList[0]}" '$HOME/.cargo/bin/solana validators | grep "$($HOME/.cargo/bin/solana-keygen pubkey ~/solana/config/bootstrap-validator/identity-keypair.json)"')"
|
|
|
|
bootstrap_validator_stake_percentage="$(echo "$bootstrap_validator_validator_info" | awk '{gsub(/[\(,\),\%]/,""); print $9}')"
|
2020-01-20 16:32:37 -05:00
|
|
|
|
2020-01-22 09:22:09 -07:00
|
|
|
if [[ $(echo "$bootstrap_validator_stake_percentage < $max_stake" | bc) -ne 0 ]]; then
|
|
|
|
echo "Bootstrap validator stake has fallen below $max_stake to $bootstrap_validator_stake_percentage"
|
2020-01-20 16:32:37 -05:00
|
|
|
break
|
|
|
|
fi
|
2020-01-22 09:22:09 -07:00
|
|
|
echo "Max bootstrap validator stake: $max_stake. Current stake: $bootstrap_validator_stake_percentage. Sleeping 30s for stake to distribute."
|
2020-01-20 16:32:37 -05:00
|
|
|
sleep 30
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2019-10-10 11:12:13 -04:00
|
|
|
function cleanup_testnet {
|
2019-11-11 09:37:11 -07:00
|
|
|
RC=$?
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ $RC != 0 ]]; then
|
2019-11-14 11:18:38 -05:00
|
|
|
RESULT_DETAILS="
|
|
|
|
Test failed during step:
|
|
|
|
${STEP}
|
|
|
|
|
|
|
|
Failure occured when running the following command:
|
|
|
|
$(eval echo "$@")"
|
2019-11-11 09:37:11 -07:00
|
|
|
fi
|
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
TESTNET_FINISH_UNIX_MSECS="$(($(date +%s%N)/1000000))"
|
|
|
|
if [[ "$UPLOAD_RESULTS_TO_SLACK" = "true" ]]; then
|
2019-10-21 20:00:17 -04:00
|
|
|
upload_results_to_slack
|
|
|
|
fi
|
|
|
|
|
2019-10-10 11:12:13 -04:00
|
|
|
(
|
|
|
|
set +e
|
2019-11-13 13:04:14 -05:00
|
|
|
execution_step "Collecting Logfiles from Nodes"
|
2019-10-10 11:12:13 -04:00
|
|
|
collect_logs
|
|
|
|
)
|
|
|
|
|
|
|
|
(
|
|
|
|
set +e
|
2019-11-13 13:04:14 -05:00
|
|
|
execution_step "Stop Network Software"
|
2019-10-10 11:12:13 -04:00
|
|
|
net/net.sh stop
|
|
|
|
)
|
|
|
|
|
2019-11-12 14:51:36 -05:00
|
|
|
(
|
|
|
|
set +e
|
|
|
|
analyze_packet_loss
|
|
|
|
)
|
|
|
|
|
2019-11-13 13:04:14 -05:00
|
|
|
execution_step "Deleting Testnet"
|
2019-12-17 23:32:31 -05:00
|
|
|
net/"${CLOUD_PROVIDER}".sh delete -p "${TESTNET_TAG}"
|
|
|
|
|
2019-10-10 11:12:13 -04:00
|
|
|
}
|
2019-11-13 13:04:14 -05:00
|
|
|
trap 'cleanup_testnet $BASH_COMMAND' EXIT
|
2019-10-10 11:12:13 -04:00
|
|
|
|
2019-10-23 22:05:05 -06:00
|
|
|
function launchTestnet() {
|
2019-10-10 11:12:13 -04:00
|
|
|
set -x
|
|
|
|
|
|
|
|
# shellcheck disable=SC2068
|
2019-11-14 11:18:38 -05:00
|
|
|
execution_step "Create ${NUMBER_OF_VALIDATOR_NODES} ${CLOUD_PROVIDER} nodes"
|
2019-10-10 11:12:13 -04:00
|
|
|
|
|
|
|
case $CLOUD_PROVIDER in
|
|
|
|
gce)
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -z $VALIDATOR_NODE_MACHINE_TYPE ]]; then
|
2019-10-25 08:10:25 -06:00
|
|
|
echo VALIDATOR_NODE_MACHINE_TYPE not defined
|
|
|
|
exit 1
|
|
|
|
fi
|
2019-10-10 11:12:13 -04:00
|
|
|
# shellcheck disable=SC2068
|
2019-10-24 15:12:25 -06:00
|
|
|
# shellcheck disable=SC2086
|
2019-10-10 11:12:13 -04:00
|
|
|
net/gce.sh create \
|
|
|
|
-d pd-ssd \
|
|
|
|
-n "$NUMBER_OF_VALIDATOR_NODES" -c "$NUMBER_OF_CLIENT_NODES" \
|
2019-10-25 08:10:25 -06:00
|
|
|
$maybeCustomMachineType "$VALIDATOR_NODE_MACHINE_TYPE" $maybeEnableGpu \
|
2019-11-12 13:55:19 -05:00
|
|
|
-p "$TESTNET_TAG" $maybeCreateAllowBootFailures $maybePublicIpAddresses \
|
2019-10-28 16:43:40 -06:00
|
|
|
${TESTNET_CLOUD_ZONES[@]/#/"-z "} \
|
|
|
|
${ADDITIONAL_FLAGS[@]/#/" "}
|
2019-10-10 11:12:13 -04:00
|
|
|
;;
|
2019-10-31 12:00:10 -06:00
|
|
|
ec2)
|
|
|
|
# shellcheck disable=SC2068
|
|
|
|
# shellcheck disable=SC2086
|
|
|
|
net/ec2.sh create \
|
|
|
|
-n "$NUMBER_OF_VALIDATOR_NODES" -c "$NUMBER_OF_CLIENT_NODES" \
|
|
|
|
$maybeCustomMachineType "$VALIDATOR_NODE_MACHINE_TYPE" $maybeEnableGpu \
|
2019-11-12 13:55:19 -05:00
|
|
|
-p "$TESTNET_TAG" $maybeCreateAllowBootFailures $maybePublicIpAddresses \
|
2019-10-31 12:00:10 -06:00
|
|
|
${TESTNET_CLOUD_ZONES[@]/#/"-z "} \
|
|
|
|
${ADDITIONAL_FLAGS[@]/#/" "}
|
|
|
|
;;
|
2019-11-14 09:14:53 -05:00
|
|
|
azure)
|
|
|
|
# shellcheck disable=SC2068
|
|
|
|
# shellcheck disable=SC2086
|
|
|
|
net/azure.sh create \
|
|
|
|
-n "$NUMBER_OF_VALIDATOR_NODES" -c "$NUMBER_OF_CLIENT_NODES" \
|
|
|
|
$maybeCustomMachineType "$VALIDATOR_NODE_MACHINE_TYPE" $maybeEnableGpu \
|
|
|
|
-p "$TESTNET_TAG" $maybeCreateAllowBootFailures $maybePublicIpAddresses \
|
|
|
|
${TESTNET_CLOUD_ZONES[@]/#/"-z "} \
|
|
|
|
${ADDITIONAL_FLAGS[@]/#/" "}
|
|
|
|
;;
|
2019-10-10 11:12:13 -04:00
|
|
|
colo)
|
2019-10-21 23:17:41 -04:00
|
|
|
# shellcheck disable=SC2068
|
2019-10-24 15:12:25 -06:00
|
|
|
# shellcheck disable=SC2086
|
2019-10-10 11:12:13 -04:00
|
|
|
net/colo.sh create \
|
2019-11-09 09:38:06 -07:00
|
|
|
-n "$NUMBER_OF_VALIDATOR_NODES" -c "$NUMBER_OF_CLIENT_NODES" $maybeEnableGpu \
|
2019-11-12 13:55:19 -05:00
|
|
|
-p "$TESTNET_TAG" $maybePublicIpAddresses \
|
|
|
|
${ADDITIONAL_FLAGS[@]/#/" "}
|
2019-10-10 11:12:13 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Error: Unsupported cloud provider: $CLOUD_PROVIDER"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2019-11-14 11:18:38 -05:00
|
|
|
execution_step "Configure database"
|
2019-10-10 11:12:13 -04:00
|
|
|
net/init-metrics.sh -e
|
|
|
|
|
2019-11-14 11:18:38 -05:00
|
|
|
execution_step "Fetch reusable testnet keypairs"
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ ! -d net/keypairs ]]; then
|
2019-11-11 12:08:22 -07:00
|
|
|
git clone git@github.com:solana-labs/testnet-keypairs.git net/keypairs
|
|
|
|
# If we have provider-specific keys (CoLo*, GCE*, etc) use them instead of generic val*
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -d net/keypairs/"${CLOUD_PROVIDER}" ]]; then
|
2019-11-11 12:08:22 -07:00
|
|
|
cp net/keypairs/"${CLOUD_PROVIDER}"/* net/keypairs/
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ "$CLOUD_PROVIDER" = "colo" ]]; then
|
2019-11-13 13:04:14 -05:00
|
|
|
execution_step "Stopping Colo nodes before we start"
|
|
|
|
net/net.sh stop
|
|
|
|
fi
|
|
|
|
|
2019-11-14 11:18:38 -05:00
|
|
|
execution_step "Start ${NUMBER_OF_VALIDATOR_NODES} node test"
|
2019-10-10 11:12:13 -04:00
|
|
|
if [[ -n $CHANNEL ]]; then
|
2019-10-28 16:43:40 -06:00
|
|
|
# shellcheck disable=SC2068
|
|
|
|
# shellcheck disable=SC2086
|
2019-11-13 13:04:14 -05:00
|
|
|
net/net.sh start -t "$CHANNEL" \
|
2019-11-09 09:38:06 -07:00
|
|
|
"$maybeClientOptions" "$CLIENT_OPTIONS" $maybeStartAllowBootFailures \
|
2019-12-05 21:03:26 -05:00
|
|
|
--gpu-mode $startGpuMode --client-delay-start $CLIENT_DELAY_START
|
2019-10-10 11:12:13 -04:00
|
|
|
else
|
2019-10-28 16:43:40 -06:00
|
|
|
# shellcheck disable=SC2068
|
|
|
|
# shellcheck disable=SC2086
|
2019-11-13 13:04:14 -05:00
|
|
|
net/net.sh start -T solana-release*.tar.bz2 \
|
2019-11-09 09:38:06 -07:00
|
|
|
"$maybeClientOptions" "$CLIENT_OPTIONS" $maybeStartAllowBootFailures \
|
2019-12-05 21:03:26 -05:00
|
|
|
--gpu-mode $startGpuMode --client-delay-start $CLIENT_DELAY_START
|
2019-10-10 11:12:13 -04:00
|
|
|
fi
|
|
|
|
|
2020-01-22 09:22:09 -07:00
|
|
|
execution_step "Waiting for bootstrap validator's stake percentage to fall below $BOOTSTRAP_VALIDATOR_MAX_STAKE_THRESHOLD %"
|
|
|
|
wait_for_bootstrap_validator_stake_drop "$BOOTSTRAP_VALIDATOR_MAX_STAKE_THRESHOLD"
|
2019-10-10 11:12:13 -04:00
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -n $TEST_DURATION_SECONDS ]]; then
|
|
|
|
execution_step "Wait ${TEST_DURATION_SECONDS} seconds to complete test"
|
|
|
|
sleep "$TEST_DURATION_SECONDS"
|
|
|
|
elif [[ "$APPLY_PARTITIONS" = "true" ]]; then
|
|
|
|
STATS_START_SECONDS=$SECONDS
|
|
|
|
execution_step "Wait $PARTITION_INACTIVE_DURATION before beginning to apply partitions"
|
|
|
|
sleep "$PARTITION_INACTIVE_DURATION"
|
|
|
|
for (( i=1; i<=PARTITION_ITERATION_COUNT; i++ )); do
|
|
|
|
execution_step "Partition Iteration $i of $PARTITION_ITERATION_COUNT"
|
|
|
|
execution_step "Applying netem config $NETEM_CONFIG_FILE for $PARTITION_ACTIVE_DURATION seconds"
|
|
|
|
net/net.sh netem --config-file "$NETEM_CONFIG_FILE"
|
|
|
|
sleep "$PARTITION_ACTIVE_DURATION"
|
|
|
|
|
|
|
|
execution_step "Resolving partitions for $PARTITION_INACTIVE_DURATION seconds"
|
|
|
|
net/net.sh netem --config-file "$NETEM_CONFIG_FILE" --netem-cmd cleanup
|
|
|
|
sleep "$PARTITION_INACTIVE_DURATION"
|
|
|
|
done
|
|
|
|
STATS_FINISH_SECONDS=$SECONDS
|
|
|
|
TEST_DURATION_SECONDS=$((STATS_FINISH_SECONDS - STATS_START_SECONDS))
|
|
|
|
else
|
|
|
|
# We should never get here
|
|
|
|
echo Test duration and partition config not defined
|
|
|
|
fi
|
|
|
|
|
2019-11-14 11:18:38 -05:00
|
|
|
execution_step "Collect statistics about run"
|
2019-10-10 11:12:13 -04:00
|
|
|
declare q_mean_tps='
|
2019-10-22 16:27:26 -06:00
|
|
|
SELECT ROUND(MEAN("median_sum")) as "mean_tps" FROM (
|
|
|
|
SELECT MEDIAN(sum_count) AS "median_sum" FROM (
|
|
|
|
SELECT SUM("count") AS "sum_count"
|
|
|
|
FROM "'$TESTNET_TAG'"."autogen"."bank-process_transactions"
|
|
|
|
WHERE time > now() - '"$TEST_DURATION_SECONDS"'s AND count > 0
|
|
|
|
GROUP BY time(1s), host_id)
|
|
|
|
GROUP BY time(1s)
|
2019-10-10 11:12:13 -04:00
|
|
|
)'
|
|
|
|
|
|
|
|
declare q_max_tps='
|
2019-10-22 16:27:26 -06:00
|
|
|
SELECT MAX("median_sum") as "max_tps" FROM (
|
|
|
|
SELECT MEDIAN(sum_count) AS "median_sum" FROM (
|
|
|
|
SELECT SUM("count") AS "sum_count"
|
|
|
|
FROM "'$TESTNET_TAG'"."autogen"."bank-process_transactions"
|
|
|
|
WHERE time > now() - '"$TEST_DURATION_SECONDS"'s AND count > 0
|
|
|
|
GROUP BY time(1s), host_id)
|
|
|
|
GROUP BY time(1s)
|
2019-10-10 11:12:13 -04:00
|
|
|
)'
|
|
|
|
|
|
|
|
declare q_mean_confirmation='
|
2019-10-21 20:00:17 -04:00
|
|
|
SELECT round(mean("duration_ms")) as "mean_confirmation_ms"
|
2019-10-10 11:12:13 -04:00
|
|
|
FROM "'$TESTNET_TAG'"."autogen"."validator-confirmation"
|
2019-10-21 23:24:46 -04:00
|
|
|
WHERE time > now() - '"$TEST_DURATION_SECONDS"'s'
|
2019-10-10 11:12:13 -04:00
|
|
|
|
|
|
|
declare q_max_confirmation='
|
2019-10-21 20:00:17 -04:00
|
|
|
SELECT round(max("duration_ms")) as "max_confirmation_ms"
|
2019-10-10 11:12:13 -04:00
|
|
|
FROM "'$TESTNET_TAG'"."autogen"."validator-confirmation"
|
2019-10-21 23:24:46 -04:00
|
|
|
WHERE time > now() - '"$TEST_DURATION_SECONDS"'s'
|
2019-10-10 11:12:13 -04:00
|
|
|
|
|
|
|
declare q_99th_confirmation='
|
2019-10-21 20:00:17 -04:00
|
|
|
SELECT round(percentile("duration_ms", 99)) as "99th_percentile_confirmation_ms"
|
2019-10-10 11:12:13 -04:00
|
|
|
FROM "'$TESTNET_TAG'"."autogen"."validator-confirmation"
|
2019-10-21 23:24:46 -04:00
|
|
|
WHERE time > now() - '"$TEST_DURATION_SECONDS"'s'
|
2019-10-10 11:12:13 -04:00
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
declare q_max_tower_distance_observed='
|
|
|
|
SELECT MAX("tower_distance") as "max_tower_distance" FROM (
|
|
|
|
SELECT last("slot") - last("root") as "tower_distance"
|
|
|
|
FROM "'$TESTNET_TAG'"."autogen"."tower-observed"
|
|
|
|
WHERE time > now() - '"$TEST_DURATION_SECONDS"'s
|
|
|
|
GROUP BY time(1s), host_id)'
|
|
|
|
|
2019-10-10 11:12:13 -04:00
|
|
|
curl -G "${INFLUX_HOST}/query?u=ro&p=topsecret" \
|
|
|
|
--data-urlencode "db=${TESTNET_TAG}" \
|
2020-01-22 13:46:50 -05:00
|
|
|
--data-urlencode "q=$q_mean_tps;$q_max_tps;$q_mean_confirmation;$q_max_confirmation;$q_99th_confirmation;$q_max_tower_distance_observed" |
|
2019-12-17 14:58:10 -05:00
|
|
|
python system-test/testnet-automation-json-parser.py >>"$RESULT_FILE"
|
2019-10-10 11:12:13 -04:00
|
|
|
|
2019-11-13 13:04:14 -05:00
|
|
|
execution_step "Writing test results to ${RESULT_FILE}"
|
2019-10-21 20:00:17 -04:00
|
|
|
RESULT_DETAILS=$(<"$RESULT_FILE")
|
|
|
|
upload-ci-artifact "$RESULT_FILE"
|
2019-10-10 11:12:13 -04:00
|
|
|
}
|
|
|
|
|
2019-11-13 13:04:14 -05:00
|
|
|
RESULT_DETAILS=
|
|
|
|
STEP=
|
|
|
|
execution_step "Initialize Environment"
|
|
|
|
|
2019-12-17 14:58:10 -05:00
|
|
|
cd "$(dirname "$0")/.."
|
2019-10-10 11:12:13 -04:00
|
|
|
|
2019-10-23 22:05:05 -06:00
|
|
|
[[ -n $TESTNET_TAG ]] || TESTNET_TAG=testnet-automation
|
|
|
|
[[ -n $INFLUX_HOST ]] || INFLUX_HOST=https://metrics.solana.com:8086
|
2020-01-22 09:22:09 -07:00
|
|
|
[[ -n $BOOTSTRAP_VALIDATOR_MAX_STAKE_THRESHOLD ]] || BOOTSTRAP_VALIDATOR_MAX_STAKE_THRESHOLD=66
|
2019-10-23 22:05:05 -06:00
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -z $NUMBER_OF_VALIDATOR_NODES ]]; then
|
2019-10-23 22:05:05 -06:00
|
|
|
echo NUMBER_OF_VALIDATOR_NODES not defined
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2019-11-09 09:38:06 -07:00
|
|
|
startGpuMode="off"
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -z $ENABLE_GPU ]]; then
|
2019-10-24 15:12:25 -06:00
|
|
|
ENABLE_GPU=false
|
|
|
|
fi
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ "$ENABLE_GPU" = "true" ]]; then
|
2019-10-24 15:12:25 -06:00
|
|
|
maybeEnableGpu="--enable-gpu"
|
2019-11-09 09:38:06 -07:00
|
|
|
startGpuMode="on"
|
2019-10-24 15:12:25 -06:00
|
|
|
fi
|
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -z $NUMBER_OF_CLIENT_NODES ]]; then
|
2019-10-23 22:05:05 -06:00
|
|
|
echo NUMBER_OF_CLIENT_NODES not defined
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2019-10-10 11:12:13 -04:00
|
|
|
if [[ -z $SOLANA_METRICS_CONFIG ]]; then
|
|
|
|
if [[ -z $SOLANA_METRICS_PARTIAL_CONFIG ]]; then
|
|
|
|
echo SOLANA_METRICS_PARTIAL_CONFIG not defined
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
export SOLANA_METRICS_CONFIG="db=$TESTNET_TAG,host=$INFLUX_HOST,$SOLANA_METRICS_PARTIAL_CONFIG"
|
|
|
|
fi
|
|
|
|
echo "SOLANA_METRICS_CONFIG: $SOLANA_METRICS_CONFIG"
|
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -z $ALLOW_BOOT_FAILURES ]]; then
|
2019-10-28 16:43:40 -06:00
|
|
|
ALLOW_BOOT_FAILURES=false
|
|
|
|
fi
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ "$ALLOW_BOOT_FAILURES" = "true" ]]; then
|
2019-10-28 16:43:40 -06:00
|
|
|
maybeCreateAllowBootFailures="--allow-boot-failures"
|
|
|
|
maybeStartAllowBootFailures="-F"
|
|
|
|
fi
|
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -z $USE_PUBLIC_IP_ADDRESSES ]]; then
|
2019-11-12 13:55:19 -05:00
|
|
|
USE_PUBLIC_IP_ADDRESSES=false
|
|
|
|
fi
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ "$USE_PUBLIC_IP_ADDRESSES" = "true" ]]; then
|
2019-11-12 13:55:19 -05:00
|
|
|
maybePublicIpAddresses="-P"
|
|
|
|
fi
|
|
|
|
|
2019-12-05 21:03:26 -05:00
|
|
|
: "${CLIENT_DELAY_START:=0}"
|
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
if [[ -z $APPLY_PARTITIONS ]]; then
|
|
|
|
APPLY_PARTITIONS=false
|
|
|
|
fi
|
|
|
|
if [[ "$APPLY_PARTITIONS" = "true" ]]; then
|
|
|
|
if [[ -n $TEST_DURATION_SECONDS ]]; then
|
|
|
|
echo Cannot accept TEST_DURATION_SECONDS and a parition looping config
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
elif [[ -z $TEST_DURATION_SECONDS ]]; then
|
|
|
|
echo TEST_DURATION_SECONDS not defined
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2019-10-10 11:12:13 -04:00
|
|
|
if [[ -z $CHANNEL ]]; then
|
2019-11-14 11:18:38 -05:00
|
|
|
execution_step "Downloading tar from build artifacts"
|
2019-10-10 11:12:13 -04:00
|
|
|
buildkite-agent artifact download "solana-release*.tar.bz2" .
|
|
|
|
fi
|
|
|
|
|
|
|
|
# shellcheck disable=SC1091
|
|
|
|
source ci/upload-ci-artifact.sh
|
2019-12-17 14:58:10 -05:00
|
|
|
source system-test/upload_results_to_slack.sh
|
2019-10-10 11:12:13 -04:00
|
|
|
|
|
|
|
maybeClientOptions=${CLIENT_OPTIONS:+"-c"}
|
2019-10-24 15:12:25 -06:00
|
|
|
maybeCustomMachineType=${VALIDATOR_NODE_MACHINE_TYPE:+"--custom-machine-type"}
|
2019-10-10 11:12:13 -04:00
|
|
|
|
|
|
|
IFS=, read -r -a TESTNET_CLOUD_ZONES <<<"${TESTNET_ZONES}"
|
|
|
|
|
2019-10-21 20:00:17 -04:00
|
|
|
RESULT_FILE="$TESTNET_TAG"_SUMMARY_STATS_"$NUMBER_OF_VALIDATOR_NODES".log
|
2019-10-23 22:05:05 -06:00
|
|
|
rm -f "$RESULT_FILE"
|
2019-10-21 20:00:17 -04:00
|
|
|
|
|
|
|
TEST_PARAMS_TO_DISPLAY=(CLOUD_PROVIDER \
|
|
|
|
NUMBER_OF_VALIDATOR_NODES \
|
2019-10-24 15:12:25 -06:00
|
|
|
ENABLE_GPU \
|
2019-10-21 20:00:17 -04:00
|
|
|
VALIDATOR_NODE_MACHINE_TYPE \
|
|
|
|
NUMBER_OF_CLIENT_NODES \
|
|
|
|
CLIENT_OPTIONS \
|
2019-12-05 21:03:26 -05:00
|
|
|
CLIENT_DELAY_START \
|
2019-10-21 20:00:17 -04:00
|
|
|
TESTNET_ZONES \
|
2019-10-21 23:24:46 -04:00
|
|
|
TEST_DURATION_SECONDS \
|
2019-11-13 14:41:42 -05:00
|
|
|
USE_PUBLIC_IP_ADDRESSES \
|
2019-10-28 16:43:40 -06:00
|
|
|
ALLOW_BOOT_FAILURES \
|
2020-01-22 13:46:50 -05:00
|
|
|
ADDITIONAL_FLAGS \
|
|
|
|
APPLY_PARTITIONS \
|
|
|
|
NETEM_CONFIG_FILE \
|
|
|
|
PARTITION_ACTIVE_DURATION \
|
|
|
|
PARTITION_INACTIVE_DURATION \
|
|
|
|
PARTITION_ITERATION_COUNT \
|
|
|
|
)
|
2019-10-21 20:00:17 -04:00
|
|
|
|
|
|
|
TEST_CONFIGURATION=
|
2020-01-22 13:46:50 -05:00
|
|
|
for i in "${TEST_PARAMS_TO_DISPLAY[@]}"; do
|
|
|
|
if [[ -n ${!i} ]]; then
|
2019-10-21 20:00:17 -04:00
|
|
|
TEST_CONFIGURATION+="${i} = ${!i} | "
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2020-01-22 13:46:50 -05:00
|
|
|
TESTNET_START_UNIX_MSECS="$(($(date +%s%N)/1000000))"
|
2019-10-21 20:00:17 -04:00
|
|
|
|
2019-10-10 11:12:13 -04:00
|
|
|
launchTestnet
|