> 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

Reply via email to