glusterfs/tests/cluster.rc
Anand Avati 89ea458316 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: Ieb13ed9f4a72ac0321db0ca0844c7b294145bb32
BUG: 913555
Signed-off-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.org/4566
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
2013-02-26 09:07:13 -08:00

107 lines
1.7 KiB
Bash
Executable File

#!/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
}