summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYAMADA Hideki <yamada.hideki@po.ntts.co.jp>2013-03-14 19:16:05 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-03-25 03:13:05 +0900
commitc249e76c3e59292a88c0f5ab939929847f2aee52 (patch)
tree78b45e863d266f42e9943766276ea1a445753e8a
parent9126ac201fb994c1495be0f660f4f7f4ba2ef4bd (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.py7
-rw-r--r--ryu/controller/event.py6
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):