|
Akka/Scala example source code file (akka-cluster)
The akka-cluster Akka example source code
#!/bin/bash
# ============== Akka Cluster Administration Tool ==============
#
# This script is meant to be used from within the Akka distribution.
#
# Add these options to the sbt or startup script:
# java \
# -Dcom.sun.management.jmxremote.port=9999 \
# -Dcom.sun.management.jmxremote.ssl=false \
# -Dcom.sun.management.jmxremote.authenticate=false \
# ...
# ==============================================================
# FIXME support authentication? if so add: -Dcom.sun.management.jmxremote.password.file=<path to file> AND tweak this script to support it (arg need 'user:passwd' instead of '-')
declare AKKA_HOME="$(cd "$(cd "$(dirname "$0")"; pwd -P)"/..; pwd)"
SELF=`basename $0` # script name
HOST=$1 # cluster node to talk to through JMX
PORT=$2
shift 2
JMX_CLIENT="java -jar $AKKA_HOME/bin/jmxsh-R5.jar -h $HOST -p $PORT /dev/fd/0"
function invoke() {
echo jmx_invoke -m akka:type=Cluster "$@" | $JMX_CLIENT
}
function get() {
echo "puts [jmx_get -m akka:type=Cluster \"$1\"]" | $JMX_CLIENT
}
function ensureNodeIsRunningAndAvailable {
REPLY=$(get Available) # redirects STDERR to STDOUT before capturing it
if [[ "$REPLY" != *true ]]; then
echo "Akka cluster node is not available on $HOST, due to $REPLY"
exit 1
fi
}
# switch on command
case "$1" in
join)
if [ $# -ne 2 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> join <node-url-to-join>"
exit 1
fi
ACTOR_SYSTEM_URL=$2
echo "$HOST is JOINING cluster node $ACTOR_SYSTEM_URL"
invoke join $ACTOR_SYSTEM_URL
;;
leave)
if [ $# -ne 2 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> leave <node-url-to-join>"
exit 1
fi
ensureNodeIsRunningAndAvailable
ACTOR_SYSTEM_URL=$2
echo "Scheduling $ACTOR_SYSTEM_URL to LEAVE cluster"
invoke leave $ACTOR_SYSTEM_URL
;;
down)
if [ $# -ne 2 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> down <node-url-to-join>"
exit 1
fi
ensureNodeIsRunningAndAvailable
ACTOR_SYSTEM_URL=$2
echo "Marking $ACTOR_SYSTEM_URL as DOWN"
invoke down $ACTOR_SYSTEM_URL
;;
member-status)
if [ $# -ne 1 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> member-status"
exit 1
fi
ensureNodeIsRunningAndAvailable
echo "Querying member status for $HOST"
get MemberStatus
;;
cluster-status)
if [ $# -ne 1 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> cluster-status"
exit 1
fi
ensureNodeIsRunningAndAvailable
echo "Querying cluster status"
get ClusterStatus
;;
members)
if [ $# -ne 1 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> members"
exit 1
fi
ensureNodeIsRunningAndAvailable
echo "Querying members"
get Members
;;
unreachable)
if [ $# -ne 1 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> unreachable"
exit 1
fi
ensureNodeIsRunningAndAvailable
echo "Querying unreachable members"
get Unreachable
;;
leader)
if [ $# -ne 1 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> leader"
exit 1
fi
ensureNodeIsRunningAndAvailable
echo "Checking leader status"
get Leader
;;
is-singleton)
if [ $# -ne 1 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> is-singleton"
exit 1
fi
ensureNodeIsRunningAndAvailable
echo "Checking for singleton cluster"
get Singleton
;;
is-available)
if [ $# -ne 1 ]; then
echo "Usage: $SELF <node-hostname> <jmx-port> is-available"
exit 1
fi
ensureNodeIsRunningAndAvailable
echo "Checking if member node on $HOST is AVAILABLE"
get Available
;;
*)
printf "Usage: bin/$SELF <node-hostname> <jmx-port> <command> ...\n"
printf "\n"
printf "Supported commands are:\n"
printf "%26s - %s\n" "join <node-url>" "Sends request a JOIN node with the specified URL"
printf "%26s - %s\n" "leave <node-url>" "Sends a request for node with URL to LEAVE the cluster"
printf "%26s - %s\n" "down <node-url>" "Sends a request for marking node with URL as DOWN"
printf "%26s - %s\n" member-status "Asks the member node for its current status"
printf "%26s - %s\n" members "Asks the cluster for addresses of current members"
printf "%26s - %s\n" unreachable "Asks the cluster for addresses of unreachable members"
printf "%26s - %s\n" cluster-status "Asks the cluster for its current status (member ring, unavailable nodes, meta data etc.)"
printf "%26s - %s\n" leader "Asks the cluster who the current leader is"
printf "%26s - %s\n" is-singleton "Checks if the cluster is a singleton cluster (single node cluster)"
printf "%26s - %s\n" is-available "Checks if the member node is available"
printf "Where the <node-url> should be on the format of 'akka.tcp://actor-system-name@hostname:port'\n"
printf "\n"
printf "Examples: bin/$SELF localhost 9999 is-available\n"
printf " bin/$SELF localhost 9999 join akka.tcp://MySystem@darkstar:2552\n"
printf " bin/$SELF localhost 9999 cluster-status\n"
exit 1
;;
esac
Other Akka source code examplesHere is a short list of links related to this Akka akka-cluster source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.