From 5cd1fb486f200eb18f1bd7b3b9739dfa25cc243c Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Tue, 26 Jun 2018 16:46:17 -0700 Subject: [PATCH] Automatically add rsync:// prefix to URLs that need it --- multinode-demo/client.sh | 8 +++++--- multinode-demo/common.sh | 19 +++++++++++++++++++ multinode-demo/drone.sh | 9 +++++---- multinode-demo/validator.sh | 35 ++++++++++++++++++++++++++++------- 4 files changed, 57 insertions(+), 14 deletions(-) diff --git a/multinode-demo/client.sh b/multinode-demo/client.sh index 0276d29a3..943ac92b8 100755 --- a/multinode-demo/client.sh +++ b/multinode-demo/client.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# usage: $0 " +# usage: $0 " # here=$(dirname "$0") @@ -11,10 +11,12 @@ SOLANA_CONFIG_DIR=config-client-demo leader=${1:-${here}/..} # Default to local solana repo count=${2:-1} +rsync_leader_url=$(rsync_url "$leader") + set -ex mkdir -p $SOLANA_CONFIG_DIR -rsync -vz "$leader"/config/leader.json $SOLANA_CONFIG_DIR/ -rsync -vz "$leader"/config/mint-demo.json $SOLANA_CONFIG_DIR/ +rsync -vPz "$rsync_leader_url"/config/leader.json $SOLANA_CONFIG_DIR/ +rsync -vPz "$rsync_leader_url"/config/mint-demo.json $SOLANA_CONFIG_DIR/ # shellcheck disable=SC2086 # $solana_client_demo should not be quoted exec $solana_client_demo \ diff --git a/multinode-demo/common.sh b/multinode-demo/common.sh index 1bf70300a..759cfefec 100644 --- a/multinode-demo/common.sh +++ b/multinode-demo/common.sh @@ -47,3 +47,22 @@ export RUST_BACKTRACE=1 [[ $(uname) = Linux ]] && (set -x; sudo sysctl -w net.core.rmem_max=26214400 1>/dev/null 2>/dev/null) SOLANA_CONFIG_DIR=${SNAP_DATA:-$PWD}/config + +rsync_url() { # adds the 'rsync://` prefix to URLs that need it + local url="$1" + + if [[ "$url" =~ ^.*:.*$ ]]; then + # assume remote-shell transport when colon is present, use $url unmodified + echo "$url" + return + fi + + if [[ -d "$url" ]]; then + # assume local directory if $url is a valid directory, use $url unmodified + echo "$url" + return + fi + + # Default to rsync:// URL + echo "rsync://$url" +} diff --git a/multinode-demo/drone.sh b/multinode-demo/drone.sh index 07e3d1863..de9902364 100755 --- a/multinode-demo/drone.sh +++ b/multinode-demo/drone.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# usage: $0 +# usage: $0 # here=$(dirname "$0") @@ -19,15 +19,16 @@ if [[ -d "$SNAP" ]]; then # Assume drone is running on the same node as the leader by default leader_address="localhost" fi - leader=rsync://"$leader_address" + leader="$leader_address" else leader=${1:-${here}/..} # Default to local solana repo fi +rsync_leader_url=$(rsync_url "$leader") set -ex mkdir -p $SOLANA_CONFIG_DIR -rsync -vz "$leader"/config/leader.json $SOLANA_CONFIG_DIR/ -rsync -vz "$leader"/config/mint-demo.json $SOLANA_CONFIG_DIR/ +rsync -vPz "$rsync_leader_url"/config/leader.json $SOLANA_CONFIG_DIR/ +rsync -vPz "$rsync_leader_url"/config/mint-demo.json $SOLANA_CONFIG_DIR/ # shellcheck disable=SC2086 # $solana_drone should not be quoted exec $solana_drone \ diff --git a/multinode-demo/validator.sh b/multinode-demo/validator.sh index b19d34c5b..3d903b6c8 100755 --- a/multinode-demo/validator.sh +++ b/multinode-demo/validator.sh @@ -4,7 +4,11 @@ here=$(dirname "$0") source "$here"/common.sh usage() { - echo "usage: $0 [network path to solana repo on leader machine] [network ip address of leader]" + if [[ -n "$1" ]]; then + echo "$*" + echo + fi + echo "usage: $0 [rsync network path to solana repo on leader machine] [network ip address of leader]" exit 1 } @@ -20,13 +24,28 @@ if [[ -d "$SNAP" ]]; then # Select leader from the Snap configuration leader_address="$(snapctl get leader-address)" if [[ -z "$leader_address" ]]; then - # Assume drone is running on the same node as the leader by default - leader_address="localhost" + # Assume public testnet by default + leader_address=35.230.65.68 # testnet.solana.com fi - leader=rsync://"$leader_address" + leader="$leader_address" else - leader=${1:-${here}/..} # Default to local solana repo - leader_address=${2:-127.0.0.1} # Default to local leader + if [[ -n "$3" ]]; then + usage + fi + + if [[ -z "$1" ]]; then + leader=${1:-${here}/..} # Default to local solana repo + leader_address=${2:-127.0.0.1} # Default to local leader + elif [[ -z "$2" ]]; then + leader="$1" + leader_address=$(dig +short "$1" | head -n1) + if [[ -z "$leader_address" ]]; then + usage "Error: unable to resolve IP address for $leader" + fi + else + leader="$1" + leader_address="$2" + fi fi leader_port=8001 @@ -42,10 +61,12 @@ fi exit 1 } +rsync_leader_url=$(rsync_url "$leader") + set -ex SOLANA_LEADER_CONFIG_DIR="$SOLANA_CONFIG_DIR"/leader-config rm -rf "$SOLANA_LEADER_CONFIG_DIR" -rsync -vPrz "${leader}"/config/ "$SOLANA_LEADER_CONFIG_DIR" +rsync -vPrz "$rsync_leader_url"/config/ "$SOLANA_LEADER_CONFIG_DIR" ls -lh "$SOLANA_LEADER_CONFIG_DIR" # shellcheck disable=SC2086 # $program should not be quoted