Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

executable file 173 lines (144 sloc) 4.408 kb
#!/bin/bash
RUNNER_SCRIPT_DIR=$(cd ${0%/*} && pwd)
RUNNER_SCRIPT=${0##*/}
RUNNER_BASE_DIR=${RUNNER_SCRIPT_DIR%/*}
RUNNER_ETC_DIR=$RUNNER_BASE_DIR/etc
RUNNER_LOG_DIR=$RUNNER_BASE_DIR/log
RUNNER_USER=
# Make sure this script is running as the appropriate user
if [ "$RUNNER_USER" -a "x$LOGNAME" != "x$RUNNER_USER" ]; then
type -p sudo > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "sudo doesn't appear to be installed and your EUID isn't $RUNNER_USER" 1>&2
exit 1
fi
echo "Attempting to restart script through sudo -u $RUNNER_USER"
exec sudo -u $RUNNER_USER -i $RUNNER_SCRIPT_DIR/$RUNNER_SCRIPT "$@"
fi
# Make sure CWD is set to runner base dir
cd $RUNNER_BASE_DIR
# Extract the target node name from node.args
NAME_ARG=`grep -e '-[s]*name' $RUNNER_ETC_DIR/vm.args`
if [ -z "$NAME_ARG" ]; then
echo "vm.args needs to have either -name or -sname parameter."
exit 1
fi
# Learn how to specify node name for connection from remote nodes
echo "$NAME_ARG" | grep '^-sname' > /dev/null 2>&1
if [ "X$?" = "X0" ]; then
NAME_PARAM="-sname"
NAME_HOST=""
else
NAME_PARAM="-name"
echo "$NAME_ARG" | grep '@.*' > /dev/null 2>&1
if [ "X$?" = "X0" ]; then
NAME_HOST=`echo "${NAME_ARG}" | sed -e 's/.*\(@.*\)$/\1/'`
else
NAME_HOST=""
fi
fi
# Extract the target cookie
COOKIE_ARG=`grep '\-setcookie' $RUNNER_ETC_DIR/vm.args`
if [ -z "$COOKIE_ARG" ]; then
echo "vm.args needs to have a -setcookie parameter."
exit 1
fi
# Identify the script name
SCRIPT=`basename $0`
# Parse out release and erts info
START_ERL=`cat $RUNNER_BASE_DIR/releases/start_erl.data`
ERTS_VSN=${START_ERL% *}
APP_VSN=${START_ERL#* }
# Add ERTS bin dir to our path
ERTS_PATH=$RUNNER_BASE_DIR/erts-$ERTS_VSN/bin
# Setup command to control the node
NODETOOL="$ERTS_PATH/escript $ERTS_PATH/nodetool $NAME_ARG $COOKIE_ARG"
run()
{
mod=$1
shift
cmd=$1
shift
# Make sure the local node IS running
RES=`$NODETOOL ping`
if [ "$RES" != "pong" ]; then
echo "Node is not running!"
exit 1
fi
$NODETOOL rpc $mod $cmd $@
}
# Check the first argument for instructions
case "$1" in
join)
shift
run {{appid}}_console join $@
;;
leave)
shift
run {{appid}}_console leave $@
;;
remove)
if [ $# -ne 2 ]; then
echo "Usage: $SCRIPT remove <node>"
exit 1
fi
shift
run {{appid}}_console remove $@
;;
member_status)
if [ $# -ne 1 ]; then
echo "Usage: $SCRIPT member_status"
exit 1
fi
shift
run riak_core_console member_status $@
;;
ring_status)
if [ $# -ne 1 ]; then
echo "Usage: $SCRIPT ring_status"
exit 1
fi
shift
run riak_core_console ring_status $@
;;
services)
$NODETOOL rpcterms riak_core_node_watcher services ''
;;
wait-for-service)
SVC=$2
TARGETNODE=$3
if [ $# -lt 3 ]; then
echo "Usage: $SCRIPT wait-for-service <service_name> <target_node>"
exit 1
fi
while (true); do
# Make sure riak_core_node_watcher is up and running locally before trying to query it
# to avoid ugly (but harmless) error messages
NODEWATCHER=`$NODETOOL rpcterms erlang whereis "'riak_core_node_watcher'."`
if [ "$NODEWATCHER" = "undefined" ]; then
echo "$SVC is not up: node watcher is not running"
continue
fi
# Get the list of services that are available on the requested node
SERVICES=`$NODETOOL rpcterms riak_core_node_watcher services "'${TARGETNODE}'."`
echo "$SERVICES" | grep "[[,]$SVC[],]" > /dev/null 2>&1
if [ "X$?" = "X0" ]; then
echo "$SVC is up"
exit 0
else
echo "$SVC is not up: $SERVICES"
fi
sleep 3
done
;;
ringready)
shift
run {{appid}}_console ringready $@
;;
*)
echo "Usage: $SCRIPT { join | leave | ringready | remove |"
echo " services | wait-for-service | member_status |"
echo " ring_status }"
exit 1
;;
esac
Jump to Line
Something went wrong with that request. Please try again.