blob: b3e20abc7c4a8910edaf898e52c98b7172648c48 [file] [log] [blame]
#!/bin/bash
#
# Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#
TESTHOME=`pwd`
GFHOME=$TESTHOME/glassfish7
export INSTALL_LOC=$HOME/testnode
export DOMAIN=domain1
echo "DOMAIN is set to $DOMAIN. Reset this if working with another domain."
PATH=$GFHOME/bin:$PATH
GFBUILDDIR=/net/bat.sfbay.sun.com/repine/export2/hudson/jobs/gf-trunk-build-continuous/lastSuccessful
TIMEFORMAT="real: %E"
rm -rf $TESTHOME/logs
mkdir $TESTHOME/logs
start_instances() {
echo Starting instances...
asadmin --terse list-instances | egrep 'no response|requires restart|not running' | awk '{print $1}' |
(time xargs -t -n 1 -P 0 asadmin --terse start-instance)
}
stop_instances() {
echo Stopping instances...
asadmin --terse list-instances | grep running | grep -v 'not running' | awk '{print $1}' |
(time xargs -t -n 1 -P 0 asadmin --terse stop-instance)
}
ping_instances() {
id=$1
url=$2
asadmin get '*' |
url=$url awk -F= '$1 ~ /nodes.node..*\.node-host/ { host[$1] = $2 }
$1 ~ /servers.server..*\.node/ { node[$1] = $2 }
$1 ~ /configs.config..*.system-property.HTTP_LISTENER_PORT.value/ { cport[$1] = $2 }
$1 ~ /servers.server..*.system-property.HTTP_LISTENER_PORT.value/ { port[$1] = $2 }
$1 ~ /servers\.server\.[^.]*\.name$/ { iname[$2] = $2 }
$1 ~ /servers\.server\.[^.]*\.config-ref$/ { cname[$1] = $2 }
END {
ck = "configs.config.ch1-config.system-property.HTTP_LISTENER_PORT.value";
for (i in iname) {
if (i == "server") continue;
if (cname["servers.server." i ".config-ref"] != "ch1-config") continue;
k = "servers.server." i ".system-property.HTTP_LISTENER_PORT.value";
if (port[k] == "") port[k] = cport[ck];
nk = "servers.server." i ".node";
hk = "nodes.node." node[nk] ".node-host";
printf "http://%s:%s/%s\n", host[hk], port[k], ENVIRON["url"]
}
}' |
xargs -t -n 1 -P 0 wget -q --no-proxy -P $TESTHOME/logs/$id -x
}
bench() {
cmd=$*
key=$1
echo -n $key ": "
(time asadmin $cmd > /dev/null) 2>&1 || echo "<-- FAILURE"
}
benchmark_commands() {
bench list-instances
bench list-clusters
bench create-cluster cx
bench delete-cluster cx
bench create-instance --node localhost-$DOMAIN ix
bench start-instance ix
bench stop-instance ix
bench delete-instance ix
bench deploy --name ax $TESTHOME/apps/helloworld.war
bench undeploy ax
bench list-applications
bench stop-domain $DOMAIN
bench start-domain $DOMAIN
bench restart-domain $DOMAIN
grep 'time to parse domain.xml' $GFHOME/glassfish/domains/$DOMAIN/logs/server.log |
sed -e 's/^.*Total //' -e 's/|#]//' | tail -1
echo 'size of domain.xml: ' `ls -l $GFHOME/glassfish/domains/$DOMAIN/config/domain.xml | awk '{ print $5 }'`
PIDFILE=$TESTHOME/glassfish7/glassfish/domains/domain1/config/pid
# wait for pid file to be there, as restart-domain returns before it is actually there
while [ ! -f $PIDFILE ]; do sleep 1; done
daspid=`cat $PIDFILE`
echo 'size of DAS process: ' `ps -o vsz= -p $daspid` ' KB'
}
benchmark_deploy() {
sz=$1
echo "deploying $sz app to stopped cluster"
time asadmin deploy --target ch1 --name hello1 $TESTHOME/apps/helloworld-${sz}.war
echo "starting instances"
time asadmin start-cluster ch1
benchmark_commands
echo "undeploying app from running cluster"
time asadmin undeploy --target ch1 hello1
echo "deploying $sz app to running cluster"
time asadmin deploy --target ch1 --name hello1 $TESTHOME/apps/helloworld-${sz}.war
echo "stopping instances"
time asadmin stop-cluster ch1
echo "undeploying app from stopped cluster"
time asadmin undeploy --target ch1 hello1
# one more start/stop to get the instances sync'd again
time asadmin start-cluster ch1
time asadmin stop-cluster ch1
}
create_nodes_and_clusters() {
cnum=$1
inum=$2
echo "Creating $cnum clusters with $inum instances per cluster (one instance per node)"
c=0
while [ "$c" -lt "$cnum" ]
do
c=`expr $c + 1`
echo "create-cluster cn$c"
i=0
while [ "$i" -lt "$inum" ]
do
i=`expr $i + 1`
echo "create-node-config --nodehost h${c}_${i} n${c}_${i}"
echo "create-instance --cluster c$c --node n${c}_${i} i${c}_${i}"
done
done | asadmin
}
create_hosted_clusters() {
cnum=$1
inum=$2
nnum=$3
echo "Creating $cnum clusters with $inum instances on each of $nnum nodes"
c=0
while [ "$c" -lt "$cnum" ]
do
c=`expr $c + 1`
echo "create-cluster ch$c"
# turn off command replication while creating instances
#echo "set configs.config.ch$c-config.dynamic-reconfiguration-enabled=false"
n=0
while [ "$n" -lt "$nnum" ]
do
n=`expr $n + 1`
i=0
while [ "$i" -lt "$inum" ]
do
i=`expr $i + 1`
echo "create-instance --cluster ch$c --node n-ssh-${DOMAIN}-${n} i${c}-${n}-${i}"
done
done
#echo "set configs.config.ch$c-config.dynamic-reconfiguration-enabled=true"
done | asadmin
}
create_local_clusters() {
cnum=$1
inum=$2
echo "Creating $cnum clusters with $inum local instances per cluster"
c=0
while [ "$c" -lt "$cnum" ]
do
c=`expr $c + 1`
echo "create-cluster cl$c"
i=0
while [ "$i" -lt "$inum" ]
do
i=`expr $i + 1`
pb=`expr 20000 + $c \* $inum \* 10 + $i \* 10`
HLP=$pb
HSLP=`expr $pb + 1`
ISLP=`expr $pb + 2`
ILP=`expr $pb + 3`
JSCP=`expr $pb + 4`
ISMP=`expr $pb + 5`
JPP=`expr $pb + 6`
ALP=`expr $pb + 7`
echo "create-local-instance --checkports=false --cluster cl$c --systemproperties HTTP_LISTENER_PORT=${HLP}:HTTP_SSL_LISTENER_PORT=${HSLP}:IIOP_SSL_LISTENER_PORT=${ISLP}:IIOP_LISTENER_PORT=${ILP}:JMX_SYSTEM_CONNECTOR_PORT=${JSCP}:IIOP_SSL_MUTUALAUTH_PORT=${ISMP}:JMS_PROVIDER_PORT=${JPP}:ASADMIN_LISTENER_PORT=${ALP} i${c}_${i}"
done
done | asadmin || return 1
}
create_hosted_nodes() {
echo Creating SSH nodes from the hosted_nodes file for domain $DOMAIN...
grep -v '^#' $TESTHOME/hosted-nodes |
awk '{ printf "create-node-ssh --nodehost %s --installdir '$INSTALL_LOC'/glassfish7 --sshuser %s n-ssh-'$DOMAIN'-%d\n", $2, $1, ++n }' |
asadmin
asadmin list-nodes
}
install_hosted_nodes() {
echo Installing GlassFish on nodes from hosted_nodes file...
asadmin install-node --installdir $INSTALL_LOC/glassfish7 `grep -v '^#' hosted-nodes | cut -d" " -f2`
}
cmd_on_hosted_nodes() {
cmd=$1
grep -v '^#' $TESTHOME/hosted-nodes |
awk '{print $1 "@" $2}' |
xargs -L 1 -i -t ssh -n -T {} $cmd
}
delete_hosted_nodes() {
echo Deleting SSH nodes...
asadmin --terse list-nodes | egrep -v '^[ \t]*$' | grep n-ssh- |
xargs -n 1 echo delete-node-ssh |
asadmin || return 1
}
delete_clusters() {
echo Deleting clusters and instances...
asadmin --terse list-instances | grep 'not running' | awk '{print $1}' |
xargs -n 1 echo delete-instance |
asadmin || return 1
asadmin --terse list-clusters | grep 'not running' | awk '{print $1}' |
xargs -n 1 echo delete-cluster |
asadmin || return 1
}
delete_nodes() {
echo Deleting nodes...
asadmin --terse list-nodes | egrep -v '^[ \t]*$' | grep -v localhost |
xargs -n 1 echo delete-node-config |
asadmin || return 1
}
deploy_app_to_clusters() {
name=$1
file=$2
echo Deploying an app to all clusters and instances...
asadmin deploy --name $name $file
asadmin --terse list-clusters | egrep -v '^[ \t]*$' | awk '{print $1}' |
while read cname
do
echo "create-application-ref --target $cname $name"
done | asadmin || return 1
}