blob: 9a88a22002bfedd1ae752d5e267cb6f5fcca3d82 [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)
6# $ONOS_CONF : path of ONOS node config file (~/ONOS/conf/onos_node.conf)
7# $ONOS_PROPS : path of ONOS properties file (~/ONOS/conf/onos.properties)
8# $ONOS_LOGBACK : path of logback config file (~/ONOS/conf/logback.`hostname`.xml)
9# $LOGDIR : path of log output directory (~/ONOS/onos-logs)
10# $LOGBASE : base name of log output file (onos.`hostname`)
11# $RAMCLOUD_HOME : path of root directory of RAMCloud repository (~/ramcloud)
12# $RAMCLOUD_BRANCH : branch name of RAMCloud to use (master)
13# $JVM_OPTS : JVM options ONOS starts with
14#####################################################
15
16
17### Variables read from ONOS config file ###
18ONOS_HOME=${ONOS_HOME:-$(cd `dirname $0`; pwd)}
Naoki Shiota9df15d32014-03-27 14:26:20 -070019ONOS_CONF_DIR=${ONOS_CONF_DIR:-${ONOS_HOME}/conf}
Naoki Shiota590c18d2014-03-31 17:52:59 -070020ONOS_CONF=${ONOS_CONF:-${ONOS_CONF_DIR}/onos_node.conf}
21
22if [ ! -f ${ONOS_CONF} ]; then
23 echo "${ONOS_CONF} not found."
24 exit 1
25fi
26ONOS_HOST_NAME=`grep ^host.name ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
27if [ -z "${ONOS_HOST_NAME}" ]; then
28 ONOS_HOST_NAME=`hostname`
29fi
30ONOS_HOST_IP=`grep ^host.ip ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
31ONOS_HOST_ROLE=`grep ^host.role ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
32ONOS_HOST_BACKEND=`grep ^host.backend ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
33ZK_HOSTS=`grep ^zookeeper.hosts ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
34RC_COORD_PROTOCOL=`grep ^ramcloud.coordinator.protocol ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
35RC_COORD_IP=`grep ^ramcloud.coordinator.ip ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
36RC_COORD_PORT=`grep ^ramcloud.coordinator.port ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
37RC_SERVER_PROTOCOL=`grep ^ramcloud.server.protocol ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
38RC_SERVER_IP=`grep ^ramcloud.server.ip ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
39RC_SERVER_PORT=`grep ^ramcloud.server.port ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
40############################################
41
42
43############## Other variables #############
Naoki Shiota4e463182014-03-21 15:13:24 -070044LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
45
46ZK_DIR=${HOME}/zookeeper-3.4.5
Naoki Shiota9df15d32014-03-27 14:26:20 -070047ZK_CONF_FILE=zoo.cfg
48ZK_CONF=${ONOS_CONF_DIR}/${ZK_CONF_FILE}
49ZK_CONF_BACKUP=${ZK_CONF}.bak
50ZK_CONF_TEMPLATE=${ONOS_CONF_DIR}/zoo.cfg.template
Naoki Shiota4e463182014-03-21 15:13:24 -070051ZOO_LOG_DIR=${ONOS_HOME}/onos-logs
Naoki Shiota9df15d32014-03-27 14:26:20 -070052ZK_LIB_DIR=/var/lib/zookeeper
53ZK_MY_ID=${ZK_LIB_DIR}/myid
Naoki Shiota4e463182014-03-21 15:13:24 -070054
55RAMCLOUD_DIR=${HOME}/ramcloud
56RAMCLOUD_HOME=${RAMCLOUD_HOME:-~/ramcloud}
Naoki Shiota590c18d2014-03-31 17:52:59 -070057RAMCLOUD_COORD_LOG=${LOGDIR}/ramcloud.coordinator.${ONOS_HOST_NAME}.log
58RAMCLOUD_SERVER_LOG=${LOGDIR}/ramcloud.server.${ONOS_HOST_NAME}.log
Naoki Shiota4e463182014-03-21 15:13:24 -070059RAMCLOUD_BRANCH=${RAMCLOUD_BRANCH:-master}
Naoki Shiota9df15d32014-03-27 14:26:20 -070060RAMCLOUD_COORD_PORT=12246
61RAMCLOUD_SERVER_PORT=12242
Naoki Shiota4e463182014-03-21 15:13:24 -070062
63export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${ONOS_HOME}/lib:${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}
64
65## 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 -070066ONOS_LOGBACK=${ONOS_LOGBACK:-${ONOS_CONF_DIR}/logback.${ONOS_HOST_NAME}.xml}
Naoki Shiota9df15d32014-03-27 14:26:20 -070067ONOS_LOGBACK_BACKUP=${ONOS_LOGBACK}.bak
68ONOS_LOGBACK_TEMPLATE=${ONOS_CONF_DIR}/logback.xml.template
Naoki Shiota4e463182014-03-21 15:13:24 -070069LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
Naoki Shiota590c18d2014-03-31 17:52:59 -070070LOGBASE=${ONOS_LOGBASE:-onos.${ONOS_HOST_NAME}}
Naoki Shiota4e463182014-03-21 15:13:24 -070071ONOS_LOG="${LOGDIR}/${LOGBASE}.log"
72PCAP_LOG="${LOGDIR}/${LOGBASE}.pcap"
73LOGS="$ONOS_LOG $PCAP_LOG"
74
Naoki Shiota9df15d32014-03-27 14:26:20 -070075ONOS_PROPS=${ONOS_PROPS:-${ONOS_CONF_DIR}/onos.properties}
Naoki Shiota4e463182014-03-21 15:13:24 -070076JMX_PORT=${JMX_PORT:-7189}
77
78# Set JVM options
79JVM_OPTS="${JVM_OPTS:-}"
Naoki Shiota4e463182014-03-21 15:13:24 -070080JVM_OPTS="$JVM_OPTS -server -d64"
81#JVM_OPTS="$JVM_OPTS -XX:+TieredCompilation -XX:InitialCodeCacheSize=512m -XX:ReservedCodeCacheSize=512m"
Yuta HIGUCHI18354592014-04-01 13:53:42 -070082
83# Uncomment or specify appropriate value as JVM_OPTS environment variables.
84#JVM_OPTS="$JVM_OPTS -Xmx4g -Xms4g -Xmn800m"
Naoki Shiota4e463182014-03-21 15:13:24 -070085#JVM_OPTS="$JVM_OPTS -Xmx2g -Xms2g -Xmn800m"
86#JVM_OPTS="$JVM_OPTS -Xmx1g -Xms1g -Xmn800m"
Yuta HIGUCHI18354592014-04-01 13:53:42 -070087
88#JVM_OPTS="$JVM_OPTS -XX:+UseParallelGC"
89JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC"
90JVM_OPTS="$JVM_OPTS -XX:+AggressiveOpts"
91
92# We may want to remove UseFastAccessorMethods option: http://bugs.java.com/view_bug.do?bug_id=6385687
93JVM_OPTS="$JVM_OPTS -XX:+UseFastAccessorMethods"
94
95JVM_OPTS="$JVM_OPTS -XX:MaxInlineSize=8192"
96JVM_OPTS="$JVM_OPTS -XX:FreqInlineSize=8192"
97JVM_OPTS="$JVM_OPTS -XX:CompileThreshold=1500"
98
Naoki Shiota4e463182014-03-21 15:13:24 -070099JVM_OPTS="$JVM_OPTS -XX:OnError=crash-logger" ;# For dumping core
Yuta HIGUCHI18354592014-04-01 13:53:42 -0700100
101# Workaround for Thread Priority http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workaround.html
102JVM_OPTS="$JVM_OPTS -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42"
103
104JVM_OPTS="$JVM_OPTS -XX:+UseCompressedOops"
105
106JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
107JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
108JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
109
Naoki Shiota4e463182014-03-21 15:13:24 -0700110JVM_OPTS="$JVM_OPTS -Dhazelcast.logging.type=slf4j"
111
Yuta HIGUCHI18354592014-04-01 13:53:42 -0700112# Uncomment to dump final JVM flags to stdout
113#JVM_OPTS="$JVM_OPTS -XX:+PrintFlagsFinal"
114
Naoki Shiota4e463182014-03-21 15:13:24 -0700115# Set ONOS core main class
Jonathan Hart51f6f5b2014-04-03 10:32:10 -0700116MAIN_CLASS="net.onrc.onos.core.main.Main"
Naoki Shiota4e463182014-03-21 15:13:24 -0700117
118MVN=${MVN:-mvn -o}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700119############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700120
Naoki Shiota9df15d32014-03-27 14:26:20 -0700121
Naoki Shiota590c18d2014-03-31 17:52:59 -0700122############# Common functions #############
123function print_usage {
124 local filename=`basename ${ONOS_CONF}`
125 local usage="Usage: setup/start/stop ONOS on this server.
126 \$ $0 setup [-f]
127 Set up ONOS node using ${filename}.
128 - generate and replace config file of ZooKeeper.
129 - create myid in ZooKeeper datadir.
130 - generate and replace logback.${ONOS_HOST_NAME}.xml
131 If -f option is used, all existing files will be overwritten without confirmation.
132 \$ $0 start [single-node|coord-node|server-node|coord-and-server-node]
133 Start ONOS node with specific RAMCloud entities
134 - single-node: start ONOS with stand-alone RAMCloud
135 - coord-node : start ONOS with RAMCloud coordinator
136 - server-node: start ONOS with RAMCloud server
137 - coord-and-server-node: start ONOS with RAMCloud coordinator and server
138 * Default behavior can be defined by ${filename}
139 \$ $0 stop
140 Stop all ONOS-related processes
141 \$ $0 restart
142 Stop and start currently running ONOS-related processes
143 \$$0 status
144 Show status of ONOS-related processes
145 \$ $0 {zk|rc-coord|rc-server|core} {start|stop|restart|status}
146 Control specific ONOS-related process"
147
148 echo "${usage}"
Naoki Shiota4e463182014-03-21 15:13:24 -0700149}
150
151function rotate-log {
152 local logfile=$1
153 local nr_max=${2:-10}
154 if [ -f $logfile ]; then
155 for i in `seq $(expr $nr_max - 1) -1 1`; do
156 if [ -f ${logfile}.${i} ]; then
157 mv -f ${logfile}.${i} ${logfile}.`expr $i + 1`
158 fi
159 done
160 mv $logfile $logfile.1
161 fi
162}
163
164# kill-processes {module-name} {array of pids}
165function kill-processes {
166 # Kill the existing processes
167 local pids=$2
Naoki Shiota9df15d32014-03-27 14:26:20 -0700168 if [ ! -z "$pids" ]; then
Naoki Shiota4e463182014-03-21 15:13:24 -0700169 echo -n "Stopping $1 ... "
170 fi
171 for p in ${pids}; do
172 if [ x$p != "x" ]; then
173 kill -KILL $p
174 echo "Killed existing process (pid: $p)"
175 fi
176 done
177}
178
Naoki Shiota9df15d32014-03-27 14:26:20 -0700179function revert-conf {
180 set -e
181
182 echo -n "ERROR occurred ... "
183 local temp_zk="${ZK_CONF}.tmp"
184
185 if [ -f "${temp_zk}" ]; then
186 local zk_file=`basename ${ZK_CONF}`
187 echo -n "reverting ${zk_file} ... "
188 rm ${temp_zk}
189 mv ${ZK_CONF_BACKUP} ${ZK_CONF}
190 fi
191
192 echo "EXIT"
193
194 if [ ! -z "$1" ]; then
195 echo $1
196 fi
197
198 set +e
199
200 exit 1
201}
202
Naoki Shiota590c18d2014-03-31 17:52:59 -0700203function create-zk-conf {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700204 echo -n "Creating ${ZK_CONF} ... "
205
Naoki Shiota590c18d2014-03-31 17:52:59 -0700206 # creation of zookeeper config
Naoki Shiota9df15d32014-03-27 14:26:20 -0700207
Naoki Shiota590c18d2014-03-31 17:52:59 -0700208 local temp_zk="${ZK_CONF}.tmp"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700209 touch ${temp_zk}
210
211 if [ -f ${ZK_CONF} ]; then
212 mv ${ZK_CONF} ${ZK_CONF_BACKUP}
213 local backup_file=`basename ${ZK_CONF_BACKUP}`
214 echo -n "backup old file to ${backup_file} ... "
215 fi
216
217 local hosts=${ZK_HOSTS}
218 if [ -z "${hosts}" ]; then
219 # assume single-node mode
220 hosts=${ONOS_HOST_NAME}
221 fi
222
223 hostarr=`echo ${hosts} | tr "," " "`
224
225 local i=1
226 local myid=
227 for host in ${hostarr}; do
228 if [ ${host} = ${ONOS_HOST_NAME} ]; then
229 myid=$i
230 break
231 fi
232 i=`expr $i + 1`
233 done
234
235 if [ -z "${myid}" ]; then
Naoki Shiota590c18d2014-03-31 17:52:59 -0700236 local filename=`basename ${ONOS_CONF}`
237 revert-conf "[ERROR in ${filename}] zookeeper.hosts must have hostname \"${ONOS_HOST_NAME}\""
Naoki Shiota9df15d32014-03-27 14:26:20 -0700238 fi
239
240 # TODO: Remove sudo.
241 # This is temporary code for the sake of compatibility with old code (which creates myid with root user).
242 sudo mv ${ZK_MY_ID} ${ZK_MY_ID}.old
243 echo ${myid} > ${ZK_MY_ID}
244
245 echo -n "myid is assigned to ${myid} ... "
246
247 while read line; do
248 if [[ $line =~ ^__HOSTS__$ ]]; then
249 i=1
250 for host in ${hostarr}; do
251 # TODO: ports might be configurable
252 local hostline="server.${i}=${host}:2888:3888"
253 echo $hostline >> "${temp_zk}"
254 i=`expr $i + 1`
255 done
256 elif [[ $line =~ __DATADIR__ ]]; then
257 echo $line | sed -e "s|__DATADIR__|${ZK_LIB_DIR}|" >> ${temp_zk}
258 else
259 echo $line >> ${temp_zk}
260 fi
261 done < ${ZK_CONF_TEMPLATE}
262 mv ${temp_zk} ${ZK_CONF}
263
264 echo "DONE"
Naoki Shiota590c18d2014-03-31 17:52:59 -0700265}
Naoki Shiota9df15d32014-03-27 14:26:20 -0700266
Naoki Shiota590c18d2014-03-31 17:52:59 -0700267function create-logback-conf {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700268 echo -n "Creating ${ONOS_LOGBACK} ... "
Naoki Shiota590c18d2014-03-31 17:52:59 -0700269
Naoki Shiota9df15d32014-03-27 14:26:20 -0700270 # creation of logback config
271 if [ -f $ONOS_LOGBACK ]; then
272 local logback_file=`basename ${ONOS_LOGBACK}`
273 mv ${ONOS_LOGBACK} ${ONOS_LOGBACK_BACKUP}
274 local logback_back_file=`basename ${ONOS_LOGBACK_BACKUP}`
275 echo -n "backup old file to ${logback_back_file} ... "
276 fi
277 sed -e "s|__FILENAME__|${ONOS_LOG}|" ${ONOS_LOGBACK_TEMPLATE} > ${ONOS_LOGBACK}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700278
Naoki Shiota9df15d32014-03-27 14:26:20 -0700279 echo "DONE"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700280}
281
Naoki Shiota590c18d2014-03-31 17:52:59 -0700282function create-conf {
283 local key
284 local filename
285
286 trap revert-conf ERR
287
288 if [ -f ${ZK_CONF} -a "$1" != "-f" ]; then
289 # confirmation to overwrite existing config file
290 echo -n "Overwriting ${ZK_CONF_FILE} [Y/n]? "
291 while [ 1 ]; do
292 read key
293 if [ -z "${key}" -o "${key}" == "Y" ]; then
294 create-zk-conf
295 break
296 elif [ "${key}" == "n" ]; then
297 break
298 fi
299 echo "[Y/n]?"
300 done
301 else
302 create-zk-conf
303 fi
304
305 if [ -f ${ONOS_LOGBACK} -a "$1" != "-f" ]; then
306 filename=`basename ${ONOS_LOGBACK}`
307 echo -n "Overwriting ${filename} [Y/n]? "
308 while [ 1 ]; do
309 read key
310 if [ -z "${key}" -o "${key}" == "Y" ]; then
311 create-logback-conf
312 break
313 elif [ "${key}" == "n" ]; then
314 break
315 fi
316 echo "[Y/n]?"
317 done
318 else
319 create-logback-conf
320 fi
321
322 trap - ERR
323}
324############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700325
Naoki Shiota590c18d2014-03-31 17:52:59 -0700326
327###### Functions related to ZooKeeper ######
Naoki Shiota4e463182014-03-21 15:13:24 -0700328function zk {
329 case "$1" in
330 start)
331 start-zk
332 ;;
333 stop)
334 stop-zk
335 ;;
336 stat*) # <- status
337 status-zk
338 ;;
339 re*) # <- restart
340 stop-zk
341 start-zk
342 ;;
343 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700344 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700345 exit 1
346 esac
347}
348
349function start-zk {
Naoki Shiota4e463182014-03-21 15:13:24 -0700350 echo -n "Starting Zookeeper ... "
Naoki Shiota9df15d32014-03-27 14:26:20 -0700351
352 if [ -f "${ZK_CONF}" ]; then
353 # Run Zookeeper with our configuration
354 export ZOOCFG=${ZK_CONF_FILE}
355 export ZOOCFGDIR=${ONOS_CONF_DIR}
356 fi
357
Naoki Shiota4e463182014-03-21 15:13:24 -0700358 $ZK_DIR/bin/zkServer.sh start
359}
360
361function stop-zk {
362 kill-processes "ZooKeeper" `jps -l | grep org.apache.zookeeper.server | awk '{print $1}'`
363}
364
365function status-zk {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700366 if [ -f ${ZK_CONF} ]; then
367 export ZOOCFG=${ZK_CONF_FILE}
368 export ZOOCFGDIR=${ONOS_CONF_DIR}
369 fi
370
Naoki Shiota4e463182014-03-21 15:13:24 -0700371 $ZK_DIR/bin/zkServer.sh status
372}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700373############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700374
375
Naoki Shiota590c18d2014-03-31 17:52:59 -0700376####### Functions related to RAMCloud ######
Naoki Shiota9df15d32014-03-27 14:26:20 -0700377function start-backend {
378 if [ "${ONOS_HOST_BACKEND}" = "ramcloud" ]; then
Naoki Shiota590c18d2014-03-31 17:52:59 -0700379 if [ $1 == "coord" ]; then
380 rc-coord startifdown
381 elif [ $1 == "server" ]; then
382 rc-server startifdown
383 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700384 fi
385}
386
387function stop-backend {
388 rcsn=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
389 if [ $rcsn != 0 ]; then
390 rc-server stop
391 fi
392
Naoki Shiota590c18d2014-03-31 17:52:59 -0700393 rccn=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
Naoki Shiota9df15d32014-03-27 14:26:20 -0700394 if [ $rccn != 0 ]; then
395 rc-coord stop
396 fi
397}
398
Naoki Shiota590c18d2014-03-31 17:52:59 -0700399function deldb {
400# TODO: implement
401 return
402}
403
404
Naoki Shiota4e463182014-03-21 15:13:24 -0700405### Functions related to RAMCloud coordinator
Naoki Shiota9df15d32014-03-27 14:26:20 -0700406function rc-coord-addr {
407 local coordproto=${RC_COORD_PROTOCOL}
408 local coordip=${RC_COORD_IP}
409 local coordport=${RC_COORD_PORT}
410
411 if [ -z "${coordproto}" ]; then
412 coordproto='fast+udp'
413 fi
414
415 if [ -z "${coordip}" ]; then
416 # assume single-node mode
417 coordip=${ONOS_HOST_IP}
418 fi
419
420 if [ -z "${coordport}" ]; then
421 # assume default port
422 coordport=${RAMCLOUD_COORD_PORT}
423 fi
424
425 echo "${coordproto}:host=${coordip},port=${coordport}"
426}
427
428function rc-server-addr {
429 local serverproto=${RC_SERVER_PROTOCOL}
430 local serverip=${RC_SERVER_IP}
431 local serverport=${RC_SERVER_PORT}
432
433 if [ -z "${serverproto}" ]; then
434 serverproto='fast+udp'
435 fi
436
437 # Normally this parameter should be null
438 if [ -z "${serverip}" ]; then
439 serverip=${ONOS_HOST_IP}
440 fi
441
442 if [ -z "${serverport}" ]; then
443 # assume default port
444 serverport=${RAMCLOUD_SERVER_PORT}
445 fi
446
447 echo "${serverproto}:host=${serverip},port=${serverport}"
448}
449
Naoki Shiota4e463182014-03-21 15:13:24 -0700450function rc-coord {
451 case "$1" in
452 start)
453 deldb
Naoki Shiota4e463182014-03-21 15:13:24 -0700454 stop-coord
455 start-coord
456 ;;
457 startifdown)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700458 local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
Naoki Shiota4e463182014-03-21 15:13:24 -0700459 if [ $n == 0 ]; then
460 start-coord
461 else
462 echo "$n instance of RAMCloud coordinator running"
463 fi
464 ;;
465 stop)
466 stop-coord
467 ;;
468 stat*) # <- status
469 local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
470 echo "$n RAMCloud coordinator running"
471 ;;
472 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700473 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700474 exit 1
475 esac
476}
477
478function start-coord {
479 if [ ! -d ${LOGDIR} ]; then
480 mkdir -p ${LOGDIR}
481 fi
482 if [ -f $RAMCLOUD_COORD_LOG ]; then
483 rotate-log $RAMCLOUD_COORD_LOG
484 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700485
486 local coord_addr=`rc-coord-addr`
Naoki Shiota4e463182014-03-21 15:13:24 -0700487
488 # Run ramcloud
489 echo -n "Starting RAMCloud coordinator ... "
Naoki Shiota9df15d32014-03-27 14:26:20 -0700490 $RAMCLOUD_DIR/obj.${RAMCLOUD_BRANCH}/coordinator -L ${coord_addr} > $RAMCLOUD_COORD_LOG 2>&1 &
Naoki Shiota4e463182014-03-21 15:13:24 -0700491 echo "STARTED"
492}
493
494
495function stop-coord {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700496 kill-processes "RAMCloud coordinator" `pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator`
Naoki Shiota4e463182014-03-21 15:13:24 -0700497}
498
Naoki Shiota4e463182014-03-21 15:13:24 -0700499### Functions related to RAMCloud server
500function rc-server {
501 case "$1" in
502 start)
503 deldb
Naoki Shiota4e463182014-03-21 15:13:24 -0700504 stop-server
505 start-server
506 ;;
507 startifdown)
508 local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
509 if [ $n == 0 ]; then
510 start-server
511 else
512 echo "$n instance of RAMCloud server running"
513 fi
514 ;;
515 stop)
516 stop-server
517 ;;
518# deldb)
519# deldb
520# ;;
521 stat*) # <- status
522 n=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
523 echo "$n RAMCloud server running"
524 ;;
525 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700526 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700527 exit 1
528 esac
529}
530
531function start-server {
532 if [ ! -d ${LOGDIR} ]; then
533 mkdir -p ${LOGDIR}
534 fi
535 if [ -f $RAMCLOUD_SERVER_LOG ]; then
536 rotate-log $RAMCLOUD_SERVER_LOG
537 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700538
539 local coord_addr=`rc-coord-addr`
540 local server_addr=`rc-server-addr`
Naoki Shiota4e463182014-03-21 15:13:24 -0700541
542 # Run ramcloud
543 echo -n "Starting RAMCloud server ... "
Naoki Shiota9df15d32014-03-27 14:26:20 -0700544 ${RAMCLOUD_DIR}/obj.${RAMCLOUD_BRANCH}/server -M -L ${server_addr} -C ${coord_addr} --masterServiceThreads 1 --logCleanerThreads 1 --detectFailures 0 > $RAMCLOUD_SERVER_LOG 2>&1 &
Naoki Shiota4e463182014-03-21 15:13:24 -0700545 echo "STARTED"
546}
547
548function stop-server {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700549 kill-processes "RAMCloud server" `pgrep -f obj.${RAMCLOUD_BRANCH}/server`
Naoki Shiota4e463182014-03-21 15:13:24 -0700550}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700551############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700552
553
Naoki Shiota590c18d2014-03-31 17:52:59 -0700554## Functions related to ONOS core process ##
Naoki Shiota4e463182014-03-21 15:13:24 -0700555function onos {
Naoki Shiota590c18d2014-03-31 17:52:59 -0700556 CPFILE=${ONOS_HOME}/.javacp.${ONOS_HOST_NAME}
Naoki Shiota4e463182014-03-21 15:13:24 -0700557 if [ ! -f ${CPFILE} ]; then
Naoki Shiota9df15d32014-03-27 14:26:20 -0700558 echo "ONOS core needs to be built"
Naoki Shiota4e463182014-03-21 15:13:24 -0700559 ${MVN} -f ${ONOS_HOME}/pom.xml compile
560 fi
561 JAVA_CP=`cat ${CPFILE}`
562 JAVA_CP="${JAVA_CP}:${ONOS_HOME}/target/classes"
563
564 case "$1" in
565 start)
566 stop-onos
567 start-onos
568 ;;
569 startnokill)
570 start-onos
571 ;;
572 startifdown)
573 n=`jps -l | grep "${MAIN_CLASS}" | wc -l`
574 if [ $n == 0 ]; then
575 start-onos
576 else
577 echo "$n instance of onos running"
578 fi
579 ;;
580 stop)
581 stop-onos
582 ;;
583 stat*) # <- status
584 n=`jps -l | grep "${MAIN_CLASS}" | wc -l`
585 echo "$n instance of onos running"
586 ;;
587 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700588 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700589 exit 1
590 esac
591}
592
593function start-onos {
594 if [ ! -d ${LOGDIR} ]; then
595 mkdir -p ${LOGDIR}
596 fi
597 # Backup log files
598 for log in ${LOGS}; do
599 if [ -f ${log} ]; then
600 rotate-log ${log}
601 fi
602 done
Naoki Shiota9df15d32014-03-27 14:26:20 -0700603
Naoki Shiota4e463182014-03-21 15:13:24 -0700604 if [ ! -f ${ONOS_LOGBACK} ]; then
Naoki Shiota9df15d32014-03-27 14:26:20 -0700605 echo "[WARNING] ${ONOS_LOGBACK} not found."
606 echo " Run \"\$ $0 setup\" to create."
607 exit 1
Naoki Shiota4e463182014-03-21 15:13:24 -0700608 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700609
610 JVM_OPTS="${JVM_OPTS} -Dnet.onrc.onos.datastore.backend=${ONOS_HOST_BACKEND}"
611
612 # Run ONOS
613
614 echo -n "Starting ONOS controller ..."
Naoki Shiota4e463182014-03-21 15:13:24 -0700615 java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${JAVA_CP} ${MAIN_CLASS} -cf ${ONOS_PROPS} > ${LOGDIR}/${LOGBASE}.stdout 2>${LOGDIR}/${LOGBASE}.stderr &
616
617 # We need to wait a bit to find out whether starting the ONOS process succeeded
618 sleep 1
619
620 n=`jps -l |grep "${MAIN_CLASS}" | wc -l`
Naoki Shiota9df15d32014-03-27 14:26:20 -0700621 if [ $n -ge 1 ]; then
Naoki Shiota4e463182014-03-21 15:13:24 -0700622 echo " STARTED"
623 else
624 echo " FAILED"
625 fi
626
627# echo "java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -jar ${ONOS_JAR} -cf ./onos.properties > /dev/null 2>&1 &"
628# sudo -b /usr/sbin/tcpdump -n -i eth0 -s0 -w ${PCAP_LOG} 'tcp port 6633' > /dev/null 2>&1
629}
630
631function stop-onos {
632 kill-processes "ONOS controller" `jps -l | grep ${MAIN_CLASS} | awk '{print $1}'`
633# kill-processes "tcpdump" `ps -edalf |grep tcpdump |grep ${PCAP_LOG} | awk '{print $4}'`
634}
Naoki Shiota590c18d2014-03-31 17:52:59 -0700635############################################
Naoki Shiota4e463182014-03-21 15:13:24 -0700636
637
Naoki Shiota590c18d2014-03-31 17:52:59 -0700638################## Main ####################
Naoki Shiota4e463182014-03-21 15:13:24 -0700639case "$1" in
Naoki Shiota9df15d32014-03-27 14:26:20 -0700640 setup)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700641 create-conf $2
Naoki Shiota9df15d32014-03-27 14:26:20 -0700642 ;;
Naoki Shiota4e463182014-03-21 15:13:24 -0700643 start)
Naoki Shiota9df15d32014-03-27 14:26:20 -0700644 mode_parameter=${ONOS_HOST_ROLE}
645 if [ ! -z "$2" ]; then
646 mode_parameter=$2
647 fi
648
649 case "${mode_parameter}" in
Naoki Shiota4e463182014-03-21 15:13:24 -0700650 single-node)
651 zk start
Naoki Shiota590c18d2014-03-31 17:52:59 -0700652 start-backend coord
653 start-backend server
Naoki Shiota4e463182014-03-21 15:13:24 -0700654 onos startifdown
655 ;;
656 coord-node)
657 zk start
Naoki Shiota590c18d2014-03-31 17:52:59 -0700658 start-backend coord
Naoki Shiota4e463182014-03-21 15:13:24 -0700659 onos startifdown
660 ;;
661 server-node)
662 zk start
Naoki Shiota590c18d2014-03-31 17:52:59 -0700663 start-backend server
664 onos startifdown
665 ;;
666 coord-and-server-node)
667 zk start
668 start-backend coord
669 start-backend server
Naoki Shiota4e463182014-03-21 15:13:24 -0700670 onos startifdown
671 ;;
672 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700673 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700674 ;;
675 esac
676 echo
677 ;;
678 stop)
679 on=`jps -l | grep "${MAIN_CLASS}" | wc -l`
680 if [ $on != 0 ]; then
681 onos stop
682 fi
683
Naoki Shiota9df15d32014-03-27 14:26:20 -0700684 stop-backend
Naoki Shiota4e463182014-03-21 15:13:24 -0700685
686 zkn=`jps -l | grep org.apache.zookeeper.server | wc -l`
687 if [ $zkn != 0 ]; then
688 zk stop
689 fi
690 echo
691 ;;
692 restart)
693 on=`jps -l | grep "${MAIN_CLASS}" | wc -l`
694 if [ $on != 0 ]; then
695 onos stop
696 fi
697
698 rcsn=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
699 if [ $rcsn != 0 ]; then
700 rc-server stop
701 fi
702
Naoki Shiota590c18d2014-03-31 17:52:59 -0700703 rccn=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
Naoki Shiota4e463182014-03-21 15:13:24 -0700704 if [ $rccn != 0 ]; then
705 rc-coord stop
706 fi
707
708 zkn=`jps -l | grep org.apache.zookeeper.server | wc -l`
709 if [ $zkn != 0 ]; then
710 zk restart
711 fi
712
713 if [ $rccn != 0 ]; then
714 rc-coord startifdown
715 fi
716
717 if [ $rcsn != 0 ]; then
718 rc-server startifdown
719 fi
720
721 if [ $on != 0 ]; then
722 onos startifdown
723 fi
724 echo
725 ;;
726 stat*) # <- status
727 echo '[ZooKeeper]'
728 zk status
729 echo
730 echo '[RAMCloud coordinator]'
731 rc-coord status
732 echo
733 echo '[RAMCloud server]'
734 rc-server status
735 echo
736 echo '[ONOS core]'
737 onos status
738 echo
739 ;;
740 zk)
741 zk $2
742 ;;
743 rc-c*) # <- rc-coordinator
744 rc-coord $2
745 ;;
746 rc-s*) # <- rc-server
747 rc-server $2
748 ;;
749 core)
750 onos $2
751 ;;
752 *)
Naoki Shiota590c18d2014-03-31 17:52:59 -0700753 print_usage
Naoki Shiota4e463182014-03-21 15:13:24 -0700754 exit 1
755esac
Naoki Shiota590c18d2014-03-31 17:52:59 -0700756