| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2019-03-08 | |||
| 14:45:02 | bauzas | at least at the last consensus point we had | |
| 14:57:05 | openstackgerrit | Artom Lifshitz proposed openstack/nova master: Dont' wait for VIF plugging during revert resize https://review.openstack.org/639396 | |
| 14:57:18 | artom | Alright, I think the tests should pass on ^^ now | |
| 14:57:37 | artom | mriedem, can I ask you to hit that when you get a moment? You're neck-deep in the resize flow anyways ;) | |
| 14:58:32 | dansmith | mriedem: fried_rice: related failure to a novaclient release? http://logs.openstack.org/92/624592/11/gate/nova-live-migration/06aea60/job-output.txt.gz#_2019-03-08_12_45_00_250123 | |
| 14:59:22 | artom | stephenfin, how much do you know about resize? Can I pick you as the lucky RH core for ^^ ? | |
| 15:00:54 | mriedem | dansmith: yes | |
| 15:00:59 | mriedem | dansmith: https://review.openstack.org/#/c/641986/ | |
| 15:01:12 | dansmith | ah okay | |
| 15:01:31 | mriedem | artom: did you sort that out with dansmith? | |
| 15:02:25 | dansmith | mriedem: he's just removing a wait for events on resize, which is more a you think than me | |
| 15:02:46 | dansmith | it doesn't break the context manager for waiting for events, so I'm happy(er) | |
| 15:03:29 | artom | mriedem, I think so. I also checked with slaweq who's in our Neutron team, and he confirmed that the VIF remains plugged on the source host | |
| 15:03:47 | dansmith | artom: um, what? :) | |
| 15:04:01 | artom | dansmith, what what? | |
| 15:04:10 | artom | Is plugged the right word? Wired? | |
| 15:04:13 | mriedem | i feel like i just had a patch like this | |
| 15:04:17 | mriedem | but was maybe for confirm | |
| 15:04:30 | dansmith | artom: that makes no sense for what you're saying here | |
| 15:04:43 | artom | dansmith, entirely plausible, but explain how :) | |
| 15:04:54 | dansmith | oh, this is finish_revert, I see | |
| 15:05:09 | dansmith | I thought it was finish-finish | |
| 15:05:23 | artom | Swedish finish? | |
| 15:05:27 | aspiers | sean-k-mooney: strong +1 for renaming evacuate, my preferred term would probably be "resurrect" | |
| 15:05:30 | dansmith | but still, you're not asserting this was always broken right? | |
| 15:05:36 | artom | dansmith, always racy | |
| 15:05:44 | dansmith | artom: what's it racing with? | |
| 15:05:54 | artom | Neutron with the virt driver | |
| 15:06:19 | mriedem | artom: so you're reverting this essentially right? https://review.openstack.org/#/q/I9e0cffb889c94713c7f28812918103a5d97cefeb | |
| 15:06:19 | aspiers | sean-k-mooney: "revive" might also work | |
| 15:06:45 | artom | mriedem, err, yes. WTF. | |
| 15:08:31 | mriedem | ok -1 until we have a good explanation of why https://review.openstack.org/#/c/595069/ was wrong | |
| 15:08:42 | mriedem | but maybe that explains a regression you're seeing downstream? | |
| 15:08:44 | dansmith | artom: okay, so tickling from compute manager will cause that event to start heading towards us because there are still interfaces available for neutron agent to find.. I kinda buy that, I guess... | |
| 15:08:48 | artom | mriedem, fair enough | |
| 15:09:21 | dansmith | I also -1d for the drunk speak in the commit message | |
| 15:09:27 | artom | ... | |
| 15:09:36 | artom | Well now you're just picking on em :( | |
| 15:09:38 | artom | *me | |
| 15:09:42 | dansmith | but yeah, I'd like to hear from lyarwood I guess | |
| 15:09:52 | mriedem | dansmith: it was my change :) | |
| 15:09:55 | mriedem | lyarwood backported it | |
| 15:10:24 | mriedem | and https://review.openstack.org/#/c/179228/ was your change :) | |
| 15:10:27 | mriedem | it's great | |
| 15:10:33 | artom | In a meeting now, I think I'll have to play around with it afterwards | |
| 15:10:37 | artom | Until now I was relying on logs | |
| 15:11:02 | artom | Yo-yo patches... | |
| 15:11:05 | stephenfin | oh, that's interesting | |
| 15:15:37 | dansmith | oh | |
| 15:15:40 | mriedem | artom: dansmith: ok so i see the race in https://review.openstack.org/#/c/595069/ | |
| 15:15:43 | mriedem | the dest triggers the event, | |
| 15:15:46 | mriedem | the source is waiting for it, | |
| 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 | |