Aggregated startup scripts to one script.
Old scripts will be removed after testing period of some length.
- Merged all scripts below and enclosed to functions
- start-zk.sh
- start-ramcloud-coordinator.sh
- start-ramcloud-server.sh
- start-onos.sh
- Uniformed print format
- Created new CLI parameters
- Removed duplicated/obsolete codes
- Segregate logback config file template from startup script
Change-Id: Ice2f9c3dae630f8d7b60c99bca06d5818df0a8ee
diff --git a/conf/logback.xml.template b/conf/logback.xml.template
new file mode 100644
index 0000000..aef06ed
--- /dev/null
+++ b/conf/logback.xml.template
@@ -0,0 +1,24 @@
+<configuration scan="true" scanPeriod="1 minutes" debug="true">
+<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+<encoder>
+<pattern>%level [%logger:%thread] %msg%n</pattern>
+</encoder>
+</appender>
+
+<appender name="FILE" class="ch.qos.logback.core.FileAppender">
+<file>__FILENAME__</file>
+<encoder>
+<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
+<immediateFlush>true</immediateFlush>
+</encoder>
+</appender>
+
+<logger name="org" level="WARN"/>
+<logger name="LogService" level="WARN"/> <!-- Restlet access logging -->
+<logger name="net.floodlightcontroller.logging" level="WARN"/>
+<logger name="com.hazelcast" level="INFO"/>
+
+<root level="DEBUG">
+<appender-ref ref="FILE" />
+</root>
+</configuration>
\ No newline at end of file
diff --git a/onos.sh b/onos.sh
new file mode 100755
index 0000000..775ea06
--- /dev/null
+++ b/onos.sh
@@ -0,0 +1,441 @@
+#!/bin/bash
+# Set paths
+
+ONOS_HOME=`dirname $0`
+LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
+
+ZK_DIR=${HOME}/zookeeper-3.4.5
+#ZK_CONF=${ONOS_HOME}/conf/zoo.cfg
+ZOO_LOG_DIR=${ONOS_HOME}/onos-logs
+
+RAMCLOUD_DIR=${HOME}/ramcloud
+RAMCLOUD_HOME=${RAMCLOUD_HOME:-~/ramcloud}
+RAMCLOUD_COORD_LOG=${LOGDIR}/ramcloud.coordinator.`hostname`.log
+RAMCLOUD_SERVER_LOG=${LOGDIR}/ramcloud.server.`hostname`.log
+coordinatorip=`grep coordinatorIp ${ONOS_HOME}/conf/ramcloud.conf | cut -d "=" -f 2,3`
+coordinatorport=`grep coordinatorPort ${ONOS_HOME}/conf/ramcloud.conf | cut -d "=" -f 2,3`
+serverip=`grep serverIp ${ONOS_HOME}/conf/ramcloud.conf | cut -d "=" -f 2,3`
+serverport=`grep serverPort ${ONOS_HOME}/conf/ramcloud.conf | cut -d "=" -f 2,3`
+RAMCLOUD_COORDINATOR=`echo $coordinatorip","$coordinatorport`
+RAMCLOUD_SERVER=`echo $serverip","$serverport`
+RAMCLOUD_BRANCH=${RAMCLOUD_BRANCH:-master}
+
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${ONOS_HOME}/lib:${RAMCLOUD_HOME}/obj.${RAMCLOUD_BRANCH}
+
+## Because the script change dir to $ONOS_HOME, we can set ONOS_LOGBACK and LOGDIR relative to $ONOS_HOME
+ONOS_LOGBACK=${ONOS_LOGBACK:-${ONOS_HOME}/conf/logback.`hostname`.xml}
+ONOS_LOGBACK_TEMPLATE=${ONOS_HOME}/conf/logback.xml.template
+LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
+LOGBASE=${ONOS_LOGBASE:-onos.`hostname`}
+ONOS_LOG="${LOGDIR}/${LOGBASE}.log"
+PCAP_LOG="${LOGDIR}/${LOGBASE}.pcap"
+LOGS="$ONOS_LOG $PCAP_LOG"
+
+ONOS_PROPS=${ONOS_PROPS:-${ONOS_HOME}/conf/onos.properties}
+JMX_PORT=${JMX_PORT:-7189}
+
+# Set JVM options
+JVM_OPTS="${JVM_OPTS:-}"
+## If you want JaCoCo Code Coverage reports... uncomment line below
+#JVM_OPTS="$JVM_OPTS -javaagent:${ONOS_HOME}/lib/jacocoagent.jar=dumponexit=true,output=file,destfile=${LOGDIR}/jacoco.exec"
+JVM_OPTS="$JVM_OPTS -server -d64"
+#JVM_OPTS="$JVM_OPTS -XX:+TieredCompilation -XX:InitialCodeCacheSize=512m -XX:ReservedCodeCacheSize=512m"
+JVM_OPTS="$JVM_OPTS -Xmx4g -Xms4g -Xmn800m"
+#JVM_OPTS="$JVM_OPTS -Xmx2g -Xms2g -Xmn800m"
+#JVM_OPTS="$JVM_OPTS -Xmx1g -Xms1g -Xmn800m"
+#JVM_OPTS="$JVM_OPTS -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods"
+JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC -XX:+UseAdaptiveSizePolicy -XX:+AggressiveOpts -XX:+UseFastAccessorMethods"
+JVM_OPTS="$JVM_OPTS -XX:MaxInlineSize=8192 -XX:FreqInlineSize=8192"
+JVM_OPTS="$JVM_OPTS -XX:CompileThreshold=1500 -XX:PreBlockSpin=8"
+JVM_OPTS="$JVM_OPTS -XX:OnError=crash-logger" ;# For dumping core
+#JVM_OPTS="$JVM_OPTS -Dpython.security.respectJavaAccessibility=false"
+JVM_OPTS="$JVM_OPTS -XX:CompileThreshold=1500 -XX:PreBlockSpin=8 \
+ -XX:+UseThreadPriorities \
+ -XX:ThreadPriorityPolicy=42 \
+ -XX:+UseCompressedOops \
+ -Dcom.sun.management.jmxremote.port=$JMX_PORT \
+ -Dcom.sun.management.jmxremote.ssl=false \
+ -Dbenchmark.measureBP=0 \
+ -Dbenchmark.measureRc=0 \
+ -Dbenchmark.measureONOS=0 \
+ -Dcom.sun.management.jmxremote.authenticate=false"
+JVM_OPTS="$JVM_OPTS -Dhazelcast.logging.type=slf4j"
+
+# Set ONOS core main class
+MAIN_CLASS="net.onrc.onos.ofcontroller.core.Main"
+
+MVN=${MVN:-mvn -o}
+
+function usage {
+ echo "Usage"
+ echo " $0 start {single-node|coord-node|server-node}"
+ echo " single-node: start ONOS with RAMCloud coordinator/server"
+ echo " coord-node : start ONOS with RAMCloud coordinator"
+ echo " server-node: start ONOS with RAMCloud server"
+ echo " $0 stop"
+ echo " $0 restart"
+ echo " $0 status"
+ echo " $0 {zk|rc-coord|rc-server|core} {start|stop|restart|status}"
+}
+
+function rotate-log {
+ local logfile=$1
+ local nr_max=${2:-10}
+ if [ -f $logfile ]; then
+ for i in `seq $(expr $nr_max - 1) -1 1`; do
+ if [ -f ${logfile}.${i} ]; then
+ mv -f ${logfile}.${i} ${logfile}.`expr $i + 1`
+ fi
+ done
+ mv $logfile $logfile.1
+ fi
+}
+
+# kill-processes {module-name} {array of pids}
+function kill-processes {
+ # Kill the existing processes
+ local pids=$2
+ local n=${#pids[*]}
+ if [ $n != 0 ]; then
+ echo -n "Stopping $1 ... "
+ fi
+ for p in ${pids}; do
+ if [ x$p != "x" ]; then
+ kill -KILL $p
+ echo "Killed existing process (pid: $p)"
+ fi
+ done
+}
+
+
+### Functions related to ZooKeeper
+function zk {
+ case "$1" in
+ start)
+ start-zk
+ ;;
+ stop)
+ stop-zk
+ ;;
+ stat*) # <- status
+ status-zk
+ ;;
+ re*) # <- restart
+ stop-zk
+ start-zk
+ ;;
+ *)
+ usage
+ exit 1
+ esac
+}
+
+function start-zk {
+ # Run Zookeeper with our configuration
+ echo -n "Starting Zookeeper ... "
+ $ZK_DIR/bin/zkServer.sh start
+}
+
+function stop-zk {
+ kill-processes "ZooKeeper" `jps -l | grep org.apache.zookeeper.server | awk '{print $1}'`
+}
+
+function status-zk {
+ $ZK_DIR/bin/zkServer.sh status
+}
+
+
+### Functions related to RAMCloud coordinator
+function rc-coord {
+ case "$1" in
+ start)
+ deldb
+ cp $ONOS_HOME/conf/ramcloud.conf /tmp
+ stop-coord
+ start-coord
+ ;;
+ startifdown)
+ local n=`pgrep coordinator | wc -l`
+ if [ $n == 0 ]; then
+ start-coord
+ else
+ echo "$n instance of RAMCloud coordinator running"
+ fi
+ ;;
+ stop)
+ stop-coord
+ ;;
+ stat*) # <- status
+ local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/coordinator | wc -l`
+ echo "$n RAMCloud coordinator running"
+ ;;
+ *)
+ usage
+ exit 1
+ esac
+}
+
+function start-coord {
+ if [ ! -d ${LOGDIR} ]; then
+ mkdir -p ${LOGDIR}
+ fi
+ if [ -f $RAMCLOUD_COORD_LOG ]; then
+ rotate-log $RAMCLOUD_COORD_LOG
+ fi
+
+ # Run ramcloud
+ echo -n "Starting RAMCloud coordinator ... "
+ $RAMCLOUD_DIR/obj.${RAMCLOUD_BRANCH}/coordinator -L $RAMCLOUD_COORDINATOR > $RAMCLOUD_COORD_LOG 2>&1 &
+ echo "STARTED"
+}
+
+
+function stop-coord {
+ kill-processes "RAMCloud coordinator" `pgrep coordinator | awk '{print $1}'`
+}
+
+function deldb {
+# TODO: implement
+ return
+}
+
+### Functions related to RAMCloud server
+function rc-server {
+ case "$1" in
+ start)
+ deldb
+ cp $ONOS_HOME/conf/ramcloud.conf /tmp
+ stop-server
+ start-server
+ ;;
+ startifdown)
+ local n=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
+ if [ $n == 0 ]; then
+ start-server
+ else
+ echo "$n instance of RAMCloud server running"
+ fi
+ ;;
+ stop)
+ stop-server
+ ;;
+# deldb)
+# deldb
+# ;;
+ stat*) # <- status
+ n=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
+ echo "$n RAMCloud server running"
+ ;;
+ *)
+ usage
+ exit 1
+ esac
+}
+
+function start-server {
+ if [ ! -d ${LOGDIR} ]; then
+ mkdir -p ${LOGDIR}
+ fi
+ if [ -f $RAMCLOUD_SERVER_LOG ]; then
+ rotate-log $RAMCLOUD_SERVER_LOG
+ fi
+
+ # Run ramcloud
+ echo -n "Starting RAMCloud server ... "
+ $RAMCLOUD_DIR/obj.${RAMCLOUD_BRANCH}/server -M -L $RAMCLOUD_SERVER -C $RAMCLOUD_COORDINATOR --masterServiceThreads 1 --logCleanerThreads 1 --detectFailures 0 > $RAMCLOUD_SERVER_LOG 2>&1 &
+ echo "STARTED"
+}
+
+function stop-server {
+ kill-processes "RAMCloud server" `pgrep -f obj.${RAMCLOUD_BRANCH}/server | awk '{print $1}'`
+}
+
+
+### Functions related to ONOS core process
+function onos {
+ CPFILE=${ONOS_HOME}/.javacp.`hostname`
+ if [ ! -f ${CPFILE} ]; then
+ ${MVN} -f ${ONOS_HOME}/pom.xml compile
+ fi
+ JAVA_CP=`cat ${CPFILE}`
+ JAVA_CP="${JAVA_CP}:${ONOS_HOME}/target/classes"
+
+ case "$1" in
+ start)
+ stop-onos
+ start-onos
+ ;;
+ startnokill)
+ start-onos
+ ;;
+ startifdown)
+ n=`jps -l | grep "${MAIN_CLASS}" | wc -l`
+ if [ $n == 0 ]; then
+ start-onos
+ else
+ echo "$n instance of onos running"
+ fi
+ ;;
+ stop)
+ stop-onos
+ ;;
+ stat*) # <- status
+ n=`jps -l | grep "${MAIN_CLASS}" | wc -l`
+ echo "$n instance of onos running"
+ ;;
+ *)
+ usage
+ exit 1
+ esac
+}
+
+function start-onos {
+ if [ ! -d ${LOGDIR} ]; then
+ mkdir -p ${LOGDIR}
+ fi
+ # Backup log files
+ for log in ${LOGS}; do
+ if [ -f ${log} ]; then
+ rotate-log ${log}
+ fi
+ done
+
+ # Run ONOS
+ echo -n "Starting ONOS controller ..."
+# Create default logback config file using template
+ if [ ! -f ${ONOS_LOGBACK} ]; then
+ sed -e "s|__FILENAME__|${ONOS_LOG}|" ${ONOS_LOGBACK_TEMPLATE} > ${ONOS_LOGBACK}
+ fi
+ java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -cp ${JAVA_CP} ${MAIN_CLASS} -cf ${ONOS_PROPS} > ${LOGDIR}/${LOGBASE}.stdout 2>${LOGDIR}/${LOGBASE}.stderr &
+
+ # We need to wait a bit to find out whether starting the ONOS process succeeded
+ sleep 1
+
+ n=`jps -l |grep "${MAIN_CLASS}" | wc -l`
+ if [ "$n" -ge "1" ]; then
+ echo " STARTED"
+ else
+ echo " FAILED"
+ fi
+
+# echo "java ${JVM_OPTS} -Dlogback.configurationFile=${ONOS_LOGBACK} -jar ${ONOS_JAR} -cf ./onos.properties > /dev/null 2>&1 &"
+# sudo -b /usr/sbin/tcpdump -n -i eth0 -s0 -w ${PCAP_LOG} 'tcp port 6633' > /dev/null 2>&1
+}
+
+function stop-onos {
+ kill-processes "ONOS controller" `jps -l | grep ${MAIN_CLASS} | awk '{print $1}'`
+# kill-processes "tcpdump" `ps -edalf |grep tcpdump |grep ${PCAP_LOG} | awk '{print $4}'`
+}
+
+
+case "$1" in
+ start)
+ case $2 in
+ single-node)
+ zk start
+ rc-coord startifdown
+ rc-server startifdown
+ onos startifdown
+ ;;
+ coord-node)
+ zk start
+ rc-coord startifdown
+ onos startifdown
+ ;;
+ server-node)
+ zk start
+ rc-server startifdown
+ onos startifdown
+ ;;
+ *)
+ usage
+ ;;
+ esac
+ echo
+ ;;
+ stop)
+ on=`jps -l | grep "${MAIN_CLASS}" | wc -l`
+ if [ $on != 0 ]; then
+ onos stop
+ fi
+
+ rcsn=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
+ if [ $rcsn != 0 ]; then
+ rc-server stop
+ fi
+
+ rccn=`pgrep coordinator | wc -l`
+ if [ $rccn != 0 ]; then
+ rc-coord stop
+ fi
+
+ zkn=`jps -l | grep org.apache.zookeeper.server | wc -l`
+ if [ $zkn != 0 ]; then
+ zk stop
+ fi
+ echo
+ ;;
+ restart)
+ on=`jps -l | grep "${MAIN_CLASS}" | wc -l`
+ if [ $on != 0 ]; then
+ onos stop
+ fi
+
+ rcsn=`pgrep -f obj.${RAMCLOUD_BRANCH}/server | wc -l`
+ if [ $rcsn != 0 ]; then
+ rc-server stop
+ fi
+
+ rccn=`pgrep coordinator | wc -l`
+ if [ $rccn != 0 ]; then
+ rc-coord stop
+ fi
+
+ zkn=`jps -l | grep org.apache.zookeeper.server | wc -l`
+ if [ $zkn != 0 ]; then
+ zk restart
+ fi
+
+ if [ $rccn != 0 ]; then
+ rc-coord startifdown
+ fi
+
+ if [ $rcsn != 0 ]; then
+ rc-server startifdown
+ fi
+
+ if [ $on != 0 ]; then
+ onos startifdown
+ fi
+ echo
+ ;;
+ stat*) # <- status
+ echo '[ZooKeeper]'
+ zk status
+ echo
+ echo '[RAMCloud coordinator]'
+ rc-coord status
+ echo
+ echo '[RAMCloud server]'
+ rc-server status
+ echo
+ echo '[ONOS core]'
+ onos status
+ echo
+ ;;
+ zk)
+ zk $2
+ ;;
+ rc-c*) # <- rc-coordinator
+ rc-coord $2
+ ;;
+ rc-s*) # <- rc-server
+ rc-server $2
+ ;;
+ core)
+ onos $2
+ ;;
+ *)
+ usage
+ exit 1
+esac
diff --git a/start-onos.sh b/start-onos.sh
index e664d09..3da5352 100755
--- a/start-onos.sh
+++ b/start-onos.sh
@@ -1,5 +1,11 @@
#!/bin/bash
+echo
+echo "===================================================================="
+echo "[WARNING] This script is deprecated. Use \"\$ ./onos.sh core\" instead."
+echo "===================================================================="
+echo
+
ulimit -c unlimited
# Set paths
diff --git a/start-ramcloud-coordinator.sh b/start-ramcloud-coordinator.sh
index fd1ec83..1c0d9a7 100755
--- a/start-ramcloud-coordinator.sh
+++ b/start-ramcloud-coordinator.sh
@@ -1,5 +1,10 @@
#!/bin/bash
+echo
+echo "========================================================================"
+echo "[WARNING] This script is deprecated. Use \"\$ ./onos.sh rc-coord\" instead."
+echo "========================================================================"
+echo
# Set paths
ONOS_HOME=`dirname $0`
diff --git a/start-ramcloud-server.sh b/start-ramcloud-server.sh
index 939543a..c938f14 100755
--- a/start-ramcloud-server.sh
+++ b/start-ramcloud-server.sh
@@ -1,5 +1,11 @@
#!/bin/bash
+echo
+echo "========================================================================="
+echo "[WARNING] This script is deprecated. Use \"\$ ./onos.sh rc-server\" instead."
+echo "========================================================================="
+echo
+
ulimit -c unlimited
# Set paths
diff --git a/start-zk.sh b/start-zk.sh
index 30de5fb..36d531f 100755
--- a/start-zk.sh
+++ b/start-zk.sh
@@ -1,4 +1,11 @@
#!/bin/bash
+
+echo
+echo "=================================================================="
+echo "[WARNING] This script is deprecated. Use \"\$ ./onos.sh zk\" instead."
+echo "=================================================================="
+echo
+
# Set paths
ONOS_HOME=`dirname $0`