> 2014/1/23 YAMAMOTO Takashi <[email protected]> > >> hi, >> >> i meant >> send_request >> req.q = hub.Queue() >> send_event >> return req.q.get() >> >> reply_to_request >> req.q.put(rep) >> > > To be sure, it is simpler. > > RyuApp#send_reply() became unnecessary when I tried. May we remove this? I > checked that it was not used directly in ryu internal. But this is used by > the user's application or I am worried. I would like to hear your opinion. > IMHO, it is a rare case.
it's fine for me to remove it. YAMAMOTO Takashi > > >> >> YAMAMOTO Takashi >> >> > manage the pair of a request/reply >> > >> > Signed-off-by: Satoshi Kobayashi <[email protected]> >> > --- >> > Changes v1 -> v2: >> > - stop using uuid >> > - refactoring >> > >> > ryu/base/app_manager.py | 17 ++++++++++++++--- >> > ryu/controller/event.py | 1 + >> > 2 files changed, 15 insertions(+), 3 deletions(-) >> > >> > diff --git a/ryu/base/app_manager.py b/ryu/base/app_manager.py >> > index ebf2196..dddf56f 100644 >> > --- a/ryu/base/app_manager.py >> > +++ b/ryu/base/app_manager.py >> > @@ -67,7 +67,7 @@ class RyuApp(object): >> > self.observers = {} # ev_cls -> observer-name -> states:set >> > self.threads = [] >> > self.events = hub.Queue(128) >> > - self.replies = hub.Queue() >> > + self.replies = {} # request:EventRequestBase -> >> reply-queue:hub.Queue >> > self.logger = logging.getLogger(self.name) >> > >> > # prevent accidental creation of instances of this class >> outside RyuApp >> > @@ -123,14 +123,24 @@ class RyuApp(object): >> > >> > def send_reply(self, rep): >> > assert isinstance(rep, EventReplyBase) >> > - SERVICE_BRICKS[rep.dst].replies.put(rep) >> > + # take the application that the reply should be sent >> > + rep_dst_app = SERVICE_BRICKS[rep.dst] >> > + reply_q = rep_dst_app.replies[rep.request] >> > + # send the response >> > + reply_q.put(rep) >> > + # cleanup >> > + del rep_dst_app.replies[rep.request] >> > >> > def send_request(self, req): >> > assert isinstance(req, EventRequestBase) >> > req.sync = True >> > + # prepare for receiving the reply >> > + reply_q = hub.Queue() >> > + self.replies[req] = reply_q >> > + # send the request >> > self.send_event(req.dst, req) >> > # going to sleep for the reply >> > - return self.replies.get() >> > + return reply_q.get() >> > >> > def _event_loop(self): >> > while self.is_active or not self.events.empty(): >> > @@ -161,6 +171,7 @@ class RyuApp(object): >> > >> > def reply_to_request(self, req, rep): >> > rep.dst = req.src >> > + rep.request = req >> > if req.sync: >> > self.send_reply(rep) >> > else: >> > diff --git a/ryu/controller/event.py b/ryu/controller/event.py >> > index 8191710..a2e24e2 100644 >> > --- a/ryu/controller/event.py >> > +++ b/ryu/controller/event.py >> > @@ -31,4 +31,5 @@ class EventRequestBase(EventBase): >> > class EventReplyBase(EventBase): >> > def __init__(self, dst): >> > super(EventReplyBase, self).__init__() >> > + self.request = None >> > self.dst = dst >> > -- >> > 1.7.1 >> > >> > >> > >> ------------------------------------------------------------------------------ >> > CenturyLink Cloud: The Leader in Enterprise Cloud Services. >> > Learn Why More Businesses Are Choosing CenturyLink Cloud For >> > Critical Workloads, Development Environments & Everything In Between. >> > Get a Quote or Start a Free Trial Today. >> > >> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk >> > _______________________________________________ >> > Ryu-devel mailing list >> > [email protected] >> > https://lists.sourceforge.net/lists/listinfo/ryu-devel >> ------------------------------------------------------------------------------ CenturyLink Cloud: The Leader in Enterprise Cloud Services. Learn Why More Businesses Are Choosing CenturyLink Cloud For Critical Workloads, Development Environments & Everything In Between. Get a Quote or Start a Free Trial Today. http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
