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