diff options
Diffstat (limited to 'qpid/cpp/src/tests/qpid-test-cluster')
-rwxr-xr-x | qpid/cpp/src/tests/qpid-test-cluster | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/qpid/cpp/src/tests/qpid-test-cluster b/qpid/cpp/src/tests/qpid-test-cluster new file mode 100755 index 0000000000..9887406ef9 --- /dev/null +++ b/qpid/cpp/src/tests/qpid-test-cluster @@ -0,0 +1,109 @@ +#!/bin/sh +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +usage() { + echo "Usage: `basename $0` [options] start|stop|restart|check [hosts] +Start/stop/restart a cluster on specified hosts or on \$HOSTS via ssh. + +Options: + -l USER Run qpidd and copy files as USER. + -e SCRIPT Source SCRIPT for environment settings. Copies SCRIPT to each host. + Default is $DEFAULT_ENV. + -c CONFIG Use CONFIG as qpidd config file. Copies CONFIG to each host. + Default is $DEFAULT_CONF + -d Delete data-dir and log file before starting broker. +" + exit 1 +} + +DEFAULT_CONF=~/qpid-test-qpidd.conf +DEFAULT_ENV=~/qpid-test-env.sh + +test -f $DEFAULT_CONF && CONF_FILE=$DEFAULT_CONF +test -f $DEFAULT_ENV && ENV_FILE=$DEFAULT_ENV + +while getopts "l:e:c:d" opt; do + case $opt in + l) SSHOPTS="-l$OPTARG $SSHOPTS" ; RSYNC_USER="$OPTARG@" ;; + e) ENV_FILE=$OPTARG ;; + c) CONF_FILE=$OPTARG ;; + d) DO_DELETE=1 ;; + *) usage;; + esac +done +shift `expr $OPTIND - 1` +test "$*" || usage +CMD=$1; shift +HOSTS=${*:-$HOSTS} + +conf_value() { test -f "$CONF_FILE" && awk -F= "/^$1=/ {print \$2}" $CONF_FILE; } + +if test -n "$CONF_FILE"; then + test -f "$CONF_FILE" || { echo Config file not found: $CONF_FILE; exit 1; } + RSYNCFILES="$RSYNCFILES $CONF_FILE" + QPIDD_ARGS="$QPIDD_ARGS --config $CONF_FILE" + CONF_PORT=`conf_value port` + CONF_DATA_DIR=`conf_value data-dir` + CONF_LOG_FILE=`conf_value log-to-file` +fi + +if test -n "$ENV_FILE"; then + test -f "$ENV_FILE" || { echo Environment file not found: $ENV_FILE; exit 1; } + RSYNCFILES="$RSYNCFILES $ENV_FILE" + SOURCE_ENV="source $ENV_FILE ; " +fi + +test -n "$RSYNCFILES" && rsynchosts $RSYNCFILES # Copy conf/env files to all hosts + +do_start() { + for h in $HOSTS; do + COMMAND="qpidd -d $QPIDD_ARGS" + id -nG | grep '\<ais\>' >/dev/null && COMMAND="sg ais -c '$COMMAND'" + if test "$DO_DELETE"; then COMMAND="rm -rf $CONF_DATA_DIR $CONF_LOG_FILE; $COMMAND"; fi + ssh $h "$SOURCE_ENV $COMMAND" || { echo "Failed to start on $h"; exit 1; } + done +} + +do_stop() { + for h in $HOSTS; do + ssh $h "$SOURCE_ENV qpidd -q --no-module-dir --no-data-dir $QPIDD_ARGS" + done +} + +do_status() { + for h in $HOSTS; do + if ssh $h "$SOURCE_ENV qpidd -c --no-module-dir --no-data-dir $QPIDD_ARGS > /dev/null"; then + echo "$h ok" + else + echo "$h not running" + STATUS=1 + fi + done +} + +case $CMD in + start) do_start ;; + stop) do_stop ;; + restart) do_stop ; do_start ;; + status) do_status ;; + *) usage;; +esac + +exit $STATUS |