14:03:30 #startmeeting neutron_qos 14:03:31 Meeting started Wed Jul 15 14:03:30 2015 UTC and is due to finish in 60 minutes. The chair is ajo. Information about MeetBot at http://wiki.debian.org/MeetBot. 14:03:33 Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. 14:03:36 The meeting name has been set to 'neutron_qos' 14:03:40 #topic status update from the trenches 14:04:35 So, we're advancing a bit slow, but it's nice to see more testing coming from all directions 14:04:39 and more patched merged. 14:04:54 Still, the important ones are taking more time than expected, 14:05:08 yeah, I shout "service plugin!!" 14:05:18 but hopefully, we'll get it today. I'll do everything for that 14:05:28 and we just found that using the callbacks to extend introduced a DBDeadlock, we're partly lucky that it was triggered twice in a row 14:06:05 digging into mixinless core-resource extension 14:06:19 we also found that relying directly on callbacks is a messy mechanism 14:06:43 ajo: this is the etherpad for qos sync https://etherpad.openstack.org/p/qos-sync I think echo one should add his tasks so we can keep track on everything 14:06:59 and we must provide a better interface, similar to ml2 extension drivers, but more for the general neutron, I talked with mkolesni about it... not to be fully done for neutron now, that needs broader discussion, 14:07:19 but he will do something in the middle, which can be consumed by the ML2 extension drivers (with an adaptor) and by other plugins 14:07:26 ajo: can you clarify this one? 14:07:29 moshele, ok, I'll update the etherpad. I didn't know about that one 14:07:42 #link https://etherpad.openstack.org/p/qos-sync 14:07:46 sure irenab , 14:07:50 let me explain the thing 14:08:19 ihrachyshka: thanks 14:08:22 extending a core resource, doing it with louse coupling, requires "something" to handle a few things 14:08:40 1) extending the core resource attributes (what we already do with AFTER_READ) 14:09:02 someting = plugin that handles the esource extenision, right 14:09:22 resource 14:09:22 2) tracking core resource updates to keep track of such extended atrtibutes in DB 14:09:37 in this case , the bindings to policies of networks and ports 14:09:41 yes, in this case 14:09:45 resource = networks / ports 14:09:59 and something (right now) is the service plugin 14:10:08 after looking at... 14:10:14 the ml2 extension drivers, let me link to int 14:10:16 int->it 14:11:09 #link https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/driver_api.py#L893 14:11:15 after looking to that, 14:11:18 an example is this: 14:11:31 https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/extensions/port_security.py 14:11:38 they're basically doing that, but only within ml2 14:11:38 nice link 14:12:03 ajo: what I am missing is what is not already handled by current implementation 14:12:11 basically, they came to almost the same interface we're finally exposing in the service, via callbacks 14:12:26 We skip ML2 extension, since resource is extended by qos plugin 14:13:03 ajo: so what you want is to add Resource extension interface? 14:13:04 to be implemented by QoS plugin? 14:13:11 mkolesni is thinking about generalizing the resource extension, and decouple that from the plugin 14:13:22 for now, he's going to provide that in the same file, 14:13:29 and make it available to all plugins 14:13:41 so you have a common class to call from your plugin 14:13:48 to update_network/port create_network/port 14:13:53 and get the bindings done/undone 14:14:04 and also, put the dict extension in that class 14:14:26 ajo: the rational to eanble ML2 to call QoS plugin via this interface? 14:14:49 irenab: create a ml2 extension which will call this class 14:14:59 and other plugins, can call this class 14:15:04 at a later time, in neutron 14:15:12 we will need to find the right way for plugins not needing to do such thing 14:15:16 (manually) 14:15:37 just say "I support this resource extension", yey... 14:15:37 ajo: I think you jump into technical details before explaining what you want to solve :-) 14:16:15 irenab, it's mike idea's actually, I was refusing to listen this morning, but he's so convincing... 14:16:20 and I believe he's right 14:16:38 I feel we need another code sprint :) 14:16:39 ajo, why isn't he on the meeting? 14:16:42 What is missing with current callback AFTER_READ? 14:16:47 he should have convinced all of us! 14:16:52 he just wants to move all the resource extension/extension tracking out of the class 14:16:58 into a separate one 14:17:06 I think that's neat, and ends in a cleaner plugin 14:17:17 and it's something we can reuse neutron wide later 14:17:26 ajo: the change that was done for ML2Plugin is absolutly no-go 14:17:28 but one step at a time 14:17:35 irenab: correct 14:17:43 so I assumed we trying to resolve this 14:17:49 correct 14:17:55 this, and more :) 14:18:07 as we solve this, we want to clean up the way we extend resources 14:18:10 ajo, can we take more of this and less of more? 14:18:15 lso to resolve this (without more) what is missing? 14:18:35 irenab, I like your 'result first' approach 14:18:44 ihrachyshka: :-) 14:18:58 more of: lets keep focused 14:19:13 I'm fine with good design as long as we stick to schedule (that we don't have, and I blame our Lord Miguel for not guiding us!) 14:19:15 I agree, I couldn't convince mkolesni to do less of more, but I convinced him to do something very thin 14:19:57 ajo: ca you share the plan, I still do not understand what was missing so it required to “polute” ML2 plugin 14:20:10 irenab, you will see it in next patch. 14:20:24 yes, please make communication explicit. you talk via phone, you have chats in redhat irc... 14:20:26 basically it's putting the relevant parts of the ml2 extension driver available in qos_plugin 14:20:31 and then it's not clear what's going on 14:20:37 he's just going to move functions, not reinvent the world 14:20:38 ajo: can you still explain the problem, will see the solution in the patch :-) 14:21:17 the problem is, we planned to use callbacks for all this, 14:21:27 and callbacks are not suitable for this as they are today 14:21:34 only the AFTER_READ part is ok 14:21:41 and still we will move that in a separate interface 14:21:52 tracking the resources via AFTER_UPDATE AFTER_CREATE for ports 14:22:08 does not work, because it's too tied to ml2 (those callbacks are only called from ml2) 14:22:11 well 14:22:19 some of them, some other don't exist 14:22:21 since 14:22:39 the plan was to use callbacks temporarily, until we had the definitive solution from armax to "resource extension" 14:22:55 ajo: initially we discussed that qos extension has two parts : policy management and port/net association. 14:23:07 correct 14:23:12 is the port/net association 14:23:21 and dissociation 14:23:24 the pain point 14:23:38 if we split this in two extensions and make ML2 extension for second, this will be the ML2 way 14:24:04 irenab: I don't follow 14:24:20 we want something that works for all , not ml2 only 14:25:11 so the call backs are called from the db layer? 14:25:14 ajo: I agree, but this looks like complicating the flow 14:25:33 it's harder to discuss than to implement 14:25:42 basically it's the same we have scinded to a separate class 14:26:04 irenab, ok, the problem seems to be clear; let's now give them one day to see the solution 14:26:04 just a few methods moved out to another class, not inside the plugin itself all together 14:26:20 ajo, will it be up for review tomorrow? 14:26:24 yeah, I will push mkolesni to show us his work by tomorrow 14:26:33 good, push is the right word 14:26:54 ihrachyshka: +1, we can always fallback for ML2 Extension of net/port qos association to call into Qo plugin 14:27:13 irenab, yeah, as long as we don't start to fallback one day before merge :) 14:27:26 ihrachyshka, that's my point 14:27:29 that's why we need to move quickly and get solution up tomorrow 14:27:34 I don't want to change directions 14:27:38 ajo, when do you leave for PTO? 14:27:54 next week I'm out, but I'll dedicate 30m-1h daily 14:28:02 for mail, and reviews 14:28:04 ajo: sometimes better change than keep digging :-) 14:28:07 and probably irc 14:28:34 ajo, good. we'll try to limit pings 14:28:36 irenab, I have limited the dig depth, if I left mkolesni alone he'd rewrite the whole callbacks :D :P :) 14:28:50 ajo++ for staying online on PTO for emergencies 14:29:05 ajo, yeah, those Java guys... 14:29:08 irenab, if we find it getting too complicated for some other reasons, I agree, falling back to a simple ml2 extension would be good 14:29:27 and then next cycle can be used for doing something more general 14:29:36 its important to see how a plugin adds this support 14:29:47 ajo: fine, this mwill require spliiting qos extension into two, but generally simple 14:30:05 irenab, splitting in two? 14:30:22 gsagie, yes we will need to document that 14:30:29 extensions/qos.py to split 14:30:42 irenab: I don't follow :) 14:30:58 ajo: we can take it offline in case will be needed 14:31:06 can we move forward with the topic? I think we are stuck on that Mike's patch, and we have ETA and plan for it already. And yeah, the way we will rewrite stuff when in master. 14:31:22 I just mentioned the code change that will be required to make ML2 extension fallback 14:31:47 irenab, you can try to describe the idea in email maybe. I also don't follow. 14:32:02 ihrachyshka: fine, will do it 14:32:12 any other high prio patches? 14:32:28 if not, I vote for rules inside policies one from me: https://review.openstack.org/200608 14:32:41 ajo, eagarly waiting for review ;) 14:32:55 ajo: want to update on cli apprach? 14:33:07 ajo, once we will have +2 from you, it should be easier to get another one 14:33:23 yes, that patch is important 14:33:25 please review 14:33:34 * ajo <- please, review! 14:33:41 about CLI 14:34:07 we found a stopper for using a common qos-create-rule / qos-update-rule 14:34:18 if we provide after that, 14:34:34 we have not found a sane way to provide different arguments per rule in neutron-client 14:34:35 so 14:34:42 the call is to have a separate create/update per rule 14:34:46 so we may have 14:34:52 qos-create-bandwidth-limit-rule 14:34:57 qos-update-bandwidth-limit-rule 14:35:17 ajo, is it just for help message sake? 14:35:24 qos-{create, update}--rule for every rule type 14:35:28 ihrachyshka, also for argument parsing 14:35:35 ajo, because afaik passing random --options should still work 14:35:48 we don't want to accept a ton of optional arguments, where some are not really optional for some rule types 14:35:59 ihrachyshka: I'll try to review https://review.openstack.org/200608 14:36:09 gcossu, thanks 14:36:27 for cli, I'm fine and don't mind. any new rule type will require a patch for neutronclient anyway. 14:36:34 yes 14:36:36 that's correct 14:36:44 and if the approach simplifies things, I'm good 14:36:48 and every rule type has a different URL path 14:37:03 it will be weird, btw, that... 14:37:21 qos-rule-delete, qos-rule-show, will need to specify rule type 14:37:36 if it simplifies i'm okay with it also 14:37:46 ajo, ouch, that's a bit weird indeed 14:37:49 ajo: no, no need for rule type 14:37:53 ideally, id is enough 14:38:04 irenab, how then do you point it to the right api url? 14:38:23 qos/policy/// ? 14:38:36 ajo: hope vikram can clarify 14:38:54 maybe you right, lets see 14:39:18 I've seen that other services (lbaasv2) solves that by exposing "rules" at a lower level 14:39:28 they have that in monitor or heartbeats or something like that 14:39:31 so you can just do 14:39:44 qos/rule/ for some operations 14:40:11 but... 14:40:20 yeah, that simplifies cli but makes API inconsistent a bit 14:40:25 correct 14:40:34 we can just do a first version, and refine over time 14:40:37 we're experimental 14:40:39 so it should be ok 14:40:52 once done, we may make the odds exposed and discussed IMHO 14:41:21 ok, let's do the simple form even if it requires --type 14:41:30 if having a less beautiful API makes CLI people happier, I'm ok with that 14:41:37 other option, could be ... being able to discover the rule type 14:41:44 by looking at the policy 14:42:06 so we , in two calls, read the policy, ... find what's the category of the rule, then... kill the rule 14:42:17 or then show the rule 14:42:25 and then we don't need to provide type 14:42:39 we already do a lookup when somebody passes the policy name, instead of the policy id 14:42:51 irenab, vikram , thoughts? 14:42:58 d 14:43:07 devil is in the details.. 14:43:21 :) 14:43:23 let's have simple thing first. then go into UX 14:43:30 +1 14:43:42 for me it looks doable, but I have very limited knowledge on cli implementation 14:44:12 I'd then just stick to providing the type for now, may be later we can make it optional by auto-discovert 14:44:16 discovery 14:44:21 there is another thing that is overdue: devref that we said before will be somehow ready for Wed: https://review.openstack.org/201536 and followups 14:44:33 ajo, what's the plan here? 14:45:18 * ajo plans to duplicate himself :) 14:45:24 I know it seems like it's not a big deal since it's not code, but I believe it's a must for merge-back, and the earlier we start to document stuff, the better 14:45:34 yes 14:45:37 ajo2 = copy.copy(ajo) 14:45:45 it's a very expensive operation 14:45:49 ajo, do you need any help with that? 14:45:58 last two copies still taking too many resources, instead of producing 14:46:01 ajo, you're not that huge 14:46:17 ':D 14:46:22 so, any help? 14:46:40 I think I'm better in writing than coding, so 14:46:55 if you can address current comments, and join to your other patch 14:47:03 I think gsagie was doing something too 14:47:04 I'd really thank you 14:47:13 while I keep tackling the plugin towards merge... 14:47:16 ok 14:47:23 thanks -as usual- 14:47:46 any more critical pieces? 14:47:54 gsagie, did you have time to look into the devref of your pieces? 14:48:13 ihrachyshka, I will respond to comments 14:48:22 so you can update the parts I'm more aware correctly 14:48:51 * ajo looks again for the list of patches.. 14:49:09 ajo: for full flow with ovs agent we need this 2 to merge https://review.openstack.org/#/c/201975/ https://review.openstack.org/#/c/201583/ 14:49:09 ajo: not yet 14:49:50 ahm nice, I wil check your update moshele , thanks 14:49:55 moshele, I see the 1st one -1's on jenkins 14:50:05 ajo: my patch is failing becuase a bug in the ovs driver which gsagie fixed https://review.openstack.org/#/c/201583/ 14:50:20 ah, there is order involved 14:50:31 ah, ok 14:50:39 let's make a comment on the other 14:50:55 moshele, can you rebase on gsagie's? 14:51:07 moshele, I've sent it to gate, but it will buy us several hours 14:51:26 moshele, I can rebase it if you want 14:51:38 ajo: yes please 14:51:43 ack, I will 14:51:45 ajo, make sure not to rebase the Gal's one :) 14:51:56 yep 14:52:22 ok, any more critical pieces ? 14:52:39 ajo, we may also +A https://review.openstack.org/#/c/202119/ 14:52:48 but that's not critical :) 14:53:05 though I will be more happy to see less patches in the queue :) 14:53:20 done 14:53:30 ihrachyshka, should we wait for jenkins before +A ? 14:53:32 ok, I think we can go back to trenches? 14:53:36 ajo, I think no 14:53:42 ok, I never got the logic of that 14:53:50 ajo, at least that's what I see from what zuul does 14:53:52 ajo: get_info rpc will return version object or dict in the current implementation (I know it should be object at the end)? 14:54:01 ihrachyshka, may be it was necessary back in time 14:54:18 moshele, it should be object in the end, but the current dict usage may work 14:54:37 ihrachyshka, we made them dict-compatible for now, right? 14:55:22 ajo, well... they are similar, but not identical to dict. you can call .to_dict() to get the real one 14:55:35 though I'm not sure where we are in terms of serialization 14:55:53 ajo: for know for the server-> agent flow to work we need dict 14:56:15 know -.> flow 14:57:21 ihrachyshka: I think we need to convert to dict in registry.get_info 14:57:38 ihrachyshka: just for now to make it work 14:58:00 moshele, I'm fine either way. we'll get objects later. 14:58:12 ok 14:58:13 do whatever you need to integrate agent side :) 14:58:22 moshele, you can access the objects as dicts 14:58:24 they will work 14:58:42 just for sending over wire you may need to use the functions I pointed this morning 14:59:28 ok https://review.openstack.org/#/c/201975/ rebased 14:59:30 #endmeeting