Merge branch 'master' of github.com:OPENNETWORKINGLAB/ONOS
diff --git a/cluster-mgmt/bin/bootup.sh b/cluster-mgmt/bin/bootup.sh
new file mode 100755
index 0000000..e58e802
--- /dev/null
+++ b/cluster-mgmt/bin/bootup.sh
@@ -0,0 +1,20 @@
+#! /bin/bash
+. $HOME/bin/func.sh
+
+onos stop
+cassandra cleandb
+cassandra stop
+zk stop
+
+zk start
+cassandra start
+cassandra cleandb
+db_status=`cassandra checkdb |grep OK | wc -l`
+if [ $db_status != 1 ];then
+  echo $db_status
+  echo "Cassandra DB was screwed up. Need DB key drop"
+  exit
+fi
+onos start
+switch local
+#dsh -g $basename 'cd ONOS; ./ctrl-local.sh'
diff --git a/cluster-mgmt/bin/start.sh b/cluster-mgmt/bin/start.sh
index e58e802..277d69b 100755
--- a/cluster-mgmt/bin/start.sh
+++ b/cluster-mgmt/bin/start.sh
@@ -3,12 +3,7 @@
 
 onos stop
 cassandra cleandb
-cassandra stop
-zk stop
 
-zk start
-cassandra start
-cassandra cleandb
 db_status=`cassandra checkdb |grep OK | wc -l`
 if [ $db_status != 1 ];then
   echo $db_status
diff --git a/web/ons-demo/RELEASE_NOTES.txt b/web/ons-demo/RELEASE_NOTES.txt
index c0e729f..725dd23 100644
--- a/web/ons-demo/RELEASE_NOTES.txt
+++ b/web/ons-demo/RELEASE_NOTES.txt
@@ -1,4 +1,7 @@
 ** April 8, 2013 **
+- add explicit timeout logic so that the GUI doesn't have to be refreshed if the API misbehaves
+
+** April 8, 2013 **
 - merge from master
 - fix gradually increasing latency of iperf data display
 
diff --git a/web/ons-demo/js/model.js b/web/ons-demo/js/model.js
index 5026bd4..f251c87 100644
--- a/web/ons-demo/js/model.js
+++ b/web/ons-demo/js/model.js
@@ -91,17 +91,29 @@
 	urls = proxyURLs;
 }
 
+var timeoutMS = 20000;
+
 function makeRequest(key) {
 	var url = urls[key];
 	if (url) {
 		return function (cb) {
-			d3.json(url, function (error, result) {
+			var timeout;
+			var xhr = d3.json(url, function (error, result) {
+				clearTimeout(timeout);
+
 				if (error) {
 					error = url + ' : ' + error.status;
 				}
 
-				cb(error, result);
+				if (cb) {
+					cb(error, result);
+				}
 			});
+			timeout = setTimeout(function () {
+				xhr.abort();
+				cb(url + ' timed out after ' + timeoutMS + ' ms');
+				cb = null;
+			}, timeoutMS);
 		}
 	} else {
 		return function (cb) {