blob: c4965efa4e4ca1b28d01ce44f923e582bb9c5a0d [file] [log] [blame]
Naoki Shiota4e463182014-03-21 15:13:24 -07001#!/bin/bash
Naoki Shiota4e463182014-03-21 15:13:24 -07002
Naoki Shiota590c18d2014-03-31 17:52:59 -07003### Env vars used by this script. (default value) ###
4# $ONOS_HOME : path of root directory of ONOS repository (this script's dir)
5# $ONOS_CONF_DIR : path of ONOS config directory (~/ONOS/conf)
Naoki Shiota9a1e6d12014-04-03 14:47:12 -07006# $ONOS_CONF : path of ONOS node config file (~/ONOS/conf/onos_node.`hostname`.conf or onos_node.conf)
Naoki Shiota590c18d2014-03-31 17:52:59 -07007# $ONOS_PROPS : path of ONOS properties file (~/ONOS/conf/onos.properties)
8# $ONOS_LOGBACK : path of logback config file (~/ONOS/conf/logback.`hostname`.xml)
Naoki Shiotad8ea71a2014-04-23 17:04:51 -07009# $ONOS_LOGDIR : path of log output directory (~/ONOS/onos-logs)
10# $ONOS_LOGBASE : base name of log output file (onos.`hostname`)
Naoki Shiota590c18d2014-03-31 17:52:59 -070011# $RAMCLOUD_HOME : path of root directory of RAMCloud repository (~/ramcloud)
12# $RAMCLOUD_BRANCH : branch name of RAMCloud to use (master)
Naoki Shiota72209722014-04-08 14:32:17 -070013# $ZK_HOME : path of root directory of ZooKeeper (~/zookeeper-3.4.5)
14# $ZK_LIB_DIR : path of ZooKeeper library (/var/lib/zookeeper)
Naoki Shiotad8ea71a2014-04-23 17:04:51 -070015# $ZK_LOG_DIR : path of ZooKeeper log output directory (~/ONOS/onos-logs/zk-`hostname`)
Naoki Shiota590c18d2014-03-31 17:52:59 -070016# $JVM_OPTS : JVM options ONOS starts with
Naoki Shiotab7eb55d2014-04-21 18:21:36 -070017# $ZK_CONF : path of ZooKeeper config file (~/ONOS/conf/zoo.cfg)
18# $HC_CONF : path of Hazelcast config file (~/ONOS/conf/hazelcast.xml)
19# $RAMCLOUD_CONF : path of RAMCloud config file (~/ONOS/conf/ramcloud.conf)
Naoki Shiota590c18d2014-03-31 17:52:59 -070020#####################################################
21
Naoki Shiota590c18d2014-03-31 17:52:59 -070022ONOS_HOME=${ONOS_HOME:-$(cd `dirname $0`; pwd)}
Naoki Shiota9df15d32014-03-27 14:26:20 -070023ONOS_CONF_DIR=${ONOS_CONF_DIR:-${ONOS_HOME}/conf}
Naoki Shiota9a1e6d12014-04-03 14:47:12 -070024ONOS_CONF=${ONOS_CONF:-${ONOS_CONF_DIR}/onos_node.`hostname`.conf}
Naoki Shiota590c18d2014-03-31 17:52:59 -070025
Naoki Shiotab7eb55d2014-04-21 18:21:36 -070026source ${ONOS_HOME}/scripts/common/utils.sh
27
Naoki Shiota590c18d2014-03-31 17:52:59 -070028if [ ! -f ${ONOS_CONF} ]; then
Naoki Shiota9a1e6d12014-04-03 14:47:12 -070029 # falling back to default config file
30 ONOS_CONF=${ONOS_CONF_DIR}/onos_node.conf
31 if [ ! -f ${ONOS_CONF} ]; then
32 echo "${ONOS_CONF} not found."
33 exit 1
34 fi
Naoki Shiota590c18d2014-03-31 17:52:59 -070035fi
Naoki Shiota4e928512014-04-03 15:49:35 -070036
37
38### Variables read from ONOS config file ###
39ONOS_HOST_NAME=$(read-conf ${ONOS_CONF} host.name `hostname`)
40ONOS_HOST_IP=$(read-conf ${ONOS_CONF} host.ip)
41ONOS_HOST_ROLE=$(read-conf ${ONOS_CONF} host.role)
42ONOS_HOST_BACKEND=$(read-conf ${ONOS_CONF} host.backend)
43ZK_HOSTS=$(read-conf ${ONOS_CONF} zookeeper.hosts ${ONOS_HOST_NAME})
44RC_COORD_PROTOCOL=$(read-conf ${ONOS_CONF} ramcloud.coordinator.protocol "fast+udp")
45RC_COORD_IP=$(read-conf ${ONOS_CONF} ramcloud.coordinator.ip ${ONOS_HOST_IP})
46RC_COORD_PORT=$(read-conf ${ONOS_CONF} ramcloud.coordinator.port 12246)
47RC_SERVER_PROTOCOL=$(read-conf ${ONOS_CONF} ramcloud.server.protocol "fast+udp")
48RC_SERVER_IP=$(read-conf ${ONOS_CONF} ramcloud.server.ip ${ONOS_HOST_IP})
49RC_SERVER_PORT=$(read-conf ${ONOS_CONF} ramcloud.server.port 12242)
Naoki Shiotab7eb55d2014-04-21 18:21:36 -070050HC_HOST_PORT=$(read-conf ${ONOS_CONF} hazelcast.host.port 5701)
Naoki Shiota4e928512014-04-03 15:49:35 -070051HC_TCPIP_MEMBERS=$(read-conf ${ONOS_CONF} hazelcast.tcp-ip.members)
52HC_MULTICAST_GROUP=$(read-conf ${ONOS_CONF} hazelcast.multicast.group "224.2.2.3")
53HC_MULTICAST_PORT=$(read-conf ${ONOS_CONF} hazelcast.multicast.port 54327)
Naoki Shiota590c18d2014-03-31 17:52:59 -070054############################################
55
56
57############## Other variables #############
Naoki Shiota4e928512014-04-03 15:49:35 -070058ONOS_TEMPLATE_DIR=${ONOS_CONF_DIR}/template
59
Naoki Shiota4e463182014-03-21 15:13:24 -070060LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
61
Naoki Shiota72209722014-04-08 14:32:17 -070062ZK_HOME=${ZK_HOME:-~/zookeeper-3.4.5}
Naoki Shiotab7eb55d2014-04-21 18:21:36 -070063ZK_CONF=${ZK_CONF:-${ONOS_CONF_DIR}/zoo.cfg}
Naoki Shiota4e928512014-04-03 15:49:35 -070064ZK_CONF_TEMPLATE=${ONOS_TEMPLATE_DIR}/zoo.cfg.template
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -070065# Adding ONOS_HOST_NAME dir since file name (zookeeper.out) cannot be controlled.
Naoki Shiotad8ea71a2014-04-23 17:04:51 -070066ZK_LOG_DIR=${ZK_LOG_DIR:-${ONOS_HOME}/onos-logs/zk-${ONOS_HOST_NAME}}
Naoki Shiota72209722014-04-08 14:32:17 -070067ZK_LIB_DIR=${ZK_LIB_DIR:-/var/lib/zookeeper}
Naoki Shiota9df15d32014-03-27 14:26:20 -070068ZK_MY_ID=${ZK_LIB_DIR}/myid
Naoki Shiota4e463182014-03-21 15:13:24 -070069
Naoki Shiotab7eb55d2014-04-21 18:21:36 -070070HC_CONF=${HC_CONF:-${ONOS_CONF_DIR}/hazelcast.xml}
Naoki Shiota4e928512014-04-03 15:49:35 -070071HC_CONF_TEMPLATE=${ONOS_TEMPLATE_DIR}/hazelcast.xml.template
72
Naoki Shiota4e463182014-03-21 15:13:24 -070073RAMCLOUD_HOME=${RAMCLOUD_HOME:-~/ramcloud}
Naoki Shiota590c18d2014-03-31 17:52:59 -070074RAMCLOUD_COORD_LOG=${LOGDIR}/ramcloud.coordinator.${ONOS_HOST_NAME}.log
75RAMCLOUD_SERVER_LOG=${LOGDIR}/ramcloud.server.${ONOS_HOST_NAME}.log
Naoki Shiota4e463182014-03-21 15:13:24 -070076RAMCLOUD_BRANCH=${RAMCLOUD_BRANCH:-master}
Naoki Shiotab7eb55d2014-04-21 18:21:36 -070077RAMCLOUD_CONF=${RAMCLOUD_CONF:-${ONOS_CONF_DIR}/ramcloud.conf}
Naoki Shiota4e463182014-03-21 15:13:24 -070078
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -070079export LD_LIBRARY_PATH=${ONOS_HOME}/lib:${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}:$LD_LIBRARY_PATH
Naoki Shiota4e463182014-03-21 15:13:24 -070080
81## Because the script change dir to $ONOS_HOME, we can set ONOS_LOGBACK and LOGDIR relative to $ONOS_HOME
Naoki Shiota590c18d2014-03-31 17:52:59 -070082ONOS_LOGBACK=${ONOS_LOGBACK:-${ONOS_CONF_DIR}/logback.${ONOS_HOST_NAME}.xml}
Naoki Shiota9df15d32014-03-27 14:26:20 -070083ONOS_LOGBACK_BACKUP=${ONOS_LOGBACK}.bak
Naoki Shiota4e928512014-04-03 15:49:35 -070084ONOS_LOGBACK_TEMPLATE=${ONOS_TEMPLATE_DIR}/logback.xml.template
Naoki Shiota4e463182014-03-21 15:13:24 -070085LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
Naoki Shiota590c18d2014-03-31 17:52:59 -070086LOGBASE=${ONOS_LOGBASE:-onos.${ONOS_HOST_NAME}}
Naoki Shiota4e463182014-03-21 15:13:24 -070087ONOS_LOG="${LOGDIR}/${LOGBASE}.log"
88PCAP_LOG="${LOGDIR}/${LOGBASE}.pcap"
89LOGS="$ONOS_LOG $PCAP_LOG"
90
Naoki Shiota9df15d32014-03-27 14:26:20 -070091ONOS_PROPS=${ONOS_PROPS:-${ONOS_CONF_DIR}/onos.properties}
Naoki Shiota4e463182014-03-21 15:13:24 -070092JMX_PORT=${JMX_PORT:-7189}
93
94# Set JVM options
95JVM_OPTS="${JVM_OPTS:-}"
Naoki Shiota4e463182014-03-21 15:13:24 -070096JVM_OPTS="$JVM_OPTS -server -d64"
97#JVM_OPTS="$JVM_OPTS -XX:+TieredCompilation -XX:InitialCodeCacheSize=512m -XX:ReservedCodeCacheSize=512m"
Yuta HIGUCHI18354592014-04-01 13:53:42 -070098
99# Uncomment or specify appropriate value as JVM_OPTS environment variables.
100#JVM_OPTS="$JVM_OPTS -Xmx4g -Xms4g -Xmn800m"
Naoki Shiota4e463182014-03-21 15:13:24 -0700101#JVM_OPTS="$JVM_OPTS -Xmx2g -Xms2g -Xmn800m"
102#JVM_OPTS="$JVM_OPTS -Xmx1g -Xms1g -Xmn800m"
Yuta HIGUCHI18354592014-04-01 13:53:42 -0700103
104#JVM_OPTS="$JVM_OPTS -XX:+UseParallelGC"
105JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC"
106JVM_OPTS="$JVM_OPTS -XX:+AggressiveOpts"
107
108# We may want to remove UseFastAccessorMethods option: http://bugs.java.com/view_bug.do?bug_id=6385687
109JVM_OPTS="$JVM_OPTS -XX:+UseFastAccessorMethods"
110
111JVM_OPTS="$JVM_OPTS -XX:MaxInlineSize=8192"
112JVM_OPTS="$JVM_OPTS -XX:FreqInlineSize=8192"
113JVM_OPTS="$JVM_OPTS -XX:CompileThreshold=1500"
114
Naoki Shiota4e463182014-03-21 15:13:24 -0700115JVM_OPTS="$JVM_OPTS -XX:OnError=crash-logger" ;# For dumping core
Yuta HIGUCHI18354592014-04-01 13:53:42 -0700116
117# Workaround for Thread Priority http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workaround.html
118JVM_OPTS="$JVM_OPTS -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42"
119
120JVM_OPTS="$JVM_OPTS -XX:+UseCompressedOops"
121
122JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
123JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
124JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
125
Naoki Shiota4e463182014-03-21 15:13:24 -0700126JVM_OPTS="$JVM_OPTS -Dhazelcast.logging.type=slf4j"
127
Yuta HIGUCHI18354592014-04-01 13:53:42 -0700128# Uncomment to dump final JVM flags to stdout
129#JVM_OPTS="$JVM_OPTS -XX:+PrintFlagsFinal"
130
Naoki Shiota4e463182014-03-21 15:13:24 -0700131# Set ONOS core main class
Jonathan Hart51f6f5b2014-04-03 10:32:10 -0700132MAIN_CLASS="net.onrc.onos.core.main.Main"
Naoki Shiota4e463182014-03-21 15:13:24 -0700133
134MVN=${MVN:-mvn -o}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700135############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700136
Naoki Shiota9df15d32014-03-27 14:26:20 -0700137
Naoki Shiota590c18d2014-03-31 17:52:59 -0700138############# Common functions #############
139function print_usage {
Naoki Shiota05721b32014-04-29 14:41:12 -0700140 local scriptname=`basename $0`
Naoki Shiota590c18d2014-03-31 17:52:59 -0700141 local filename=`basename ${ONOS_CONF}`
142 local usage="Usage: setup/start/stop ONOS on this server.
Naoki Shiota05721b32014-04-29 14:41:12 -0700143 \$ ${scriptname} setup [-f]
Pavlin Radoslavovd8f30d92014-04-18 13:03:09 -0700144 Set up ONOS node using ${ONOS_CONF} .
Naoki Shiota590c18d2014-03-31 17:52:59 -0700145 - generate and replace config file of ZooKeeper.
146 - create myid in ZooKeeper datadir.
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700147 - generate and replace config file for Hazelcast.
148 - generate and replace config file for RAMCloud.
Naoki Shiota590c18d2014-03-31 17:52:59 -0700149 - generate and replace logback.${ONOS_HOST_NAME}.xml
150 If -f option is used, all existing files will be overwritten without confirmation.
Naoki Shiota05721b32014-04-29 14:41:12 -0700151 \$ ${scriptname} start [single-node|coord-node|server-node|coord-and-server-node]
Naoki Shiota590c18d2014-03-31 17:52:59 -0700152 Start ONOS node with specific RAMCloud entities
153 - single-node: start ONOS with stand-alone RAMCloud
154 - coord-node : start ONOS with RAMCloud coordinator
155 - server-node: start ONOS with RAMCloud server
156 - coord-and-server-node: start ONOS with RAMCloud coordinator and server
157 * Default behavior can be defined by ${filename}
Naoki Shiota05721b32014-04-29 14:41:12 -0700158 \$ ${scriptname} stop
Naoki Shiota590c18d2014-03-31 17:52:59 -0700159 Stop all ONOS-related processes
Naoki Shiota05721b32014-04-29 14:41:12 -0700160 \$ ${scriptname} restart
Naoki Shiota590c18d2014-03-31 17:52:59 -0700161 Stop and start currently running ONOS-related processes
Naoki Shiota05721b32014-04-29 14:41:12 -0700162 \$ ${scriptname} status
Naoki Shiota590c18d2014-03-31 17:52:59 -0700163 Show status of ONOS-related processes
Naoki Shiota05721b32014-04-29 14:41:12 -0700164 \$ ${scriptname} {zk|rc-coord|rc-server|core} {start|stop|restart|status}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700165 Control specific ONOS-related process"
166
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700167 echo "${usage}"
Naoki Shiota4e463182014-03-21 15:13:24 -0700168}
169
170function rotate-log {
Naoki Shiota4e928512014-04-03 15:49:35 -0700171 local logfile=$1
172 local nr_max=${2:-10}
173 if [ -f $logfile ]; then
174 for i in `seq $(expr $nr_max - 1) -1 1`; do
175 if [ -f ${logfile}.${i} ]; then
176 mv -f ${logfile}.${i} ${logfile}.`expr $i + 1`
177 fi
178 done
179 mv $logfile $logfile.1
180 fi
Naoki Shiota4e463182014-03-21 15:13:24 -0700181}
182
183# kill-processes {module-name} {array of pids}
184function kill-processes {
185 # Kill the existing processes
186 local pids=$2
Naoki Shiota9df15d32014-03-27 14:26:20 -0700187 if [ ! -z "$pids" ]; then
Naoki Shiota4e463182014-03-21 15:13:24 -0700188 echo -n "Stopping $1 ... "
189 fi
190 for p in ${pids}; do
191 if [ x$p != "x" ]; then
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700192 (
193 # Ask process with SIGTERM first, if that did not kill the process
194 # wait 1s and if process still exist, force process to be killed.
195 kill -TERM $p && kill -0 $p && sleep 1 && kill -0 $p && kill -KILL $p
196 ) 2> /dev/null
Naoki Shiota4e463182014-03-21 15:13:24 -0700197 echo "Killed existing process (pid: $p)"
198 fi
199 done
200}
201
Naoki Shiota9a1e6d12014-04-03 14:47:12 -0700202function handle-error {
203 set -e
204
205 revert-confs
206
207 set +e
208
209 exit 1
210}
211
Naoki Shiota4e928512014-04-03 15:49:35 -0700212# revert-confs [error message]
213function revert-confs {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700214 echo -n "ERROR occurred ... "
Naoki Shiota9df15d32014-03-27 14:26:20 -0700215
Naoki Shiota4e928512014-04-03 15:49:35 -0700216 revert-file `basename ${ZK_CONF}`
217 revert-file `basename ${HC_CONF}`
Naoki Shiota9df15d32014-03-27 14:26:20 -0700218
219 echo "EXIT"
220
221 if [ ! -z "$1" ]; then
222 echo $1
223 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700224}
225
Naoki Shiota590c18d2014-03-31 17:52:59 -0700226function create-zk-conf {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700227 echo -n "Creating ${ZK_CONF} ... "
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700228
Pavlin Radoslavovd8f30d92014-04-18 13:03:09 -0700229 # Create the ZooKeeper lib directory
230 if [ ! -d ${ZK_LIB_DIR} ]; then
231 local SUDO=${SUDO:-}
232 local whoami=`whoami`
233 {
234 ${SUDO} mkdir ${ZK_LIB_DIR}
235 ${SUDO} chown ${whoami} ${ZK_LIB_DIR}
236 } || {
237 echo "FAILED"
238 echo "[ERROR] Failed to create directory ${ZK_LIB_DIR}."
239 echo "[ERROR] Please retry after setting \"env SUDO=sudo\""
240 exit 1
241 }
242 fi
243
244 # creation of ZooKeeper config
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700245 local temp_zk=`begin-conf-creation ${ZK_CONF}`
Naoki Shiota9df15d32014-03-27 14:26:20 -0700246
Naoki Shiota4e928512014-04-03 15:49:35 -0700247 hostarr=`echo ${ZK_HOSTS} | tr "," " "`
Naoki Shiota9df15d32014-03-27 14:26:20 -0700248
249 local i=1
250 local myid=
251 for host in ${hostarr}; do
Naoki Shiota9a1e6d12014-04-03 14:47:12 -0700252 if [ "${host}" = "${ONOS_HOST_NAME}" -o "${host}" = "${ONOS_HOST_IP}" ]; then
Naoki Shiota9df15d32014-03-27 14:26:20 -0700253 myid=$i
254 break
255 fi
256 i=`expr $i + 1`
257 done
258
259 if [ -z "${myid}" ]; then
Naoki Shiota590c18d2014-03-31 17:52:59 -0700260 local filename=`basename ${ONOS_CONF}`
Naoki Shiota35f8d5c2014-04-08 11:13:18 -0700261 revert-confs "[ERROR] In ${filename}, zookeeper.hosts must have hostname \"${ONOS_HOST_NAME}\" or IP address"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700262 fi
263
Yuta HIGUCHI69450892014-04-16 09:10:55 -0700264 if [ -f "${ZK_MY_ID}" ]; then
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700265 # sudo will be needed if ZK_MY_ID is already created by other (old) script
Yuta HIGUCHI69450892014-04-16 09:10:55 -0700266 local SUDO=${SUDO:-}
267 {
268 ${SUDO} mv -f ${ZK_MY_ID} ${ZK_MY_ID}.old
269 } || {
270 echo "FAILED"
271 echo "[ERROR] Failed to rename ${ZK_MY_ID}."
Pavlin Radoslavovd8f30d92014-04-18 13:03:09 -0700272 echo "[ERROR] Please retry after setting \"env SUDO=sudo\""
Yuta HIGUCHI69450892014-04-16 09:10:55 -0700273 exit 1
274 }
275 fi
276
Naoki Shiota9df15d32014-03-27 14:26:20 -0700277 echo ${myid} > ${ZK_MY_ID}
278
279 echo -n "myid is assigned to ${myid} ... "
280
281 while read line; do
282 if [[ $line =~ ^__HOSTS__$ ]]; then
283 i=1
284 for host in ${hostarr}; do
285 # TODO: ports might be configurable
286 local hostline="server.${i}=${host}:2888:3888"
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700287 echo $hostline
Naoki Shiota9df15d32014-03-27 14:26:20 -0700288 i=`expr $i + 1`
289 done
290 elif [[ $line =~ __DATADIR__ ]]; then
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700291 echo $line | sed -e "s|__DATADIR__|${ZK_LIB_DIR}|"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700292 else
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700293 echo $line
Naoki Shiota9df15d32014-03-27 14:26:20 -0700294 fi
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700295 done < ${ZK_CONF_TEMPLATE} > ${temp_zk}
296
297 end-conf-creation ${ZK_CONF}
Naoki Shiota9df15d32014-03-27 14:26:20 -0700298
299 echo "DONE"
Naoki Shiota590c18d2014-03-31 17:52:59 -0700300}
Naoki Shiota9df15d32014-03-27 14:26:20 -0700301
Naoki Shiota4e928512014-04-03 15:49:35 -0700302function create-hazelcast-conf {
303 echo -n "Creating ${HC_CONF} ... "
304
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700305 local temp_hc=`begin-conf-creation ${HC_CONF}`
Naoki Shiota4e928512014-04-03 15:49:35 -0700306
307 # To keep indent of XML file, change IFS
308 local IFS=''
309 while read line; do
310 if [[ $line =~ __HC_NETWORK__ ]]; then
311 if [ ! -z "${HC_TCPIP_MEMBERS}" ]; then
312 # temporary change
313 IFS=' '
314 local memberarr=`echo ${HC_TCPIP_MEMBERS} | tr "," " "`
315 echo '<multicast enabled="false" />'
316 echo '<tcp-ip enabled="true">'
317 for member in ${memberarr}; do
318 echo " <member>${member}</member>"
319 done
320 echo '</tcp-ip>'
321 IFS=''
322 else
323 echo '<multicast enabled="true">'
324 echo " <multicast-group>${HC_MULTICAST_GROUP}</multicast-group>"
325 echo " <multicast-port>${HC_MULTICAST_PORT}</multicast-port>"
326 echo '</multicast>'
327 echo '<tcp-ip enabled="false" />'
328 fi
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700329 elif [[ $line =~ __HC_PORT__ ]]; then
330 echo $line | sed -e "s|__HC_PORT__|${HC_HOST_PORT}|"
Naoki Shiota4e928512014-04-03 15:49:35 -0700331 else
332 echo "${line}"
333 fi
334 done < ${HC_CONF_TEMPLATE} > ${temp_hc}
335
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700336 end-conf-creation ${HC_CONF}
Naoki Shiota4e928512014-04-03 15:49:35 -0700337
338 echo "DONE"
339}
340
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700341function create-ramcloud-conf {
342 echo -n "Creating ${RAMCLOUD_CONF} ... "
343
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700344 local temp_rc=`begin-conf-creation ${RAMCLOUD_CONF}`
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700345
346 local rc_cluster_name=$(read-conf ${ONOS_CONF} ramcloud.clusterName "ONOS-RC")
347
348 # TODO make ZooKeeper address configurable.
349 echo "ramcloud.locator=zk:localhost:2181" > ${temp_rc}
350 echo "ramcloud.clusterName=${rc_cluster_name}" >> ${temp_rc}
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700351
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700352 end-conf-creation ${RAMCLOUD_CONF}
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700353
354 echo "DONE"
355}
356
Naoki Shiota590c18d2014-03-31 17:52:59 -0700357function create-logback-conf {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700358 echo -n "Creating ${ONOS_LOGBACK} ... "
Naoki Shiota590c18d2014-03-31 17:52:59 -0700359
Naoki Shiota9df15d32014-03-27 14:26:20 -0700360 # creation of logback config
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700361 local temp_lb=`begin-conf-creation ${ONOS_LOGBACK}`
362
363 sed -e "s|__FILENAME__|${ONOS_LOG}|" ${ONOS_LOGBACK_TEMPLATE} > ${temp_lb}
364
365 end-conf-creation ${ONOS_LOGBACK}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700366
Naoki Shiota9df15d32014-03-27 14:26:20 -0700367 echo "DONE"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700368}
369
Naoki Shiota4e928512014-04-03 15:49:35 -0700370function create-confs {
371 local key
372 local filename
373
Naoki Shiota9a1e6d12014-04-03 14:47:12 -0700374 trap handle-error ERR
Naoki Shiota4e928512014-04-03 15:49:35 -0700375
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700376 echo "Config file : ${ONOS_CONF}"
377
Naoki Shiota4e928512014-04-03 15:49:35 -0700378 if [ "$1" == "-f" ]; then
379 create-zk-conf
380 create-hazelcast-conf
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700381 create-ramcloud-conf
Naoki Shiota4e928512014-04-03 15:49:35 -0700382 create-logback-conf
383 else
384 create-conf-interactive ${ZK_CONF} create-zk-conf
385 create-conf-interactive ${HC_CONF} create-hazelcast-conf
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700386 create-conf-interactive ${RAMCLOUD_CONF} create-ramcloud-conf
Naoki Shiota4e928512014-04-03 15:49:35 -0700387 create-conf-interactive ${ONOS_LOGBACK} create-logback-conf
388 fi
Naoki Shiota590c18d2014-03-31 17:52:59 -0700389
390 trap - ERR
391}
392############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700393
Naoki Shiota590c18d2014-03-31 17:52:59 -0700394
395###### Functions related to ZooKeeper ######
Naoki Shiota4e463182014-03-21 15:13:24 -0700396function zk {
397 case "$1" in
398 start)
399 start-zk
400 ;;
401 stop)
402 stop-zk
403 ;;
404 stat*) # <- status
405 status-zk
406 ;;
407 re*) # <- restart
408 stop-zk
409 start-zk
410 ;;
411 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700412 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700413 exit 1
414 esac
415}
416
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700417function load-zk-cfg {
418 if [ -f "${ZK_CONF}" ]; then
419 local filename=`basename ${ZK_CONF}`
420 local dirname=`dirname ${ZK_CONF}`
421
422 # Run ZooKeeper with our configuration
423 export ZOOCFG=${filename}
424 export ZOOCFGDIR=${dirname}
425 fi
426}
427
Naoki Shiota4e463182014-03-21 15:13:24 -0700428function start-zk {
Pavlin Radoslavovd8f30d92014-04-18 13:03:09 -0700429 echo -n "Starting ZooKeeper ... "
Naoki Shiota9df15d32014-03-27 14:26:20 -0700430
Naoki Shiota4e928512014-04-03 15:49:35 -0700431 export ZOO_LOG_DIR=${ZK_LOG_DIR}
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700432 mkdir -p ${ZK_LOG_DIR}
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700433
434 load-zk-cfg
Naoki Shiota9df15d32014-03-27 14:26:20 -0700435
Naoki Shiota72209722014-04-08 14:32:17 -0700436 ${ZK_HOME}/bin/zkServer.sh start
Naoki Shiota4e463182014-03-21 15:13:24 -0700437}
438
439function stop-zk {
440 kill-processes "ZooKeeper" `jps -l | grep org.apache.zookeeper.server | awk '{print $1}'`
441}
442
443function status-zk {
Naoki Shiotab7eb55d2014-04-21 18:21:36 -0700444 load-zk-cfg
Naoki Shiota9df15d32014-03-27 14:26:20 -0700445
Naoki Shiota72209722014-04-08 14:32:17 -0700446 ${ZK_HOME}/bin/zkServer.sh status
Naoki Shiota4e463182014-03-21 15:13:24 -0700447}
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700448
449function check-zk {
450 # assumption here is that ZK status script is the last command in status-zk.
451 status-zk &> /dev/null
452 local zk_status=$?
453 if [ "$zk_status" -ne 0 ]; then
454 return 1;
455 fi
456 return 0
457}
458
459# wait-zk-or-die {timeout-sec}
460function wait-zk-or-die {
461 local retries=${1:-1}
462 # do-while retries >= 0
463 while true; do
464 check-zk
465 local zk_status=$?
466 if [ "$zk_status" -eq 0 ]; then
467 return 0
468 fi
469 sleep 1;
470 ((retries -= 1))
471 (( retries >= 0 )) || break
472 done
473 echo "ZooKeeper is not running."
474 exit 1
475}
476
Naoki Shiota590c18d2014-03-31 17:52:59 -0700477############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700478
479
Naoki Shiota590c18d2014-03-31 17:52:59 -0700480####### Functions related to RAMCloud ######
Naoki Shiota9df15d32014-03-27 14:26:20 -0700481function start-backend {
482 if [ "${ONOS_HOST_BACKEND}" = "ramcloud" ]; then
Naoki Shiota590c18d2014-03-31 17:52:59 -0700483 if [ $1 == "coord" ]; then
484 rc-coord startifdown
485 elif [ $1 == "server" ]; then
486 rc-server startifdown
487 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700488 fi
489}
490
491function stop-backend {
492 rcsn=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
493 if [ $rcsn != 0 ]; then
494 rc-server stop
495 fi
496
Naoki Shiota590c18d2014-03-31 17:52:59 -0700497 rccn=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
Naoki Shiota9df15d32014-03-27 14:26:20 -0700498 if [ $rccn != 0 ]; then
499 rc-coord stop
500 fi
501}
502
Naoki Shiota590c18d2014-03-31 17:52:59 -0700503
Naoki Shiota4e463182014-03-21 15:13:24 -0700504### Functions related to RAMCloud coordinator
Naoki Shiota9df15d32014-03-27 14:26:20 -0700505function rc-coord-addr {
Naoki Shiota4e928512014-04-03 15:49:35 -0700506 echo "${RC_COORD_PROTOCOL}:host=${RC_COORD_IP},port=${RC_COORD_PORT}"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700507}
508
509function rc-server-addr {
Naoki Shiota4e928512014-04-03 15:49:35 -0700510 echo "${RC_SERVER_PROTOCOL}:host=${RC_SERVER_IP},port=${RC_SERVER_PORT}"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700511}
512
Naoki Shiota4e463182014-03-21 15:13:24 -0700513function rc-coord {
514 case "$1" in
515 start)
Naoki Shiota4e463182014-03-21 15:13:24 -0700516 stop-coord
517 start-coord
518 ;;
519 startifdown)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700520 local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
Naoki Shiota4e463182014-03-21 15:13:24 -0700521 if [ $n == 0 ]; then
522 start-coord
523 else
524 echo "$n instance of RAMCloud coordinator running"
525 fi
526 ;;
527 stop)
528 stop-coord
529 ;;
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700530 deldb)
531 stop-backend
532 del-coord-info
533 ;;
Naoki Shiota4e463182014-03-21 15:13:24 -0700534 stat*) # <- status
535 local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
536 echo "$n RAMCloud coordinator running"
537 ;;
538 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700539 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700540 exit 1
541 esac
542}
543
544function start-coord {
Yuta HIGUCHI71703322014-05-06 09:17:29 -0700545 wait-zk-or-die 2
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700546
Naoki Shiota4e463182014-03-21 15:13:24 -0700547 if [ ! -d ${LOGDIR} ]; then
548 mkdir -p ${LOGDIR}
549 fi
550 if [ -f $RAMCLOUD_COORD_LOG ]; then
551 rotate-log $RAMCLOUD_COORD_LOG
552 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700553
554 local coord_addr=`rc-coord-addr`
Naoki Shiota4e463182014-03-21 15:13:24 -0700555
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700556 # TODO Configuration for ZK address, port
557 local zk_addr="localhost:2181"
558 # RAMCloud cluster name
559 local rc_cluster_name=$(read-conf ${ONOS_CONF} ramcloud.clusterName "ONOS-RC")
560 # RAMCloud option deadServerTimeout
561 # (note RC default is 250ms, setting relaxed ONOS default to 1000ms)
562 local rc_coord_deadServerTimeout=$(read-conf ${ONOS_CONF} ramcloud.coordinator.deadServerTimeout 1000)
563
564 # NOTE RAMCloud document suggests to use -L to specify listen address:port,
565 # but actual RAMCloud code only uses -C argument now.
566 # (FYI: -C is documented to be deprecated in the document)
567
568 local coord_args="-C ${coord_addr}"
569 coord_args="${coord_args} --externalStorage zk:${zk_addr}"
570 coord_args="${coord_args} --clusterName ${rc_cluster_name}"
571 coord_args="${coord_args} --deadServerTimeout ${rc_coord_deadServerTimeout}"
572
573 # Read environment variables if set
574 coord_args="${coord_args} ${RC_COORDINATOR_OPTS}"
575
576 if [ "${ONOS_HOST_ROLE}" == "single-node" ]; then
577 # Note: Following reset is required, since RC restart is considered node failure,
578 # and tries recovery of server, which will never succeed after restart.
579 echo "Role configured to single-node mode. RAMCloud cluster will be reset on each start-up."
580 coord_args="${coord_args} --reset"
581 fi
582
Naoki Shiota4e463182014-03-21 15:13:24 -0700583 # Run ramcloud
584 echo -n "Starting RAMCloud coordinator ... "
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700585 ${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}/coordinator ${coord_args} > $RAMCLOUD_COORD_LOG 2>&1 &
Naoki Shiota4e463182014-03-21 15:13:24 -0700586 echo "STARTED"
587}
588
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700589function del-coord-info {
590 wait-zk-or-die 1
591
592 if [ ! -d ${LOGDIR} ]; then
593 mkdir -p ${LOGDIR}
594 fi
595 if [ -f $RAMCLOUD_COORD_LOG ]; then
596 rotate-log $RAMCLOUD_COORD_LOG
597 fi
598
599 local coord_addr=`rc-coord-addr`
600
601 # TODO Configuration for ZK address, port
602 local zk_addr="localhost:2181"
603 # RAMCloud cluster name
604 local rc_cluster_name=$(read-conf ${ONOS_CONF} ramcloud.clusterName "ONOS-RC")
605 # RAMCloud option deadServerTimeout
606 # (note RC default is 250ms, setting relaxed ONOS default to 1000ms)
607 local rc_coord_deadServerTimeout=$(read-conf ${ONOS_CONF} ramcloud.coordinator.deadServerTimeout 1000)
608
609 # NOTE RAMCloud document suggests to use -L to specify listen address:port,
610 # but actual RAMCloud code only uses -C argument now.
611 # (FYI: -C is documented to be deprecated in the document)
612
613 local coord_args="-C ${coord_addr}"
614 coord_args="${coord_args} --externalStorage zk:${zk_addr}"
615 coord_args="${coord_args} --clusterName ${rc_cluster_name}"
616
617 # Note: --reset will reset ZK stored info and start running as acoordinator.
618 echo -n "Deleting RAMCloud cluster coordination info ... "
619 ${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}/coordinator ${coord_args} --reset &> $RAMCLOUD_COORD_LOG &
620
621 # TODO Assuming 1sec is enough. To be sure monitor log?
622 sleep 1
623 # Silently kill coordinator
624 (pkill -q -f ${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}/coordinator &> /dev/null)
625
626 echo "DONE"
627}
Naoki Shiota4e463182014-03-21 15:13:24 -0700628
629function stop-coord {
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700630 kill-processes "RAMCloud coordinator" `pgrep -f ${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}/coordinator`
Naoki Shiota4e463182014-03-21 15:13:24 -0700631}
632
Naoki Shiota4e463182014-03-21 15:13:24 -0700633### Functions related to RAMCloud server
634function rc-server {
635 case "$1" in
636 start)
Naoki Shiota4e463182014-03-21 15:13:24 -0700637 stop-server
638 start-server
639 ;;
640 startifdown)
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700641 local n=`pgrep -f ${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}/server | wc -l`
Naoki Shiota4e463182014-03-21 15:13:24 -0700642 if [ $n == 0 ]; then
643 start-server
644 else
645 echo "$n instance of RAMCloud server running"
646 fi
647 ;;
648 stop)
649 stop-server
650 ;;
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700651 deldb)
652 stop-server
653 del-server-backup
654 ;;
Naoki Shiota4e463182014-03-21 15:13:24 -0700655 stat*) # <- status
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700656 n=`pgrep -f ${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}/server | wc -l`
Naoki Shiota4e463182014-03-21 15:13:24 -0700657 echo "$n RAMCloud server running"
658 ;;
659 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700660 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700661 exit 1
662 esac
663}
664
665function start-server {
Yuta HIGUCHI71703322014-05-06 09:17:29 -0700666 wait-zk-or-die 2
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700667
Naoki Shiota4e463182014-03-21 15:13:24 -0700668 if [ ! -d ${LOGDIR} ]; then
669 mkdir -p ${LOGDIR}
670 fi
671 if [ -f $RAMCLOUD_SERVER_LOG ]; then
672 rotate-log $RAMCLOUD_SERVER_LOG
673 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700674
675 local coord_addr=`rc-coord-addr`
676 local server_addr=`rc-server-addr`
Naoki Shiota4e463182014-03-21 15:13:24 -0700677
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700678 local masterServiceThreads=$(read-conf ${ONOS_CONF} ramcloud.server.masterServiceThreads 5)
679 local logCleanerThreads=$(read-conf ${ONOS_CONF} ramcloud.server.logCleanerThreads 1)
680 local detectFailures=$(read-conf ${ONOS_CONF} ramcloud.server.detectFailures 1)
681
682 # TODO Configuration for ZK address, port
683 local zk_addr="localhost:2181"
684 # RAMCloud cluster name
685 local rc_cluster_name=$(read-conf ${ONOS_CONF} ramcloud.clusterName "ONOS-RC")
686 # replication factor (-r) config
687 local rc_replicas=$(read-conf ${ONOS_CONF} ramcloud.server.replicas 0)
688 # backup file path (-f) config
689 local rc_datafile=$(read-conf ${ONOS_CONF} ramcloud.server.file "/var/tmp/ramclouddata/backup.${ONOS_HOST_NAME}.log")
690 mkdir -p `dirname ${rc_datafile}`
691
692 local server_args="-L ${server_addr}"
693 server_args="${server_args} --externalStorage zk:${zk_addr}"
694 server_args="${server_args} --clusterName ${rc_cluster_name}"
695 server_args="${server_args} --masterServiceThreads ${masterServiceThreads}"
696 server_args="${server_args} --logCleanerThreads ${logCleanerThreads}"
697 server_args="${server_args} --detectFailures ${detectFailures}"
698 server_args="${server_args} --replicas ${rc_replicas}"
699 server_args="${server_args} --file ${rc_datafile}"
700
701 # Read environment variables if set
702 server_args="${server_args} ${RC_SERVER_OPTS}"
Yuta HIGUCHI45bc3cf2014-04-19 18:12:15 -0700703
Naoki Shiota4e463182014-03-21 15:13:24 -0700704 # Run ramcloud
705 echo -n "Starting RAMCloud server ... "
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700706 ${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}/server ${server_args} > $RAMCLOUD_SERVER_LOG 2>&1 &
Naoki Shiota4e463182014-03-21 15:13:24 -0700707 echo "STARTED"
708}
709
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700710function del-server-backup {
711 # TODO might want confirmation, since data can be lost
712 echo -n "Removing RAMCloud backup server data ... "
713 local rc_datafile=$(read-conf ${ONOS_CONF} ramcloud.server.file "/var/tmp/ramclouddata/backup.${ONOS_HOST_NAME}.log")
714 rm -f ${rc_datafile}
715 echo "DONE"
716}
717
Naoki Shiota4e463182014-03-21 15:13:24 -0700718function stop-server {
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700719 kill-processes "RAMCloud server" `pgrep -f ${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}/server`
Naoki Shiota4e463182014-03-21 15:13:24 -0700720}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700721############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700722
723
Naoki Shiota590c18d2014-03-31 17:52:59 -0700724## Functions related to ONOS core process ##
Naoki Shiota4e463182014-03-21 15:13:24 -0700725function onos {
Naoki Shiota590c18d2014-03-31 17:52:59 -0700726 CPFILE=${ONOS_HOME}/.javacp.${ONOS_HOST_NAME}
Naoki Shiota4e463182014-03-21 15:13:24 -0700727 if [ ! -f ${CPFILE} ]; then
Naoki Shiota9df15d32014-03-27 14:26:20 -0700728 echo "ONOS core needs to be built"
Naoki Shiota4e463182014-03-21 15:13:24 -0700729 ${MVN} -f ${ONOS_HOME}/pom.xml compile
730 fi
731 JAVA_CP=`cat ${CPFILE}`
732 JAVA_CP="${JAVA_CP}:${ONOS_HOME}/target/classes"
733
734 case "$1" in
735 start)
736 stop-onos
737 start-onos
738 ;;
739 startnokill)
740 start-onos
741 ;;
742 startifdown)
743 n=`jps -l | grep "${MAIN_CLASS}" | wc -l`
744 if [ $n == 0 ]; then
745 start-onos
746 else
747 echo "$n instance of onos running"
748 fi
749 ;;
750 stop)
751 stop-onos
752 ;;
753 stat*) # <- status
754 n=`jps -l | grep "${MAIN_CLASS}" | wc -l`
755 echo "$n instance of onos running"
756 ;;
757 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700758 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700759 exit 1
760 esac
761}
762
763function start-onos {
764 if [ ! -d ${LOGDIR} ]; then
765 mkdir -p ${LOGDIR}
766 fi
767 # Backup log files
768 for log in ${LOGS}; do
769 if [ -f ${log} ]; then
770 rotate-log ${log}
771 fi
772 done
Naoki Shiota9df15d32014-03-27 14:26:20 -0700773
Naoki Shiota4e463182014-03-21 15:13:24 -0700774 if [ ! -f ${ONOS_LOGBACK} ]; then
Naoki Shiota9df15d32014-03-27 14:26:20 -0700775 echo "[WARNING] ${ONOS_LOGBACK} not found."
776 echo " Run \"\$ $0 setup\" to create."
777 exit 1
Naoki Shiota4e463182014-03-21 15:13:24 -0700778 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700779
Yuta HIGUCHI3ebc9482014-05-08 16:28:28 -0700780 if [ ! -f ${HC_CONF} ]; then
781 echo "[WARNING] ${HC_CONF} not found."
782 echo " Run \"\$ $0 setup\" to create."
783 exit 1
784 fi
785
786 # specify hazelcast.xml to datagrid
787 JVM_OPTS="${JVM_OPTS} -Dnet.onrc.onos.core.datagrid.HazelcastDatagrid.datagridConfig=${HC_CONF}"
788
789 # specify backend config
Jonathan Hartef3dc1a2014-04-03 11:39:50 -0700790 JVM_OPTS="${JVM_OPTS} -Dnet.onrc.onos.core.datastore.backend=${ONOS_HOST_BACKEND}"
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700791 if [ "${ONOS_HOST_BACKEND}" = "ramcloud" ]; then
792 JVM_OPTS="${JVM_OPTS} -Dramcloud.config.path=${RAMCLOUD_CONF}"
Yuta HIGUCHI3ebc9482014-05-08 16:28:28 -0700793 elif [ "${ONOS_HOST_BACKEND}" = "hazelcast" ]; then
794 JVM_OPTS="${JVM_OPTS} -Dnet.onrc.onos.core.datastore.hazelcast.baseConfig=${HC_CONF}"
Yuta HIGUCHI13d1dbf2014-04-17 20:51:38 -0700795 fi
796
Naoki Shiota9df15d32014-03-27 14:26:20 -0700797 # Run ONOS
Yuta HIGUCHIcce4f622014-04-18 16:48:53 -0700798
799 # Need to cd ONOS_HOME. onos.properties currently specify hazelcast config path relative to CWD
800 cd ${ONOS_HOME}
801
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700802 echo -n "Starting ONOS controller ... "
Naoki Shiota4e463182014-03-21 15:13:24 -0700803 java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${JAVA_CP} ${MAIN_CLASS} -cf ${ONOS_PROPS} > ${LOGDIR}/${LOGBASE}.stdout 2>${LOGDIR}/${LOGBASE}.stderr &
804
805 # We need to wait a bit to find out whether starting the ONOS process succeeded
806 sleep 1
807
808 n=`jps -l |grep "${MAIN_CLASS}" | wc -l`
Naoki Shiota9df15d32014-03-27 14:26:20 -0700809 if [ $n -ge 1 ]; then
Naoki Shiota4e463182014-03-21 15:13:24 -0700810 echo " STARTED"
811 else
812 echo " FAILED"
813 fi
814
815# echo "java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -jar ${ONOS_JAR} -cf ./onos.properties > /dev/null 2>&1 &"
816# sudo -b /usr/sbin/tcpdump -n -i eth0 -s0 -w ${PCAP_LOG} 'tcp port 6633' > /dev/null 2>&1
817}
818
819function stop-onos {
820 kill-processes "ONOS controller" `jps -l | grep ${MAIN_CLASS} | awk '{print $1}'`
821# kill-processes "tcpdump" `ps -edalf |grep tcpdump |grep ${PCAP_LOG} | awk '{print $4}'`
822}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700823############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700824
825
Naoki Shiota590c18d2014-03-31 17:52:59 -0700826################## Main ####################
Naoki Shiota4e463182014-03-21 15:13:24 -0700827case "$1" in
Naoki Shiota9df15d32014-03-27 14:26:20 -0700828 setup)
Naoki Shiota4e928512014-04-03 15:49:35 -0700829 create-confs $2
Naoki Shiota9df15d32014-03-27 14:26:20 -0700830 ;;
Naoki Shiota4e463182014-03-21 15:13:24 -0700831 start)
Naoki Shiota9df15d32014-03-27 14:26:20 -0700832 mode_parameter=${ONOS_HOST_ROLE}
833 if [ ! -z "$2" ]; then
834 mode_parameter=$2
835 fi
836
837 case "${mode_parameter}" in
Naoki Shiota4e463182014-03-21 15:13:24 -0700838 single-node)
839 zk start
Naoki Shiota590c18d2014-03-31 17:52:59 -0700840 start-backend coord
841 start-backend server
Naoki Shiota4e463182014-03-21 15:13:24 -0700842 onos startifdown
843 ;;
844 coord-node)
845 zk start
Naoki Shiota590c18d2014-03-31 17:52:59 -0700846 start-backend coord
Naoki Shiota4e463182014-03-21 15:13:24 -0700847 onos startifdown
848 ;;
849 server-node)
850 zk start
Naoki Shiota590c18d2014-03-31 17:52:59 -0700851 start-backend server
852 onos startifdown
853 ;;
854 coord-and-server-node)
855 zk start
856 start-backend coord
857 start-backend server
Naoki Shiota4e463182014-03-21 15:13:24 -0700858 onos startifdown
859 ;;
860 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700861 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700862 ;;
863 esac
864 echo
865 ;;
866 stop)
867 on=`jps -l | grep "${MAIN_CLASS}" | wc -l`
868 if [ $on != 0 ]; then
869 onos stop
870 fi
871
Naoki Shiota9df15d32014-03-27 14:26:20 -0700872 stop-backend
Naoki Shiota4e463182014-03-21 15:13:24 -0700873
874 zkn=`jps -l | grep org.apache.zookeeper.server | wc -l`
875 if [ $zkn != 0 ]; then
876 zk stop
877 fi
878 echo
879 ;;
880 restart)
881 on=`jps -l | grep "${MAIN_CLASS}" | wc -l`
882 if [ $on != 0 ]; then
883 onos stop
884 fi
885
886 rcsn=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
887 if [ $rcsn != 0 ]; then
888 rc-server stop
889 fi
890
Naoki Shiota590c18d2014-03-31 17:52:59 -0700891 rccn=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
Naoki Shiota4e463182014-03-21 15:13:24 -0700892 if [ $rccn != 0 ]; then
893 rc-coord stop
894 fi
895
896 zkn=`jps -l | grep org.apache.zookeeper.server | wc -l`
897 if [ $zkn != 0 ]; then
898 zk restart
899 fi
900
901 if [ $rccn != 0 ]; then
902 rc-coord startifdown
903 fi
904
905 if [ $rcsn != 0 ]; then
906 rc-server startifdown
907 fi
908
909 if [ $on != 0 ]; then
910 onos startifdown
911 fi
912 echo
913 ;;
914 stat*) # <- status
915 echo '[ZooKeeper]'
916 zk status
917 echo
918 echo '[RAMCloud coordinator]'
919 rc-coord status
920 echo
921 echo '[RAMCloud server]'
922 rc-server status
923 echo
924 echo '[ONOS core]'
925 onos status
926 echo
927 ;;
928 zk)
929 zk $2
930 ;;
931 rc-c*) # <- rc-coordinator
932 rc-coord $2
933 ;;
934 rc-s*) # <- rc-server
935 rc-server $2
936 ;;
Yuta HIGUCHId150ece2014-04-29 16:25:36 -0700937 rc)
938 rc-coord $2
939 rc-server $2
940 ;;
Naoki Shiota4e463182014-03-21 15:13:24 -0700941 core)
942 onos $2
943 ;;
944 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700945 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700946 exit 1
947esac
Naoki Shiota590c18d2014-03-31 17:52:59 -0700948