diff options
author | Isaku Yamahata <yamahata@valinux.co.jp> | 2012-03-07 20:53:27 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2012-03-08 05:54:19 +0900 |
commit | ba5ce1a72e7f09c60e5f270ba0b489135957802e (patch) | |
tree | 28c09feea51eca041b3c734dbf4141d6c0fe5d42 | |
parent | 828f58b2a77e307d8ceb82cd8fdae27700166371 (diff) |
controller: print stack trace when datapath main loop goes wrong and log it
log errors when serving datapath. And a comment to clarify the intention.
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/controller/controller.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py index 886ee311..860db850 100644 --- a/ryu/controller/controller.py +++ b/ryu/controller/controller.py @@ -17,6 +17,7 @@ import contextlib import gflags import logging import gevent +import traceback import random from gevent.server import StreamServer from gevent.queue import Queue @@ -61,6 +62,9 @@ def _deactivate(method): def deactivate(self): try: method(self) + except: + traceback.print_stack() + raise finally: self.is_active = False return deactivate @@ -228,4 +232,13 @@ class Datapath(object): def datapath_connection_factory(socket, address): LOG.debug('connected socket:%s address:%s', socket, address) with contextlib.closing(Datapath(socket, address)) as datapath: - datapath.serve() + try: + datapath.serve() + except: + # Something went wrong. + # Especially malicious switch can send malformed packet, + # the parser raise exception. + # Can we do anything more graceful? + LOG.error("Error in the datapath %s from %s", + datapath.id, address) + raise |