diff options
author | Jeff Darcy <jdarcy@redhat.com> | 2013-04-15 10:32:56 -0400 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-04-15 20:48:26 -0700 |
commit | 695d173b13f583de846720b66fc201bd84969330 (patch) | |
tree | 767d71d8b0a14969f9538be2a5961b88d88f00ec | |
parent | b934b278be2a26a79b3715618ec4c368feb55ad9 (diff) |
tests/cluster.rc: support for virtual multi-server glusterd
tests
Since http://review.gluster.org/4556 glusterd is capable of running
many instances of itself on a single system. This patch exploits
that feature and enhances the regression test framework to expose
handy primitives so that test cases may be written to test glusterd
in a cluster.
Usage:
1. Include "$(dirname)/../cluster.rc" to get access to the extensions
2. Call launch_cluster $N where $N is the count of virtual servers
Calling launch_cluster, starts $N glusterds which bind to $N different
IPs and dynamically defines these primitives:
- Variables $H1 .. $Hn assigned to hostnames of each "server".
- Variables $CLI_1 .. $CLI_n assigned as commands to run CLI commands
on the corresponding N'th server.
- Variables $B1 .. $Bn assigned to the backend directories on each
"server".
- Function kill_glusterd, which accepts a parameter - index number of
glusterd to be killed.
- Variables $glusterd_1 .. $glusterd_n assigned to the command lines
to restart the corresponding glusterd, if it was previously killed.
The current set of primitives and functions were implemented with the goal
of satisfying ./tests/bugs/bug-913555.t. The API will be made richer as
we add more cluster test cases
Change-Id: I6e79c58098ed0862cf75a0b56e4ce384ec2e4eb2
BUG: 913555
Original-author: Anand Avati <avati@redhat.com>
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.org/4836
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
-rw-r--r-- | tests/cluster.rc | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/cluster.rc b/tests/cluster.rc new file mode 100644 index 00000000000..1c06bca4766 --- /dev/null +++ b/tests/cluster.rc @@ -0,0 +1,106 @@ +#!/bin/bash + +CLUSTER_PFX="127.1.1"; # ".x" for each glusterd +CLUSTER_COUNT=1; # Just initial definition + +function launch_cluster() { + local count=$1; + + CLUSTER_COUNT=$count; + + define_backends $count; + define_hosts $count; + define_glusterds $count; + define_clis $count; + + start_glusterds; +} + + +function define_backends() { + local b; + + for i in `seq 1 $count`; do + eval "B$i=$B0/$i"; + done + + for i in `seq 1 $count`; do + b="B$i"; + mkdir -pv ${!b}/glusterd; + done +} + + +function define_glusterds() { + local count=$1; + local h; + local b; + local wopt; + local bopt; + local popt; + + for i in `seq 1 $count`; do + b="B$i"; + h="H$i"; + wopt="management.working-directory=${!b}/glusterd"; + bopt="management.transport.socket.bind-address=${!h}"; + popt="--pid-file=${!b}/glusterd.pid"; + eval "glusterd_$i='glusterd --xlator-option $wopt --xlator-option $bopt $popt'"; + eval "glusterd$i='glusterd --xlator-option $wopt --xlator-option $bopt $popt'"; + done +} + + +function start_glusterds() { + local g; + + for i in `seq 1 $CLUSTER_COUNT`; do + g="glusterd_$i"; + ${!g}; + done +} + + +function kill_glusterd() { + local index=$1; + local b; + local pidfile; + + b="B$index"; + pidfile="${!b}/glusterd.pid"; + + kill `cat $pidfile`; +} + + +function kill_node() { + local index=$1; + local h; + + h="H$index"; + + kill -9 $(ps -ef | grep gluster | grep ${!h} | awk '{print $2}'); +} + + +function define_hosts() { + local count=$1; + + for i in `seq 1 $count`; do + eval "H_$i=${CLUSTER_PFX}.$i" + eval "H$i=${CLUSTER_PFX}.$i"; + done +} + + +function define_clis() { + local count=$1; + local h; + + for i in `seq 1 $count`; do + h="H$i"; + eval "CLI_$i='$CLI --remote-host=${!h}'"; + eval "CLI$i='$CLI --remote-host=${!h}'"; + done +} + |