Yes it is. Actually I fixed this issue by following the thread spawning code:
self.threads.append(hub.spawn(self.xxx))
previously I was doing something like: hub.spawn(self.xxx)
I don’t quite get the difference when there is only one thread, but it somehow
fixed the problem…
> On May 19, 2017, at 1:13 AM, Iwase Yusuke <[email protected]> wrote:
>
> Hi Yikai,
>
> Hmm... sounds strange...
>
> First, could you confirm "dst" attribute is pointing to "service.py"?
> https://github.com/osrg/ryu/blob/master/ryu/topology/event.py#L77
> <https://github.com/osrg/ryu/blob/master/ryu/topology/event.py#L77>
>
> In this case,
>
> class EventDeleteXXRequest(event.EventRequestBase):
>
> def __init__(self, ...):
> super(EventDeleteXXRequest, self).__init__()
> self.dst = 'service' # Specify your service app name
> ...
>
> Thanks,
> Iwase
>
>
> On 2017年05月19日 10:56, Yikai Lin wrote:
>> you are right, this was the cause. But the second problem still exists, the
>> output is as follows:
>>
>> loading app test-xx.py
>> require_app: service is required by test-xx
>> loading app xx.service
>> instantiating app xx.service of Service
>> instantiating app test-xx.py of testxx
>> BRICK testxx
>> BRICK service
>> CONSUMES EventDeleteXXRequest
>> CONSUMES EventCreateXXRequest
>> EVENT testxx->service EventCreateXXRequest
>> ...service.py prints out request...
>> ...testxx.py prints out reply...
>> EVENT LOST testxx->service EventDeleteXXRequest
>>
>>
>>> On May 18, 2017, at 9:50 PM, Iwase Yusuke <[email protected]
>>> <mailto:[email protected]> <mailto:[email protected]
>>> <mailto:[email protected]>>> wrote:
>>>
>>> Hi Yikai,
>>>
>>> Could you share the command you invoked?
>>> If "xx/service.py" is specified by handler.register_service(), you don't
>>> need to add it for "ryu-manager" argument, I guess.
>>> In that case, "xx/service.py" should be automatically detected as the
>>> required service.
>>> If specified, "xx/service.py" will be loaded doubly, then will raise
>>> AssertionError at "assert app.name not in SERVICE_BRICKS".
>>>
>>> # NG --> "xx/service.py" will be loaded doubly
>>> $ ryu-manager test-xx.py xx/service.py
>>>
>>> # OK
>>> $ ryu-manager test-xx.py
>>>
>>> Thanks,
>>> Iwase
>>>
>>>
>>> On 2017年05月19日 10:10, Yikai Lin wrote:
>>>> And regarding the first problem, my PYTHONPATH is like this /path/to/myapp
>>>>
>>>> and the service.py is at /path/to/myapp/xx/service.py
>>>>
>>>> in event.py I wrote handler.register_service(‘xx.service’)
>>>> in api.py I wrote app_manager.require_app(‘xx.service’, api_style=True)
>>>>
>>>> and the output was like this:
>>>>
>>>> loading app test-xx.py
>>>> require_app: xx.service is required by test-xx
>>>> *loading app xx/service.py*
>>>> *loading app xx.service*
>>>> *instantiating app xx/service.py of Service*
>>>> *instantiating app xx.service of Service*
>>>> Traceback (most recent call last):
>>>> File "/home/yikai/.local/bin/ryu-manager", line 11, in <module>
>>>> sys.exit(main())
>>>> File "/home/yikai/.local/lib/python2.7/site-packages/ryu/cmd/manager.py",
>>>> line 81, in main
>>>> services.extend(app_mgr.instantiate_apps(**contexts))
>>>> File
>>>> "/home/yikai/.local/lib/python2.7/site-packages/ryu/base/app_manager.py",
>>>> line 509, in instantiate_apps
>>>> self._instantiate(app_name, cls, *args, **kwargs)
>>>> File
>>>> "/home/yikai/.local/lib/python2.7/site-packages/ryu/base/app_manager.py",
>>>> line 496, in _instantiate
>>>> register_app(app)
>>>> File
>>>> "/home/yikai/.local/lib/python2.7/site-packages/ryu/base/app_manager.py",
>>>> line 62, in register_app
>>>> assert app.name not in SERVICE_BRICKS
>>>> AssertionError
>>>>
>>>> The bolded lines are what confuse me and where the errors come from
>>>>
>>>> Yikai
>>>>
>>>>> On May 18, 2017, at 1:03 PM, Yikai Lin <[email protected]
>>>>> <mailto:[email protected]> <mailto:[email protected]
>>>>> <mailto:[email protected]>> <mailto:[email protected]
>>>>> <mailto:[email protected]>>> wrote:
>>>>>
>>>>> Hi Iwase,
>>>>>
>>>>> I did actually enable --verbose and saw that the service was loaded, and
>>>>> I was able to see the first request processed. The second request however
>>>>> was lost.
>>>>>
>>>>> The test app looks something like this:
>>>>>
>>>>> from xxx import api
>>>>>
>>>>> def __init__(...):
>>>>> hub.spawn(_test)
>>>>>
>>>>> def _test(...):
>>>>> rep = api.getsomething(a,b)
>>>>> print(rep) # success
>>>>> rep = api.getsomethingelse(a,b)
>>>>> print(rep) # failure
>>>>>
>>>>>
>>>>> On Wed, May 17, 2017 at 9:13 PM Iwase Yusuke <[email protected]
>>>>> <mailto:[email protected]> <mailto:[email protected]
>>>>> <mailto:[email protected]>> <mailto:[email protected]
>>>>> <mailto:[email protected]>>> wrote:
>>>>>
>>>>> Hi Yikai,
>>>>>
>>>>> Sorry if I couldn't understand your question well.
>>>>>
>>>>>
>>>>> On 2017年05月17日 15:20, Yikai Lin wrote:
>>>>>> The first problem was somehow fixed by removing xxx from that line of
>>>>>> code, so it goes handler.register_service('service)', which is weird.
>>>>>> But the second problem was not resolved.
>>>>>
>>>>> The arguments of handler.register_service() is the string which is the
>>>>> "Python module path"
>>>>> from your current "sys.path".
>>>>> For example, if you set PYTHONPATH=/path/to/yourapp and service is
>>>>> placed at
>>>>> /path/to/yourapp/service.py, you need to specify just "service" to
>>>>> register_service.
>>>>>
>>>>> For the second problem, if you got "EVENT LOST", this messages shows
>>>>> your application or
>>>>> service were not loaded as expected.
>>>>> Please confirm the dump of services at starting of ryu-manager with
>>>>> "--verbose" option.
>>>>> e.g.)
>>>>> $ ryu-manager --verbose ryu/app/simple_switch_13.py
>>>>> Registered VCS backend: git
>>>>> Registered VCS backend: hg
>>>>> Registered VCS backend: svn
>>>>> Registered VCS backend: bzr
>>>>> loading app ryu/app/simple_switch_13.py
>>>>> loading app ryu.controller.ofp_handler
>>>>> instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
>>>>> instantiating app ryu.controller.ofp_handler of OFPHandler
>>>>> BRICK ofp_event
>>>>> PROVIDES EventOFPSwitchFeatures TO {'SimpleSwitch13': {'config'}}
>>>>> PROVIDES EventOFPPacketIn TO {'SimpleSwitch13': {'main'}}
>>>>> CONSUMES EventOFPSwitchFeatures
>>>>> CONSUMES EventOFPHello
>>>>> CONSUMES EventOFPPortStatus
>>>>> CONSUMES EventOFPEchoRequest
>>>>> CONSUMES EventOFPErrorMsg
>>>>> CONSUMES EventOFPPortDescStatsReply
>>>>> CONSUMES EventOFPEchoReply
>>>>> BRICK SimpleSwitch13
>>>>> CONSUMES EventOFPSwitchFeatures
>>>>> CONSUMES EventOFPPacketIn
>>>>>
>>>>> Thanks,
>>>>> Iwase
>>>>>
>>>>>
>>>>>>
>>>>>> On Wed, May 17, 2017 at 2:15 AM Yikai Lin <[email protected]
>>>>>> <mailto:[email protected]> <mailto:[email protected]
>>>>>> <mailto:[email protected]>> <mailto:[email protected]
>>>>>> <mailto:[email protected]>> <mailto:[email protected]
>>>>>> <mailto:[email protected]><mailto:[email protected]
>>>>>> <mailto:[email protected]>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I was trying to wrote an "topology" like service app that exposes APIs
>>>>>> for other applications. So I started from mimicing the topology app, and
>>>>>> I created the api.py, event.py and the main file service.py. I have
>>>>>> another test program that basically calls the api and sends several
>>>>>> sequential requests to the service app and it basically just returns a
>>>>>> reply for the test program to print out. I ran into some issues:
>>>>>>
>>>>>> 1. I didn't put the codes under ryu's folder, I actually added my
>>>>>> project path and tried to run from there, but if I added
>>>>>> "handler.register_service('myapp.xxx.service')" to event.py, ryu-manager
>>>>>> tried to load two services xxx/service and xxx.service and it couldn't
>>>>>> find the latter
>>>>>> 2. If I didn't put that code in event.py, the two apps can run, but
>>>>>> only the first request was received and replied, after which an "event
>>>>>> lost" was reported. I didn't spawn any new threads in the service.py,
>>>>>> just a bunch of functions with decorators.
>>>>>>
>>>>>> So my questions will be, what will be a nice way to write a low-level
>>>>>> service app and where should I place them(if that matters)? And what is
>>>>>> the right way to implement that service app?
>>>>>>
>>>>>> Thanks a lot
>>>>>> Yikai
>>>>>>
>>>>>>
>>>>>>
>>>>>> ------------------------------------------------------------------------------
>>>>>> Check out the vibrant tech community on one of the world's most
>>>>>> engaging tech sites, Slashdot.org <http://slashdot.org/>
>>>>>> <http://slashdot.org/ <http://slashdot.org/>> <http://Slashdot.org
>>>>>> <http://slashdot.org/> <http://slashdot.org/ <http://slashdot.org/>>>!
>>>>>> http://sdm.link/slashdot <http://sdm.link/slashdot>
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Ryu-devel mailing list
>>>>>> [email protected] <mailto:[email protected]>
>>>>>> <mailto:[email protected]
>>>>>> <mailto:[email protected]>>
>>>>>> <mailto:[email protected]
>>>>>> <mailto:[email protected]>>
>>>>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel