| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2018-06-21 | |||
| 19:47:15 | SpamapS | so then I'm looking for what tells the neutron agent to do *that* | |
| 19:50:10 | jroll | doesn't that happen when the 'host' is sent in the portbinding part of the port body? (whether during port create or update | |
| 19:52:03 | jroll | which I guess would be here: https://github.com/openstack/nova/blob/master/nova/network/neutronv2/api.py#L1072 | |
| 19:53:09 | SpamapS | right, I think that triggers binding | |
| 19:53:32 | dansmith | the key is, we can't do it until we've created the tap or whatever type of interface | |
| 19:53:49 | dansmith | which is why this interlock exists | |
| 19:54:38 | SpamapS | the tap happens | |
| 19:55:36 | SpamapS | so, IIRC, nova-compute doesn't call that, nova-conductor calls that | |
| 19:55:47 | dansmith | nova conductor calls what? | |
| 19:55:53 | dansmith | bind? | |
| 19:56:21 | SpamapS | well I mean, nova-conductor is the only one making calls to the neutron API | |
| 19:56:38 | dansmith | no, that's definitely not true | |
| 19:56:39 | jroll | _update_ports_for_instance is called by allocate_for_instance, which was in nova-compute last I checked | |
| 19:56:48 | dansmith | right | |
| 19:57:20 | dansmith | but, the thing that triggers this plug event has to happen within that context or we could miss it | |
| 19:57:21 | SpamapS | ah ok | |
| 19:57:56 | SpamapS | so, the port gets a binding_host_id, but does not get status set to ACTIVE | |
| 19:58:29 | jroll | sounds like something is failing in neutron, then | |
| 19:59:01 | dansmith | could be that, but neutron is supposed to indicate failure to us if it does | |
| 19:59:20 | jroll | or locking up in neutron, I guess :) | |
| 19:59:36 | dansmith | or neutron is sending it and it's not hitting nova-api, which is fairly common | |
| 19:59:57 | jroll | neutron sets the port to ACTIVE, no? | |
| 20:00:01 | SpamapS | network-vif-plugged will not be sent until ACTIVE | |
| 20:00:10 | SpamapS | agents make ports ACTIVE AFAICT | |
| 20:02:15 | dansmith | SpamapS: which version is this again? and specifically which version of os-vif? | |
| 20:02:32 | SpamapS | Pike | |
| 20:02:34 | dansmith | IIRC, ovs used to be the only one that supported events at all, | |
| 20:02:40 | dansmith | oh okay, that's new enough I think | |
| 20:02:48 | dansmith | are you sure these events were coming in before? | |
| 20:03:01 | dansmith | and that you haven't just flipped vif-plugging-is-fatal recently or something? | |
| 20:03:01 | SpamapS | os-vif==1.7.0 | |
| 20:03:10 | SpamapS | yes they were coming in | |
| 20:03:21 | dansmith | neutron will log when it sends the events, IIRC as they are batched, | |
| 20:03:29 | dansmith | so can you see it doing stuff to generate those? | |
| 20:04:08 | SpamapS | we did a deploy which mostly didn't change much, just some external things, and everything stopped working. We saw this once before when we had a badly configured cell that had the top level rmq's as the transport_url, and deleting that cell, and restarting everything fixed that.. but now.. stuck. | |
| 20:04:42 | SpamapS | Which is why I'm trying to figure out if nova-compute<->nova-conductor comms fail are causing the issue. | |
| 20:04:59 | SpamapS | neutron is not logging trying to send network-vif-plugged | |
| 20:05:09 | SpamapS | which is not a surprise because the ports are not going ACTIVE | |
| 20:05:16 | dansmith | a conductor or compute with a badly-configured transport_url in the config would prevent them from talking to other services in their cell | |
| 20:05:20 | SpamapS | I presume that is because whatever triggers the agent to make them active is not happening. | |
| 20:05:30 | dansmith | for events, nova-api looks up the cell of the instance and fires the event direct to the compute via its mq | |
| 20:06:44 | SpamapS | We've doubled checked all the config files, which didn't change anyway, they're all talking to the right rabbits. | |
| 20:06:46 | SpamapS | And the cells are fixed now | |
| 20:07:11 | SpamapS | just worried that something is stuck somewhere that is making a service still send events meant for cell-rabbit to top-level-rabbit. | |
| 20:07:36 | SpamapS | but neutron isn't really "cell aware" so I still suspect nova | |
| 20:07:53 | SpamapS | and can't seem to find the thing that nova does to tell neutron to activate a port | |
| 20:08:16 | dansmith | so, having looked through all the plug path stuff just now, | |
| 20:08:41 | dansmith | the only thing I can think of is if we create the tap, name it as we were told, and neutron agent on the compute notices that it got created, adds it to the bridge, and then fires the event | |
| 20:09:29 | dansmith | I thought we specifically called to neutron to tell it it was ready, but maybe we don't | |
| 20:09:35 | SpamapS | I think we do too | |
| 20:10:43 | dansmith | well, the plug path for linux bridge is pretty darn simple | |
| 20:11:22 | SpamapS | yeah, neutron even reports that it doesn't have to do anything when it gets triggered.. | |
| 20:11:23 | SpamapS | when things are working | |
| 20:12:02 | dansmith | there is a neutron agent running on that box at the time, right/ | |
| 20:12:18 | dansmith | and not in a container in such a way that it can't see the interfaces nova would create? | |
| 20:13:12 | SpamapS | yes the agent is running | |
| 20:13:22 | SpamapS | and they share a netns (deployed with kolla-ansible) | |
| 20:13:31 | SpamapS | they actually don't even have a netns | |
| 20:13:34 | SpamapS | they're on the host's networking | |
| 20:15:59 | dansmith | from looking through the agent (for the first time ever) it surely looks like it's just polling for new interfaces to pop up | |
| 20:18:49 | SpamapS | dansmith: I can verify that brctl show from inside the agent shows the taps | |
| 20:20:36 | openstackgerrit | Brianna Poulos proposed openstack/python-novaclient master: Fix trusted-image-certificate-id help text https://review.openstack.org/576555 | |
| 20:23:25 | dansmith | yeah, so the agent runs a loop, | |
| 20:23:46 | dansmith | each time through it looks for new interfaces, calls process_network_devices(), which goes through each new one, ends up at plug_interface(), etc, etc | |
| 20:24:16 | dansmith | so I think we create a properly-named tap, it notices, does the plug into the bridge and the wiring and then emits the notification | |
| 20:24:39 | dansmith | which explains why I can't find any calls to neutron in the critical path while we're waiting | |
| 20:26:05 | SpamapS | dansmith: makes sense I 'spose | |
| 20:27:00 | dansmith | looks like with debug on, | |
| 20:27:12 | dansmith | the agent should log "Agent loop found changes!" and then the device info it found | |
| 20:27:23 | dansmith | do you see that happen once nova has created the taps? | |
| 20:28:24 | dansmith | this: https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/agent/_common_agent.py#L453-L453 | |
| 20:30:38 | SpamapS | dansmith: right, we never get Agent loop found changes | |
| 20:30:45 | SpamapS | stracing now to see why | |
| 20:33:49 | dansmith | got confirmation from someone who would know that "plug" communication between neutron and nova just involves creating the interface | |
| 20:36:30 | SpamapS | k | |
| 20:36:55 | SpamapS | well I can see the taps from the linuxbridge container | |
| 20:37:07 | SpamapS | but I never see the agent actually polling brctl or ip or anything | |
| 20:37:39 | dansmith | well, it may use iproute directly | |
| 20:37:49 | dansmith | which would strace out as a socket(AF_NETLINK,...) early on | |
| 20:37:59 | SpamapS | "or ip" was my vague reference to iproute | |
| 20:38:07 | SpamapS | but .. oh that? | |
| 20:38:29 | dansmith | er, pyiproute I mean | |
| 20:39:01 | dansmith | `ip` is a CLI that speaks over a special type of socket called a "netlink" socket, which is a communication channel to the network subsystem inside the kernel | |
| 20:39:05 | dansmith | it's how it does all its magic | |
| 20:39:07 | SpamapS | yeah makes sense | |
| 20:39:11 | dansmith | anything else can speak that as well | |
| 20:40:28 | dansmith | if it did, it could also get async notification of networking events, so it would make sense | |
| 20:40:59 | SpamapS | no looks like it execs 'ip' | |
| 20:41:06 | SpamapS | or at least, sometimes it does | |
| 20:41:08 | SpamapS | still reading | |
| 20:41:30 | SpamapS | and digs around in /sys | |
| 20:42:45 | dansmith | https://github.com/openstack/os-vif/blob/master/os_vif/internal/command/ip/impl_pyroute2.py | |
| 20:43:12 | dansmith | % grep import.*pyroute2 -r neutron/ | wc -l | |
| 20:43:12 | dansmith | 4 | |
| 20:43:21 | dansmith | so, neutron uses it some, in master at least | |
| 20:43:50 | dansmith | in privileged/agent/linux/ip_lib.py | |
| 20:44:00 | dansmith | anyway | |
| 20:44:11 | openstackgerrit | Matt Riedemann proposed openstack/nova master: Address nits from consumer generation https://review.openstack.org/577227 | |
| 20:44:16 | SpamapS | not in pike | |
| 20:44:38 | SpamapS | neutron doesn't use os_vif directly even, AFAICT | |