| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2019-03-08 | |||
| 15:15:53 | mriedem | but it might come before the source is registered for the callback | |
| 15:16:13 | dansmith | so wait, we've gone back and forth twice now? | |
| 15:16:16 | mriedem | dest unplugs vifs when it calls driver.destroy | |
| 15:16:17 | mriedem | yes | |
| 15:16:40 | mriedem | when the original change was made by dansmith we didn't have the code in the API which routes events to both the source and host if the instance had a migration context | |
| 15:16:49 | mriedem | so when i made my change, the source will get the event routed to it, | |
| 15:17:00 | mriedem | but, we might not be registered for the callback on the source by the time the event arrives | |
| 15:17:39 | mriedem | as you can see from my comments in https://review.openstack.org/#/c/179228/ it's all very confusing | |
| 15:18:09 | mriedem | the sequence of events is kind of tribal knowledge with only 1.5 people in the tribe nowadays | |
| 15:19:45 | mriedem | so we should probably (1) revert my change and (2) add a comment in the libvirt driver finish_revert_migration code about why we don't wait for the event (like there is a comment in finish_migration) | |
| 15:20:06 | mriedem | because the event does come to the source, but we are racing to catch it | |
| 15:21:16 | mriedem | actually...finish_revert_migration does plug vifs, | |
| 15:21:22 | mriedem | so why wouldn't we get an event for that on the source? | |
| 15:21:43 | mriedem | dest unplugs vifs on revert_resize because of driver.destroy, | |
| 15:21:58 | mriedem | source plugs vifs because of finish_revert_migration which re-spawns the guest | |
| 15:22:21 | mriedem | artom: are you seeing this downstream with OVS or linuxbridge? | |
| 15:22:57 | artom | mriedem, ovs | |
| 15:23:13 | artom | mriedem, we do get the event on the source, just before we wait for it | |
| 15:23:30 | artom | Because as soon as Neutron gets the API call, it's able to wire them and send us the events | |
| 15:23:49 | mriedem | the network-vif-plugged event? | |
| 15:23:52 | artom | Yeah | |
| 15:24:20 | mriedem | ok that's from something else then | |
| 15:24:39 | mriedem | because when the source calls plug_vifs during finish_revert_migration, it's doing it within the context to wait for the event | |
| 15:25:21 | artom | mriedem, do you have access to slaweq's notes on our downstream BZ? | |
| 15:25:47 | artom | mriedem, https://bugzilla.redhat.com/show_bug.cgi?id=1678681#c8 | |
| 15:25:48 | openstack | bugzilla.redhat.com bug 1678681 in openstack-nova "REVERT_RESIZE stuck for 300s: "VirtualInterfaceCreateException: Virtual Interface creation failed" [Medium,On_dev] - Assigned to alifshit | |
| 15:26:35 | mriedem | artom: then i'm pretty sure it's what we've talked about before, finish_revert_resize on the source host calls migrate_instance_finish which updates the port binding to point at the source host, which triggers an event | |
| 15:26:40 | mriedem | *before* the driver registers the callback | |
| 15:27:28 | artom | mriedem, right, but there's another thing at play here - Neutron will only wire the ports after we plug them | |
| 15:27:33 | artom | ... I think | |
| 15:28:35 | mriedem | yes i can read his comments and i think they align with what i just said, | |
| 15:28:56 | mriedem | "Nova then asks neutron to bind port on compute-0 again, at it happens:" - that's the migrate_instance_finish call on the source finish_revert_resize to update the port binding | |
| 15:29:15 | mriedem | "And after that, L2 agent on compute-0 wire port again:" - i assume that's the plug_vifs call from the driver's finish_revert_migration on the source host | |
| 15:30:35 | mriedem | artom: how recreateable is this? it would be a lot more clear if we just had some logging on the source that said, "updating port bindings to point at the source host" and then "finish revert migration in the driver which will plug vifs" | |
| 15:30:53 | mriedem | because if we saw the event come between those 2 messages we know it's the port binding change that is triggering the event before we're ready to wait for it | |
| 15:30:54 | artom | mriedem, like, 70% in our CI? | |
| 15:31:06 | mriedem | are you able to test with patches from upstream? | |
| 15:31:21 | artom | I'd need to check with the CI guys, but I could provide them test builds, yeah | |
| 15:31:55 | kashyap | aspiers: You about...? | |
| 15:32:43 | kashyap | aspiers: When you are -- at the risk of adding more work ... wonder if we should simply split out the addition of getDomainCapablities() method into its own patch. | |
| 15:33:06 | mriedem | artom: ew do you have to patch an rpm or something? | |
| 15:33:13 | kashyap | It is just my OCD of "one logical change per-patch thing". And it allows quicker merge, too. As it'll be easier on the reviewers eyes | |
| 15:33:14 | artom | mriedem, scratch build | |
| 15:33:35 | artom | Backport a patch, build RPMs with that | |
| 15:34:04 | mriedem | artom: actually you should be able to determine this with existing logs | |
| 15:34:11 | kashyap | (A "scratch build" is something that is short-lived, and will be "scratched" from the build system) | |
| 15:34:54 | artom | (Backport a patch, build a SRPM without pushing anything, scratch build, I should have said) | |
| 15:35:04 | mriedem | artom: you should see this on the source https://github.com/openstack/nova/blob/4f9bc724010f0c935bf83a6d19bdd805e86b7086/nova/network/neutronv2/api.py#L3355 | |
| 15:35:23 | mriedem | with binding:host_id changing to point at the source host | |
| 15:35:43 | mriedem | and then you should see this from the driver https://github.com/openstack/nova/blob/4f9bc724010f0c935bf83a6d19bdd805e86b7086/nova/virt/libvirt/driver.py#L8965 | |
| 15:35:47 | artom | mriedem, ack, looking | |
| 15:36:43 | mriedem | granted there is some other stuff that happens in the driver after that before unplug_vifs happens, so it's a tight window | |
| 15:42:25 | aspiers | kashyap: yeah could do, I kind of like there being an incentive to get SEV stuff merged though ;-) | |
| 15:42:54 | aspiers | when do we fork for stein? | |
| 15:43:27 | kashyap | aspiers: Yeah, I hear you. But as we both know ... it can be used for multiple features :-) | |
| 15:43:57 | kashyap | (I won't insist on it, though. But if you appetite...) | |
| 15:43:59 | aspiers | we already hit feature freeze, right? | |
| 15:44:03 | aspiers | https://wiki.openstack.org/wiki/Nova/Stein_Release_Schedule | |
| 15:44:04 | kashyap | aspiers: Yes, yesterday | |
| 15:44:10 | kashyap | mriedem: ^ Right? | |
| 15:45:04 | mriedem | yes | |
| 15:45:13 | mriedem | please don't be approving anything that's not already approved | |
| 15:45:14 | kashyap | aspiers: Also think of it this way: splitting it out allows it to be merged while SEV bits get reviewed :-) | |
| 15:45:39 | aspiers | I guess | |
| 15:45:40 | kashyap | mriedem: This (AMD SEV work) was already approved for Stein | |
| 15:45:55 | aspiers | I think mriedem means W+1 | |
| 15:45:58 | kashyap | aspiers: But sorry to be "that guy"; you're allowed to hate me for 5 minutes. | |
| 15:46:04 | aspiers | haha | |
| 15:46:21 | sean-k-mooney | aspiers: we will fork stien at RC1 so master is feature frozen for the next 2 ish weeks until that is done i think | |
| 15:46:42 | aspiers | sean-k-mooney: OK thanks | |
| 15:47:04 | kashyap | aspiers: This work will spill over into "Train", yes? | |
| 15:47:10 | sean-k-mooney | rc1 will be around march 21st | |
| 15:47:26 | aspiers | kashyap: https://review.openstack.org/#/c/641994/ | |
| 15:47:43 | aspiers | Oh, you already saw that :) | |
| 15:47:46 | aspiers | I forgot | |
| 15:47:53 | kashyap | Yeah, no worries. | |
| 15:48:33 | aspiers | Anyway, ultimately I need to do whatever you guys think is best :) | |
| 15:48:39 | openstackgerrit | Balazs Gibizer proposed openstack/nova master: Documentation for bandwidth support https://review.openstack.org/642064 | |
| 15:48:42 | aspiers | If splitting it out helps then let's do that | |
| 15:49:14 | kashyap | aspiers: Yeah, it also will be less "daunting" to those who don't normally dwell on this area of code | |
| 15:49:28 | aspiers | Sure | |
| 15:49:29 | mriedem | what are you talking about splitting out? | |
| 15:49:45 | aspiers | the call to getDomainCapabilities | |
| 15:50:13 | kashyap | mriedem: Yeah, the adding of getDomainCapablities() in libvirt/host.py | |
| 15:50:34 | aspiers | kashyap: I was also thinking about splitting this code move out https://review.openstack.org/#/c/633855/11/nova/virt/libvirt/utils.py | |
| 15:50:49 | mriedem | aspiers: ok, i see you already put the -W back on your own change that i don't want merged in stein at this point, so you know where i am on this | |
| 15:50:56 | kashyap | mriedem: This bit (line 680): https://review.openstack.org/#/c/633855/11/nova/virt/libvirt/host.py | |
| 15:51:34 | mriedem | sure, split that out even if to just make that change smaller and easier to grok | |
| 15:51:40 | mriedem | too much code in one patch == hard to review | |
| 15:51:43 | aspiers | mriedem: yes, that's also why I submitted https://review.openstack.org/#/c/641994/ | |
| 15:51:44 | kashyap | (Yeah, I agree with mriedem on AMD SEV for Stein, I'm afraid.) | |
| 15:52:15 | kashyap | aspiers: Yes. The machine_type_mappings() in a separate change is good, too. | |
| 15:52:21 | aspiers | There's not even a debate on that, since feature freeze was yesterday :) | |
| 15:52:31 | mriedem | aspiers: you'd be surprised | |
| 15:52:56 | aspiers | Haha OK, well I'm sure some vendors are insane but not us | |
| 15:54:10 | kashyap | It's the same story with upstream _kernel_ as well :D | |
| 15:54:20 | aspiers | Yup | |
| 15:54:25 | aspiers | SUSE knows all about that ... | |
| 15:54:27 | kashyap | Once they start cutting long-term 'stable' release, everyone starts running around headless-chickens | |
| 15:54:41 | kashyap | ... "we need to get this into the "long-term" release!" | |