diff --git a/bin/benchmark-run-all.sh b/bin/benchmark-run-all.sh index b83f209..9a6ee52 100755 --- a/bin/benchmark-run-all.sh +++ b/bin/benchmark-run-all.sh @@ -71,7 +71,7 @@ function define_ips() { # Defining IP of the local machine. local local_ip_addresses=`ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'` - local comma_separated_ips="${SERVER_HOSTS},${DRIVER_HOSTS}" + local comma_separated_ips="${SERVER_HOSTS},${DRIVER_HOSTS},${SERVER_GROUP1_HOSTS},${SERVER_GROUP2_HOSTS},${SERVER_GROUP3_HOSTS}" local ips=${comma_separated_ips//,/ } local uniq_ips=`echo "${ips[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '` for local_ip in ${local_ip_addresses[@]} diff --git a/bin/benchmark-servers-start.sh b/bin/benchmark-servers-start.sh index 4f89913..fe25598 100755 --- a/bin/benchmark-servers-start.sh +++ b/bin/benchmark-servers-start.sh @@ -111,95 +111,108 @@ CUR_DIR=$(pwd) DS="" id=0 - -IFS=',' read -ra hosts0 <<< "${SERVER_HOSTS}" -for host_name in "${hosts0[@]}"; +for grp in 0 1 2 3 ; do - CONFIG_PRM="-id ${id} ${CONFIG}" - - suffix=`echo "${CONFIG}" | tail -c 60 | sed 's/ *$//g'` + if [[ "$grp" == "0" ]] ; then + SRV_HOST_TMP="${SERVER_HOSTS}" + else + eval SRV_HOST_TMP='$'"SERVER_GROUP${grp}_HOSTS" + fi - echo "<"$(date +"%H:%M:%S")"> Starting server config '..."${suffix}"' on "${host_name}" with id=${id}" + if [[ -z "$SRV_HOST_TMP" ]]; then + break + fi - now=`date +'%H%M%S'` + IFS=',' read -ra hosts0 <<< "${SRV_HOST_TMP}" - # Extract description. - IFS=' ' read -ra cfg0 <<< "${CONFIG}" - for cfg00 in "${cfg0[@]}"; + for host_name in "${hosts0[@]}"; do - if [[ ${found} == 'true' ]]; then - found="" - DS=${cfg00} - fi + CONFIG_PRM="-id ${id} ${CONFIG}" + + suffix=`echo "${CONFIG}" | tail -c 60 | sed 's/ *$//g'` + + echo "<"$(date +"%H:%M:%S")"> Starting server config '..."${suffix}"' on "${host_name}" with id=${id}" + + now=`date +'%H%M%S'` + + # Extract description. + IFS=' ' read -ra cfg0 <<< "${CONFIG}" + for cfg00 in "${cfg0[@]}"; + do + if [[ ${found} == 'true' ]]; then + found="" + DS=${cfg00} + fi + + if [[ ${cfg00} == '-ds' ]] || [[ ${cfg00} == '--descriptions' ]]; then + found="true" + fi + done - if [[ ${cfg00} == '-ds' ]] || [[ ${cfg00} == '--descriptions' ]]; then - found="true" + file_log=${LOGS_DIR}"/"${now}"-id"${id}"-"${host_name}"-"${DS}".log" + + if [[ ${JVM_OPTS} == *"PrintGC"* ]] + then + JVM_OPTS=${JVM_OPTS}" -Xloggc:${LOGS_DIR}/gc-${now}-server-id${id}-${host_name}-${DS}.log" fi - done - file_log=${LOGS_DIR}"/"${now}"-id"${id}"-"${host_name}"-"${DS}".log" + export JAVA_HOME=${JAVA_HOME} + export MAIN_CLASS='org.yardstickframework.BenchmarkServerStartUp' + export JVM_OPTS="${JVM_OPTS}${SERVER_JVM_OPTS} -Dyardstick.server${id}" + export CP=${CP} + export CUR_DIR=${CUR_DIR} + export PROPS_ENV0=${PROPS_ENV} + + if [[ ${host_name} = "127.0.0.1" || ${host_name} = "localhost" ]] + then + mkdir -p ${LOGS_DIR} + + nohup ${SCRIPT_DIR}/benchmark-bootstrap.sh ${CONFIG_PRM} "--config" ${CONFIG_INCLUDE} "--logsFolder" ${LOGS_DIR} \ + "--remoteuser" ${REMOTE_USER} "--remoteHostName" ${host_name} "--serverNameNumber" ${grp} > ${file_log} 2>& 1 & + else + ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no ${REMOTE_USER}"@"${host_name} mkdir -p ${LOGS_DIR} + + ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no ${REMOTE_USER}"@"${host_name} \ + "JAVA_HOME='${JAVA_HOME}'" \ + "MAIN_CLASS='${MAIN_CLASS}'" "JVM_OPTS='${JVM_OPTS}'" "CP='${CP}'" \ + "CUR_DIR='${CUR_DIR}'" "PROPS_ENV0='${PROPS_ENV}'" \ + "nohup ${SCRIPT_DIR}/benchmark-bootstrap.sh ${CONFIG_PRM} "--config" ${CONFIG_INCLUDE} "--logsFolder" ${LOGS_DIR} \ + "--remoteuser" ${REMOTE_USER} "--remoteHostName" ${host_name} "--serverNameNumber" ${grp} > ${file_log} 2>& 1 &" + fi - if [[ ${JVM_OPTS} == *"PrintGC"* ]] - then - JVM_OPTS=${JVM_OPTS}" -Xloggc:${LOGS_DIR}/gc-${now}-server-id${id}-${host_name}-${DS}.log" - fi - export JAVA_HOME=${JAVA_HOME} - export MAIN_CLASS='org.yardstickframework.BenchmarkServerStartUp' - export JVM_OPTS="${JVM_OPTS}${SERVER_JVM_OPTS} -Dyardstick.server${id}" - export CP=${CP} - export CUR_DIR=${CUR_DIR} - export PROPS_ENV0=${PROPS_ENV} - if [[ ${host_name} = "127.0.0.1" || ${host_name} = "localhost" ]] - then - mkdir -p ${LOGS_DIR} + # Start a restarter if needed. + if [[ "${RESTART_SERVERS}" != "" ]] && [[ "${RESTART_SERVERS}" != "true" ]]; then + IFS=',' read -ra hostsToRestart0 <<< "${RESTART_SERVERS}" + for host2Timeout in "${hostsToRestart0[@]}"; + do + IFS=':' read -ra hostToRestart <<< "${host2Timeout}" - nohup ${SCRIPT_DIR}/benchmark-bootstrap.sh ${CONFIG_PRM} "--config" ${CONFIG_INCLUDE} "--logsFolder" ${LOGS_DIR} \ - "--remoteuser" ${REMOTE_USER} "--remoteHostName" ${host_name} > ${file_log} 2>& 1 & - else - ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no ${REMOTE_USER}"@"${host_name} mkdir -p ${LOGS_DIR} - - ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no ${REMOTE_USER}"@"${host_name} \ - "JAVA_HOME='${JAVA_HOME}'" \ - "MAIN_CLASS='${MAIN_CLASS}'" "JVM_OPTS='${JVM_OPTS}'" "CP='${CP}'" \ - "CUR_DIR='${CUR_DIR}'" "PROPS_ENV0='${PROPS_ENV}'" \ - "nohup ${SCRIPT_DIR}/benchmark-bootstrap.sh ${CONFIG_PRM} "--config" ${CONFIG_INCLUDE} "--logsFolder" ${LOGS_DIR} \ - "--remoteuser" ${REMOTE_USER} "--remoteHostName" ${host_name} > ${file_log} 2>& 1 &" - fi + host_to_restart=${hostToRestart[0]} + id_to_restart=${hostToRestart[1]} + delay=${hostToRestart[2]} + pause=${hostToRestart[3]} + period=${hostToRestart[4]} + if [[ "${host_to_restart}" = "${host_name}" ]] && [[ "${id_to_restart}" = "${id}" ]] ; then + if [[ "${delay}" != "" ]] && [[ "${pause}" != "" ]] && [[ "${period}" != "" ]] ; then + file_log=${RESTARTERS_LOGS_DIR}"/"${now}"_id"${id}"_"${host_name}".log" + nohup ${SCRIPT_DIR}/benchmark-server-restarter-start.sh "${host_name}" "${id}" "${CONFIG_PRM}" \ + "${delay}" "${pause}" "${period}" "${CONFIG_INCLUDE}" > ${file_log} 2>& 1 & - # Start a restarter if needed. - if [[ "${RESTART_SERVERS}" != "" ]] && [[ "${RESTART_SERVERS}" != "true" ]]; then - IFS=',' read -ra hostsToRestart0 <<< "${RESTART_SERVERS}" - for host2Timeout in "${hostsToRestart0[@]}"; - do - IFS=':' read -ra hostToRestart <<< "${host2Timeout}" - - host_to_restart=${hostToRestart[0]} - id_to_restart=${hostToRestart[1]} - delay=${hostToRestart[2]} - pause=${hostToRestart[3]} - period=${hostToRestart[4]} - - if [[ "${host_to_restart}" = "${host_name}" ]] && [[ "${id_to_restart}" = "${id}" ]] ; then - if [[ "${delay}" != "" ]] && [[ "${pause}" != "" ]] && [[ "${period}" != "" ]] ; then - file_log=${RESTARTERS_LOGS_DIR}"/"${now}"_id"${id}"_"${host_name}".log" - - nohup ${SCRIPT_DIR}/benchmark-server-restarter-start.sh "${host_name}" "${id}" "${CONFIG_PRM}" \ - "${delay}" "${pause}" "${period}" "${CONFIG_INCLUDE}" > ${file_log} 2>& 1 & - - echo "<"$(date +"%H:%M:%S")"> Server restarter is started for ${host_to_restart} \ - with id=${id} and config '...${suffix}', warmup delay ${delay} sec., pause ${pause} sec. and period ${period} sec." - else - echo "<"$(date +"%H:%M:%S")"> Failed to start a server restarter for host \ - ${host_to_restart} with id=${id}. Next params should not be empty: [warmup delay='${delay}', pause='${pause}', period='${period}']" + echo "<"$(date +"%H:%M:%S")"> Server restarter is started for ${host_to_restart} \ + with id=${id} and config '...${suffix}', warmup delay ${delay} sec., pause ${pause} sec. and period ${period} sec." + else + echo "<"$(date +"%H:%M:%S")"> Failed to start a server restarter for host \ + ${host_to_restart} with id=${id}. Next params should not be empty: [warmup delay='${delay}', pause='${pause}', period='${period}']" + fi fi - fi - done - fi - # End of restarter logic. + done + fi + # End of restarter logic. - id=$((1 + $id)) -done + id=$((1 + $id)) + done +done \ No newline at end of file diff --git a/bin/benchmark-servers-stop.sh b/bin/benchmark-servers-stop.sh index d94b756..988b3ea 100755 --- a/bin/benchmark-servers-stop.sh +++ b/bin/benchmark-servers-stop.sh @@ -73,16 +73,30 @@ if [[ "${RESTART_SERVERS}" != "" ]] && [[ "${RESTART_SERVERS}" != "true" ]]; the echo "<"$(date +"%H:%M:%S")"> All server restartets are stopped." fi -IFS=',' read -ra hosts0 <<< "${SERVER_HOSTS}" -for host_name in "${hosts0[@]}"; +for grp in 0 1 2 3 ; do - if [[ ${host_name} = "127.0.0.1" || ${host_name} = "localhost" ]] - then - pkill -9 -f "Dyardstick.server" - - else - `ssh -o PasswordAuthentication=no ${REMOTE_USER}"@"${host_name} pkill -9 -f "Dyardstick.server"` - fi - - echo "<"$(date +"%H:%M:%S")"> Server is stopped on "${host_name} + if [[ "$grp" == "0" ]] ; then + SRV_HOST_TMP="${SERVER_HOSTS}" + else + eval SRV_HOST_TMP='$'"SERVER_GROUP${grp}_HOSTS" + fi + + if [[ -z "$SRV_HOST_TMP" ]]; then + break + fi + + IFS=',' read -ra hosts0 <<< "${SRV_HOST_TMP}" + + for host_name in "${hosts0[@]}"; + do + if [[ ${host_name} = "127.0.0.1" || ${host_name} = "localhost" ]] + then + pkill -9 -f "Dyardstick.server" + + else + `ssh -o PasswordAuthentication=no ${REMOTE_USER}"@"${host_name} pkill -9 -f "Dyardstick.server"` + fi + + echo "<"$(date +"%H:%M:%S")"> Server is stopped on "${host_name} + done done diff --git a/src/main/java/org/yardstickframework/BenchmarkConfiguration.java b/src/main/java/org/yardstickframework/BenchmarkConfiguration.java index e0e4a15..979e9c4 100644 --- a/src/main/java/org/yardstickframework/BenchmarkConfiguration.java +++ b/src/main/java/org/yardstickframework/BenchmarkConfiguration.java @@ -52,8 +52,13 @@ public class BenchmarkConfiguration implements Serializable { private List driverNames; /** */ - @Parameter(names = {"-sn", "--serverName"}, description = "Benchmark server name (required)") - private String serverName; + @Parameter(names = {"-sn", "--serverName"}, + description = "Space-separated list of benchmark server name (required), maximum size is 4") + private List serverName; + + /** */ + @Parameter(names = {"-nn", "--serverNameNumber"}, description = "Number of the benchmark server name (default 0, max 3)") + private int serverNameNumber; /** */ @Parameter(names = {"-id", "--memberId"}, description = "Memebr ID") @@ -150,7 +155,7 @@ public boolean help() { * @return Benchmark server name. */ public String serverName() { - return serverName; + return serverName.size() > serverNameNumber ? serverName.get(serverNameNumber) : null; } /** @@ -425,6 +430,7 @@ public String defaultDescription() { "memberId='" + memberId + '\'' + ", driverNames='" + driverNames + '\'' + ", serverName='" + serverName + '\'' + + ", serverNameNumber='" + serverNameNumber + '\'' + ", threads=" + threads + ", duration=" + duration + ", warmup=" + warmup +