blob: 17e04b168e32eaad4baa324cec5d1a80758388fe [file] [log] [blame]
Naoki Shiota4e463182014-03-21 15:13:24 -07001#!/bin/bash
Naoki Shiota4e463182014-03-21 15:13:24 -07002
Naoki Shiota9df15d32014-03-27 14:26:20 -07003ONOS_HOME=$(cd `dirname $0`; pwd)
4ONOS_CONF_DIR=${ONOS_CONF_DIR:-${ONOS_HOME}/conf}
5ONOS_CONF_FILE=onos_node.conf
6ONOS_CONF=${ONOS_CONF:-${ONOS_CONF_DIR}/${ONOS_CONF_FILE}}
Naoki Shiota4e463182014-03-21 15:13:24 -07007LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
8
9ZK_DIR=${HOME}/zookeeper-3.4.5
Naoki Shiota9df15d32014-03-27 14:26:20 -070010ZK_CONF_FILE=zoo.cfg
11ZK_CONF=${ONOS_CONF_DIR}/${ZK_CONF_FILE}
12ZK_CONF_BACKUP=${ZK_CONF}.bak
13ZK_CONF_TEMPLATE=${ONOS_CONF_DIR}/zoo.cfg.template
Naoki Shiota4e463182014-03-21 15:13:24 -070014ZOO_LOG_DIR=${ONOS_HOME}/onos-logs
Naoki Shiota9df15d32014-03-27 14:26:20 -070015ZK_LIB_DIR=/var/lib/zookeeper
16ZK_MY_ID=${ZK_LIB_DIR}/myid
Naoki Shiota4e463182014-03-21 15:13:24 -070017
18RAMCLOUD_DIR=${HOME}/ramcloud
19RAMCLOUD_HOME=${RAMCLOUD_HOME:-~/ramcloud}
20RAMCLOUD_COORD_LOG=${LOGDIR}/ramcloud.coordinator.`hostname`.log
21RAMCLOUD_SERVER_LOG=${LOGDIR}/ramcloud.server.`hostname`.log
Naoki Shiota4e463182014-03-21 15:13:24 -070022RAMCLOUD_BRANCH=${RAMCLOUD_BRANCH:-master}
Naoki Shiota9df15d32014-03-27 14:26:20 -070023RAMCLOUD_COORD_PORT=12246
24RAMCLOUD_SERVER_PORT=12242
Naoki Shiota4e463182014-03-21 15:13:24 -070025
26export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${ONOS_HOME}/lib:${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}
27
28## Because the script change dir to $ONOS_HOME, we can set ONOS_LOGBACK and LOGDIR relative to $ONOS_HOME
Naoki Shiota9df15d32014-03-27 14:26:20 -070029ONOS_LOGBACK=${ONOS_LOGBACK:-${ONOS_CONF_DIR}/logback.`hostname`.xml}
30ONOS_LOGBACK_BACKUP=${ONOS_LOGBACK}.bak
31ONOS_LOGBACK_TEMPLATE=${ONOS_CONF_DIR}/logback.xml.template
Naoki Shiota4e463182014-03-21 15:13:24 -070032LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
33LOGBASE=${ONOS_LOGBASE:-onos.`hostname`}
34ONOS_LOG="${LOGDIR}/${LOGBASE}.log"
35PCAP_LOG="${LOGDIR}/${LOGBASE}.pcap"
36LOGS="$ONOS_LOG $PCAP_LOG"
37
Naoki Shiota9df15d32014-03-27 14:26:20 -070038ONOS_PROPS=${ONOS_PROPS:-${ONOS_CONF_DIR}/onos.properties}
Naoki Shiota4e463182014-03-21 15:13:24 -070039JMX_PORT=${JMX_PORT:-7189}
40
41# Set JVM options
42JVM_OPTS="${JVM_OPTS:-}"
43## If you want JaCoCo Code Coverage reports... uncomment line below
44#JVM_OPTS="$JVM_OPTS -javaagent:${ONOS_HOME}/lib/jacocoagent.jar=dumponexit=true,output=file,destfile=${LOGDIR}/jacoco.exec"
45JVM_OPTS="$JVM_OPTS -server -d64"
46#JVM_OPTS="$JVM_OPTS -XX:+TieredCompilation -XX:InitialCodeCacheSize=512m -XX:ReservedCodeCacheSize=512m"
47JVM_OPTS="$JVM_OPTS -Xmx4g -Xms4g -Xmn800m"
48#JVM_OPTS="$JVM_OPTS -Xmx2g -Xms2g -Xmn800m"
49#JVM_OPTS="$JVM_OPTS -Xmx1g -Xms1g -Xmn800m"
50#JVM_OPTS="$JVM_OPTS -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods"
51JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC -XX:+UseAdaptiveSizePolicy -XX:+AggressiveOpts -XX:+UseFastAccessorMethods"
52JVM_OPTS="$JVM_OPTS -XX:MaxInlineSize=8192 -XX:FreqInlineSize=8192"
53JVM_OPTS="$JVM_OPTS -XX:CompileThreshold=1500 -XX:PreBlockSpin=8"
54JVM_OPTS="$JVM_OPTS -XX:OnError=crash-logger" ;# For dumping core
55#JVM_OPTS="$JVM_OPTS -Dpython.security.respectJavaAccessibility=false"
56JVM_OPTS="$JVM_OPTS -XX:CompileThreshold=1500 -XX:PreBlockSpin=8 \
57 -XX:+UseThreadPriorities \
58 -XX:ThreadPriorityPolicy=42 \
59 -XX:+UseCompressedOops \
60 -Dcom.sun.management.jmxremote.port=$JMX_PORT \
61 -Dcom.sun.management.jmxremote.ssl=false \
62 -Dbenchmark.measureBP=0 \
63 -Dbenchmark.measureRc=0 \
64 -Dbenchmark.measureONOS=0 \
65 -Dcom.sun.management.jmxremote.authenticate=false"
66JVM_OPTS="$JVM_OPTS -Dhazelcast.logging.type=slf4j"
67
68# Set ONOS core main class
69MAIN_CLASS="net.onrc.onos.ofcontroller.core.Main"
70
71MVN=${MVN:-mvn -o}
72
Naoki Shiota9df15d32014-03-27 14:26:20 -070073
74### Variables read from ONOS config
75if [ ! -f ${ONOS_CONF} ]; then
76 echo "${ONOS_CONF} not found."
77 exit 1
78fi
79ONOS_HOST_NAME=`grep ^host.name ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
80if [ -z "${ONOS_HOST_NAME}" ]; then
81 ONOS_HOST_NAME='hostname'
82fi
83ONOS_HOST_IP=`grep ^host.ip ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
84ONOS_HOST_ROLE=`grep ^host.role ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
85ONOS_HOST_BACKEND=`grep ^host.backend ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
86ZK_HOSTS=`grep ^zookeeper.hosts ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
87RC_COORD_PROTOCOL=`grep ^ramcloud.coordinator.protocol ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
88RC_COORD_IP=`grep ^ramcloud.coordinator.ip ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
89RC_COORD_PORT=`grep ^ramcloud.coordinator.port ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
90RC_SERVER_PROTOCOL=`grep ^ramcloud.server.protocol ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
91RC_SERVER_IP=`grep ^ramcloud.server.ip ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
92RC_SERVER_PORT=`grep ^ramcloud.server.port ${ONOS_CONF} | cut -d "=" -f 2 | sed -e 's/^[ \t]*//'`
93
94
95### Common functions
Naoki Shiota4e463182014-03-21 15:13:24 -070096function usage {
Naoki Shiota9df15d32014-03-27 14:26:20 -070097 echo "Usage: setup/start/stop ONOS on this server."
98 echo " $0 setup"
99 echo " Set up ONOS node using ${ONOS_CONF_FILE}"
100 echo " - generate and replace config file of ZooKeeper."
101 echo " - create myid in ZooKeeper datadir."
102 echo " - generate and replace logback.${ONOS_HOST_NAME}.xml"
103 echo " $0 start [single-node|coord-node|server-node]"
104 echo " Start ONOS node with specific RAMCloud entities"
105 echo " - single-node: start ONOS with RAMCloud coordinator/server"
106 echo " - coord-node : start ONOS with RAMCloud coordinator"
107 echo " - server-node: start ONOS with RAMCloud server"
108 echo " * Default behavior can be defined by ${ONOS_CONF_FILE}"
Naoki Shiota4e463182014-03-21 15:13:24 -0700109 echo " $0 stop"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700110 echo " Stop all ONOS-related processes"
Naoki Shiota4e463182014-03-21 15:13:24 -0700111 echo " $0 restart"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700112 echo " Stop and start currently running ONOS-related processes"
Naoki Shiota4e463182014-03-21 15:13:24 -0700113 echo " $0 status"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700114 echo " Show status of ONOS-related processes"
Naoki Shiota4e463182014-03-21 15:13:24 -0700115 echo " $0 {zk|rc-coord|rc-server|core} {start|stop|restart|status}"
Naoki Shiota9df15d32014-03-27 14:26:20 -0700116 echo " Control specific ONOS-related process"
Naoki Shiota4e463182014-03-21 15:13:24 -0700117}
118
119function rotate-log {
120 local logfile=$1
121 local nr_max=${2:-10}
122 if [ -f $logfile ]; then
123 for i in `seq $(expr $nr_max - 1) -1 1`; do
124 if [ -f ${logfile}.${i} ]; then
125 mv -f ${logfile}.${i} ${logfile}.`expr $i + 1`
126 fi
127 done
128 mv $logfile $logfile.1
129 fi
130}
131
132# kill-processes {module-name} {array of pids}
133function kill-processes {
134 # Kill the existing processes
135 local pids=$2
Naoki Shiota9df15d32014-03-27 14:26:20 -0700136 if [ ! -z "$pids" ]; then
Naoki Shiota4e463182014-03-21 15:13:24 -0700137 echo -n "Stopping $1 ... "
138 fi
139 for p in ${pids}; do
140 if [ x$p != "x" ]; then
141 kill -KILL $p
142 echo "Killed existing process (pid: $p)"
143 fi
144 done
145}
146
Naoki Shiota9df15d32014-03-27 14:26:20 -0700147function revert-conf {
148 set -e
149
150 echo -n "ERROR occurred ... "
151 local temp_zk="${ZK_CONF}.tmp"
152
153 if [ -f "${temp_zk}" ]; then
154 local zk_file=`basename ${ZK_CONF}`
155 echo -n "reverting ${zk_file} ... "
156 rm ${temp_zk}
157 mv ${ZK_CONF_BACKUP} ${ZK_CONF}
158 fi
159
160 echo "EXIT"
161
162 if [ ! -z "$1" ]; then
163 echo $1
164 fi
165
166 set +e
167
168 exit 1
169}
170
171function create-conf {
172 # creation of zookeeper config
173
174 trap revert-conf ERR
175
176 echo -n "Creating ${ZK_CONF} ... "
177
178 local temp_zk="${ZK_CONF}.tmp"
179
180 touch ${temp_zk}
181
182 if [ -f ${ZK_CONF} ]; then
183 mv ${ZK_CONF} ${ZK_CONF_BACKUP}
184 local backup_file=`basename ${ZK_CONF_BACKUP}`
185 echo -n "backup old file to ${backup_file} ... "
186 fi
187
188 local hosts=${ZK_HOSTS}
189 if [ -z "${hosts}" ]; then
190 # assume single-node mode
191 hosts=${ONOS_HOST_NAME}
192 fi
193
194 hostarr=`echo ${hosts} | tr "," " "`
195
196 local i=1
197 local myid=
198 for host in ${hostarr}; do
199 if [ ${host} = ${ONOS_HOST_NAME} ]; then
200 myid=$i
201 break
202 fi
203 i=`expr $i + 1`
204 done
205
206 if [ -z "${myid}" ]; then
207 revert-conf "[ERROR in ${ONOS_CONF_FILE}] zookeeper.hosts must have hostname \"${ONOS_HOST_NAME}\""
208 fi
209
210 # TODO: Remove sudo.
211 # This is temporary code for the sake of compatibility with old code (which creates myid with root user).
212 sudo mv ${ZK_MY_ID} ${ZK_MY_ID}.old
213 echo ${myid} > ${ZK_MY_ID}
214
215 echo -n "myid is assigned to ${myid} ... "
216
217 while read line; do
218 if [[ $line =~ ^__HOSTS__$ ]]; then
219 i=1
220 for host in ${hostarr}; do
221 # TODO: ports might be configurable
222 local hostline="server.${i}=${host}:2888:3888"
223 echo $hostline >> "${temp_zk}"
224 i=`expr $i + 1`
225 done
226 elif [[ $line =~ __DATADIR__ ]]; then
227 echo $line | sed -e "s|__DATADIR__|${ZK_LIB_DIR}|" >> ${temp_zk}
228 else
229 echo $line >> ${temp_zk}
230 fi
231 done < ${ZK_CONF_TEMPLATE}
232 mv ${temp_zk} ${ZK_CONF}
233
234 echo "DONE"
235
236 echo -n "Creating ${ONOS_LOGBACK} ... "
237 # creation of logback config
238 if [ -f $ONOS_LOGBACK ]; then
239 local logback_file=`basename ${ONOS_LOGBACK}`
240 mv ${ONOS_LOGBACK} ${ONOS_LOGBACK_BACKUP}
241 local logback_back_file=`basename ${ONOS_LOGBACK_BACKUP}`
242 echo -n "backup old file to ${logback_back_file} ... "
243 fi
244 sed -e "s|__FILENAME__|${ONOS_LOG}|" ${ONOS_LOGBACK_TEMPLATE} > ${ONOS_LOGBACK}
245 echo "DONE"
246
247 trap - ERR
248
249 return
250}
251
Naoki Shiota4e463182014-03-21 15:13:24 -0700252
253### Functions related to ZooKeeper
254function zk {
255 case "$1" in
256 start)
257 start-zk
258 ;;
259 stop)
260 stop-zk
261 ;;
262 stat*) # <- status
263 status-zk
264 ;;
265 re*) # <- restart
266 stop-zk
267 start-zk
268 ;;
269 *)
270 usage
271 exit 1
272 esac
273}
274
275function start-zk {
Naoki Shiota4e463182014-03-21 15:13:24 -0700276 echo -n "Starting Zookeeper ... "
Naoki Shiota9df15d32014-03-27 14:26:20 -0700277
278 if [ -f "${ZK_CONF}" ]; then
279 # Run Zookeeper with our configuration
280 export ZOOCFG=${ZK_CONF_FILE}
281 export ZOOCFGDIR=${ONOS_CONF_DIR}
282 fi
283
Naoki Shiota4e463182014-03-21 15:13:24 -0700284 $ZK_DIR/bin/zkServer.sh start
285}
286
287function stop-zk {
288 kill-processes "ZooKeeper" `jps -l | grep org.apache.zookeeper.server | awk '{print $1}'`
289}
290
291function status-zk {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700292 if [ -f ${ZK_CONF} ]; then
293 export ZOOCFG=${ZK_CONF_FILE}
294 export ZOOCFGDIR=${ONOS_CONF_DIR}
295 fi
296
Naoki Shiota4e463182014-03-21 15:13:24 -0700297 $ZK_DIR/bin/zkServer.sh status
298}
299
300
Naoki Shiota9df15d32014-03-27 14:26:20 -0700301function start-backend {
302 if [ "${ONOS_HOST_BACKEND}" = "ramcloud" ]; then
303 rc-coord startifdown
304 rc-server startifdown
305 fi
306}
307
308function stop-backend {
309 rcsn=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
310 if [ $rcsn != 0 ]; then
311 rc-server stop
312 fi
313
314 rccn=`pgrep coordinator | wc -l`
315 if [ $rccn != 0 ]; then
316 rc-coord stop
317 fi
318}
319
Naoki Shiota4e463182014-03-21 15:13:24 -0700320### Functions related to RAMCloud coordinator
Naoki Shiota9df15d32014-03-27 14:26:20 -0700321function rc-coord-addr {
322 local coordproto=${RC_COORD_PROTOCOL}
323 local coordip=${RC_COORD_IP}
324 local coordport=${RC_COORD_PORT}
325
326 if [ -z "${coordproto}" ]; then
327 coordproto='fast+udp'
328 fi
329
330 if [ -z "${coordip}" ]; then
331 # assume single-node mode
332 coordip=${ONOS_HOST_IP}
333 fi
334
335 if [ -z "${coordport}" ]; then
336 # assume default port
337 coordport=${RAMCLOUD_COORD_PORT}
338 fi
339
340 echo "${coordproto}:host=${coordip},port=${coordport}"
341}
342
343function rc-server-addr {
344 local serverproto=${RC_SERVER_PROTOCOL}
345 local serverip=${RC_SERVER_IP}
346 local serverport=${RC_SERVER_PORT}
347
348 if [ -z "${serverproto}" ]; then
349 serverproto='fast+udp'
350 fi
351
352 # Normally this parameter should be null
353 if [ -z "${serverip}" ]; then
354 serverip=${ONOS_HOST_IP}
355 fi
356
357 if [ -z "${serverport}" ]; then
358 # assume default port
359 serverport=${RAMCLOUD_SERVER_PORT}
360 fi
361
362 echo "${serverproto}:host=${serverip},port=${serverport}"
363}
364
Naoki Shiota4e463182014-03-21 15:13:24 -0700365function rc-coord {
366 case "$1" in
367 start)
368 deldb
Naoki Shiota4e463182014-03-21 15:13:24 -0700369 stop-coord
370 start-coord
371 ;;
372 startifdown)
373 local n=`pgrep coordinator | wc -l`
374 if [ $n == 0 ]; then
375 start-coord
376 else
377 echo "$n instance of RAMCloud coordinator running"
378 fi
379 ;;
380 stop)
381 stop-coord
382 ;;
383 stat*) # <- status
384 local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
385 echo "$n RAMCloud coordinator running"
386 ;;
387 *)
388 usage
389 exit 1
390 esac
391}
392
393function start-coord {
394 if [ ! -d ${LOGDIR} ]; then
395 mkdir -p ${LOGDIR}
396 fi
397 if [ -f $RAMCLOUD_COORD_LOG ]; then
398 rotate-log $RAMCLOUD_COORD_LOG
399 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700400
401 local coord_addr=`rc-coord-addr`
Naoki Shiota4e463182014-03-21 15:13:24 -0700402
403 # Run ramcloud
404 echo -n "Starting RAMCloud coordinator ... "
Naoki Shiota9df15d32014-03-27 14:26:20 -0700405 $RAMCLOUD_DIR/obj.${RAMCLOUD_BRANCH}/coordinator -L ${coord_addr} > $RAMCLOUD_COORD_LOG 2>&1 &
Naoki Shiota4e463182014-03-21 15:13:24 -0700406 echo "STARTED"
407}
408
409
410function stop-coord {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700411 kill-processes "RAMCloud coordinator" `pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator`
Naoki Shiota4e463182014-03-21 15:13:24 -0700412}
413
414function deldb {
415# TODO: implement
416 return
417}
418
419### Functions related to RAMCloud server
420function rc-server {
421 case "$1" in
422 start)
423 deldb
Naoki Shiota4e463182014-03-21 15:13:24 -0700424 stop-server
425 start-server
426 ;;
427 startifdown)
428 local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
429 if [ $n == 0 ]; then
430 start-server
431 else
432 echo "$n instance of RAMCloud server running"
433 fi
434 ;;
435 stop)
436 stop-server
437 ;;
438# deldb)
439# deldb
440# ;;
441 stat*) # <- status
442 n=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
443 echo "$n RAMCloud server running"
444 ;;
445 *)
446 usage
447 exit 1
448 esac
449}
450
451function start-server {
452 if [ ! -d ${LOGDIR} ]; then
453 mkdir -p ${LOGDIR}
454 fi
455 if [ -f $RAMCLOUD_SERVER_LOG ]; then
456 rotate-log $RAMCLOUD_SERVER_LOG
457 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700458
459 local coord_addr=`rc-coord-addr`
460 local server_addr=`rc-server-addr`
Naoki Shiota4e463182014-03-21 15:13:24 -0700461
462 # Run ramcloud
463 echo -n "Starting RAMCloud server ... "
Naoki Shiota9df15d32014-03-27 14:26:20 -0700464 ${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 -0700465 echo "STARTED"
466}
467
468function stop-server {
Naoki Shiota9df15d32014-03-27 14:26:20 -0700469 kill-processes "RAMCloud server" `pgrep -f obj.${RAMCLOUD_BRANCH}/server`
Naoki Shiota4e463182014-03-21 15:13:24 -0700470}
471
472
473### Functions related to ONOS core process
474function onos {
475 CPFILE=${ONOS_HOME}/.javacp.`hostname`
476 if [ ! -f ${CPFILE} ]; then
Naoki Shiota9df15d32014-03-27 14:26:20 -0700477 echo "ONOS core needs to be built"
Naoki Shiota4e463182014-03-21 15:13:24 -0700478 ${MVN} -f ${ONOS_HOME}/pom.xml compile
479 fi
480 JAVA_CP=`cat ${CPFILE}`
481 JAVA_CP="${JAVA_CP}:${ONOS_HOME}/target/classes"
482
483 case "$1" in
484 start)
485 stop-onos
486 start-onos
487 ;;
488 startnokill)
489 start-onos
490 ;;
491 startifdown)
492 n=`jps -l | grep "${MAIN_CLASS}" | wc -l`
493 if [ $n == 0 ]; then
494 start-onos
495 else
496 echo "$n instance of onos running"
497 fi
498 ;;
499 stop)
500 stop-onos
501 ;;
502 stat*) # <- status
503 n=`jps -l | grep "${MAIN_CLASS}" | wc -l`
504 echo "$n instance of onos running"
505 ;;
506 *)
507 usage
508 exit 1
509 esac
510}
511
512function start-onos {
513 if [ ! -d ${LOGDIR} ]; then
514 mkdir -p ${LOGDIR}
515 fi
516 # Backup log files
517 for log in ${LOGS}; do
518 if [ -f ${log} ]; then
519 rotate-log ${log}
520 fi
521 done
Naoki Shiota9df15d32014-03-27 14:26:20 -0700522
Naoki Shiota4e463182014-03-21 15:13:24 -0700523 if [ ! -f ${ONOS_LOGBACK} ]; then
Naoki Shiota9df15d32014-03-27 14:26:20 -0700524 echo "[WARNING] ${ONOS_LOGBACK} not found."
525 echo " Run \"\$ $0 setup\" to create."
526 exit 1
Naoki Shiota4e463182014-03-21 15:13:24 -0700527 fi
Naoki Shiota9df15d32014-03-27 14:26:20 -0700528
529 JVM_OPTS="${JVM_OPTS} -Dnet.onrc.onos.datastore.backend=${ONOS_HOST_BACKEND}"
530
531 # Run ONOS
532
533 echo -n "Starting ONOS controller ..."
Naoki Shiota4e463182014-03-21 15:13:24 -0700534 java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${JAVA_CP} ${MAIN_CLASS} -cf ${ONOS_PROPS} > ${LOGDIR}/${LOGBASE}.stdout 2>${LOGDIR}/${LOGBASE}.stderr &
535
536 # We need to wait a bit to find out whether starting the ONOS process succeeded
537 sleep 1
538
539 n=`jps -l |grep "${MAIN_CLASS}" | wc -l`
Naoki Shiota9df15d32014-03-27 14:26:20 -0700540 if [ $n -ge 1 ]; then
Naoki Shiota4e463182014-03-21 15:13:24 -0700541 echo " STARTED"
542 else
543 echo " FAILED"
544 fi
545
546# echo "java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -jar ${ONOS_JAR} -cf ./onos.properties > /dev/null 2>&1 &"
547# sudo -b /usr/sbin/tcpdump -n -i eth0 -s0 -w ${PCAP_LOG} 'tcp port 6633' > /dev/null 2>&1
548}
549
550function stop-onos {
551 kill-processes "ONOS controller" `jps -l | grep ${MAIN_CLASS} | awk '{print $1}'`
552# kill-processes "tcpdump" `ps -edalf |grep tcpdump |grep ${PCAP_LOG} | awk '{print $4}'`
553}
554
555
Naoki Shiota9df15d32014-03-27 14:26:20 -0700556# Main
557
Naoki Shiota4e463182014-03-21 15:13:24 -0700558case "$1" in
Naoki Shiota9df15d32014-03-27 14:26:20 -0700559 setup)
560 create-conf
561 ;;
Naoki Shiota4e463182014-03-21 15:13:24 -0700562 start)
Naoki Shiota9df15d32014-03-27 14:26:20 -0700563 mode_parameter=${ONOS_HOST_ROLE}
564 if [ ! -z "$2" ]; then
565 mode_parameter=$2
566 fi
567
568 case "${mode_parameter}" in
Naoki Shiota4e463182014-03-21 15:13:24 -0700569 single-node)
570 zk start
Naoki Shiota9df15d32014-03-27 14:26:20 -0700571 start-backend
Naoki Shiota4e463182014-03-21 15:13:24 -0700572 onos startifdown
573 ;;
574 coord-node)
575 zk start
576 rc-coord startifdown
577 onos startifdown
578 ;;
579 server-node)
580 zk start
581 rc-server startifdown
582 onos startifdown
583 ;;
584 *)
585 usage
586 ;;
587 esac
588 echo
589 ;;
590 stop)
591 on=`jps -l | grep "${MAIN_CLASS}" | wc -l`
592 if [ $on != 0 ]; then
593 onos stop
594 fi
595
Naoki Shiota9df15d32014-03-27 14:26:20 -0700596 stop-backend
Naoki Shiota4e463182014-03-21 15:13:24 -0700597
598 zkn=`jps -l | grep org.apache.zookeeper.server | wc -l`
599 if [ $zkn != 0 ]; then
600 zk stop
601 fi
602 echo
603 ;;
604 restart)
605 on=`jps -l | grep "${MAIN_CLASS}" | wc -l`
606 if [ $on != 0 ]; then
607 onos stop
608 fi
609
610 rcsn=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
611 if [ $rcsn != 0 ]; then
612 rc-server stop
613 fi
614
615 rccn=`pgrep coordinator | wc -l`
616 if [ $rccn != 0 ]; then
617 rc-coord stop
618 fi
619
620 zkn=`jps -l | grep org.apache.zookeeper.server | wc -l`
621 if [ $zkn != 0 ]; then
622 zk restart
623 fi
624
625 if [ $rccn != 0 ]; then
626 rc-coord startifdown
627 fi
628
629 if [ $rcsn != 0 ]; then
630 rc-server startifdown
631 fi
632
633 if [ $on != 0 ]; then
634 onos startifdown
635 fi
636 echo
637 ;;
638 stat*) # <- status
639 echo '[ZooKeeper]'
640 zk status
641 echo
642 echo '[RAMCloud coordinator]'
643 rc-coord status
644 echo
645 echo '[RAMCloud server]'
646 rc-server status
647 echo
648 echo '[ONOS core]'
649 onos status
650 echo
651 ;;
652 zk)
653 zk $2
654 ;;
655 rc-c*) # <- rc-coordinator
656 rc-coord $2
657 ;;
658 rc-s*) # <- rc-server
659 rc-server $2
660 ;;
661 core)
662 onos $2
663 ;;
664 *)
665 usage
666 exit 1
667esac