diff options
author | YAMADA Hideki <yamada.hideki@po.ntts.co.jp> | 2013-03-14 19:16:05 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-03-25 03:13:05 +0900 |
commit | c249e76c3e59292a88c0f5ab939929847f2aee52 (patch) | |
tree | 78b45e863d266f42e9943766276ea1a445753e8a | |
parent | 9126ac201fb994c1495be0f660f4f7f4ba2ef4bd (diff) |
event: Add sync flag and event src for request/reply
- To distinguish synchronous request or not.
- Event src is needed for asynchronous request too.
Signed-off-by: YAMADA Hideki <yamada.hideki@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/base/app_manager.py | 7 | ||||
-rw-r--r-- | ryu/controller/event.py | 6 |
2 files changed, 10 insertions, 3 deletions
diff --git a/ryu/base/app_manager.py b/ryu/base/app_manager.py index a3abc85f..f09ea4a7 100644 --- a/ryu/base/app_manager.py +++ b/ryu/base/app_manager.py @@ -24,6 +24,7 @@ from gevent.queue import Queue from ryu import utils from ryu.controller.handler import register_instance from ryu.controller.controller import Datapath +from ryu.controller.event import EventRequestBase, EventReplyBase LOG = logging.getLogger('ryu.base.app_manager') @@ -87,10 +88,12 @@ class RyuApp(object): return observers def send_reply(self, rep): + assert isinstance(rep, EventReplyBase) SERVICE_BRICKS[rep.dst].replies.put(rep) def send_request(self, req): - req.src = self.name + assert isinstance(req, EventRequestBase) + req.sync = True self.send_event(req.dst, req) # going to sleep for the reply return self.replies.get() @@ -107,6 +110,8 @@ class RyuApp(object): def send_event(self, name, ev): if name in SERVICE_BRICKS: + if isinstance(ev, EventRequestBase): + ev.src = self.name LOG.debug("EVENT %s->%s %s" % (self.name, name, ev.__class__.__name__)) SERVICE_BRICKS[name]._send_event(ev) diff --git a/ryu/controller/event.py b/ryu/controller/event.py index 4d583d9d..8191710d 100644 --- a/ryu/controller/event.py +++ b/ryu/controller/event.py @@ -21,9 +21,11 @@ class EventBase(object): class EventRequestBase(EventBase): - def __init__(self, dst): + def __init__(self): super(EventRequestBase, self).__init__() - self.dst = dst + self.dst = None # app.name of provide the event. + self.src = None + self.sync = False class EventReplyBase(EventBase): |