#!/bin/bash # set -e usage() { cat < --pubhosts --subhosts All perftest args must come before --pubhosts or --subhosts. If --npubs or --nsubs is larger than corresponding hosts list, the list is used round-robin. Do not pass action flags --setup, --control, --publish, --subscribe they will be passed to the appropriate processes. EOF exit 1 } collect() { eval $COLLECT=\""\$$COLLECT $*"\"; } COLLECT=ARGS while test $# -gt 0; do case $1 in --publish|--subscribe|--setup|--control) usage ;; --npubs) collect $1 $2; NPUBS=$2; shift 2 ;; --nsubs) collect $1 $2; NSUBS=$2; shift 2 ;; --pubhosts) COLLECT=PUBHOSTS; shift ;; --subhosts) COLLECT=SUBHOSTS; shift ;; *) collect $1; shift ;; esac done if [ -z "$PUBHOSTS" ]; then echo "Missing --pubhosts"; usage; fi if [ -z "$SUBHOSTS" ]; then echo "Missing --subhosts"; usage; fi PERFTEST="`PATH=$PWD:$PATH which perftest` $ARGS" start() { ssh $2 $PERFTEST --$1 } $PERFTEST --setup PUBS=($PUBHOSTS) for (( i=0 ; i < $NPUBS ; ++i)); do start publish ${PUBS[i % ${#PUBS[*]}]} & done SUBS=($SUBHOSTS) for (( i=0 ; i < $NSUBS ; ++i)); do start subscribe ${SUBS[i % ${#SUBS[*]}]} & done $PERFTEST --control