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]> 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]>>> 
>>> 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]>>> 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]>>>> 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://sdm.link/slashdot 
>>>> <http://sdm.link/slashdot>
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Ryu-devel mailing list
>>>> [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

Reply via email to