From e1c4dc7ee49f79270859e4d40e29a94402674d5c Mon Sep 17 00:00:00 2001
From: Gregor Maier <gregor.maier@bigswitch.com>
Date: Fri, 6 Apr 2012 15:53:32 -0700
Subject: [PATCH] Add try-catch clauses around all update queues.

Now we will at least get an error message when an Exception occurs
instead of silently killing the thread.
[Forgot to add all files to commit]
---
 .../core/internal/Controller.java                 |  7 ++++---
 .../internal/LinkDiscoveryManager.java            | 10 ++++++++--
 .../topology/TopologyManager.java                 | 15 +++++++++++----
 3 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index 6852adfbc..77674efe0 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -67,6 +67,7 @@ import net.floodlightcontroller.storage.IStorageSourceService;
 import net.floodlightcontroller.storage.OperatorPredicate;
 import net.floodlightcontroller.storage.StorageException;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
+import net.floodlightcontroller.util.StackTraceUtil;
 
 import org.jboss.netty.bootstrap.ServerBootstrap;
 import org.jboss.netty.buffer.ChannelBuffer;
@@ -1597,11 +1598,11 @@ public class Controller
                 return;
             } catch (StorageException e) {
                 log.error("Storage exception in controller " + 
-                          "updates loop; terminating process",
-                          e);
+                          "updates loop; terminating process: {} {}",
+                          e, StackTraceUtil.stackTraceToString(e));
                 return;
             } catch (Exception e) {
-                log.error("Exception in controller updates loop", e);
+                log.error("Exception in controller updates loop {} {}", e, StackTraceUtil.stackTraceToString(e));
             }
         }
     }
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index 87bf66c33..b3fb351df 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -76,6 +76,7 @@ import net.floodlightcontroller.threadpool.IThreadPoolService;
 import net.floodlightcontroller.topology.web.TopologyWebRoutable;
 import net.floodlightcontroller.util.EventHistory;
 import net.floodlightcontroller.util.EventHistory.EvAction;
+import net.floodlightcontroller.util.StackTraceUtil;
 
 import org.openflow.protocol.OFMessage;
 import org.openflow.protocol.OFPacketIn;
@@ -216,8 +217,13 @@ public class LinkDiscoveryManager
                                        linkDiscoveryAware});
             }
             if (linkDiscoveryAware != null) {
-                for (ILinkDiscoveryListener lda : linkDiscoveryAware) { // order maintained
-                    lda.linkDiscoveryUpdate(update);
+                try {
+	                for (ILinkDiscoveryListener lda : linkDiscoveryAware) { // order maintained
+	                    lda.linkDiscoveryUpdate(update);
+                    }
+                } 
+                catch (Exception e) {
+                    log.error("Error in link discovery updates loop: {} {}", e, StackTraceUtil.stackTraceToString(e));
                 }
             }
         } while (updates.peek() != null);
diff --git a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
index 4cd19effd..f01ab44a7 100644
--- a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
+++ b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
@@ -23,6 +23,7 @@ import net.floodlightcontroller.routing.IRoutingService;
 import net.floodlightcontroller.routing.Link;
 import net.floodlightcontroller.routing.Route;
 import net.floodlightcontroller.threadpool.IThreadPoolService;
+import net.floodlightcontroller.util.StackTraceUtil;
 
 
 import org.openflow.protocol.OFPhysicalPort.OFPortState;
@@ -59,9 +60,15 @@ IRoutingService, ILinkDiscoveryListener {
     protected class NewInstanceWorker implements Runnable {
         @Override 
         public void run() {
-            applyUpdates();
-            createNewInstance();
-            informListeners();
+            try {
+	            applyUpdates();
+	            createNewInstance();
+	            informListeners();
+            }
+            catch (Exception e) {
+                log.error("Error in topology instance task thread: {} {}", 
+                          e, StackTraceUtil.stackTraceToString(e));
+            }
         }
     }
 
@@ -71,7 +78,7 @@ IRoutingService, ILinkDiscoveryListener {
             try {
                 update = ldUpdates.take();
             } catch (Exception e) {
-                log.error("Error reading link discovery update. {}", e);
+                log.error("Error reading link discovery update. {} {}", e, StackTraceUtil.stackTraceToString(e));
             }
             if (log.isTraceEnabled()) {
                 log.info("Applying update: {}", update);
-- 
GitLab