Ideally, we'll need a synthetic reproducer, like [0], and regression unit tests in Nova that simulate corner cases for receiving vif-plugged events, and clearly defines how Nova reacts upon each of it:
1) unexpected event received within the agreed time-frame (neutron did conform to the contract... twice)
2) nova starts waiting for the event after it gets received (no receiving handler ready yet)
2.5) the event arrives before nova starts waiting for it, then a duplicate arrives in the expected time-frame
3) the even gets received after nova stopped waiting for it (neutron didn't conform to the contract)
4) nova never gets the event within the agreed time-frame (message lost)
As you can see, there is quite a few corner cases for that scenario
Ideally, we'll need a synthetic reproducer, like [0], and regression unit tests in Nova that simulate corner cases for receiving vif-plugged events, and clearly defines how Nova reacts upon each of it:
1) unexpected event received within the agreed time-frame (neutron did conform to the contract... twice)
2) nova starts waiting for the event after it gets received (no receiving handler ready yet)
2.5) the event arrives before nova starts waiting for it, then a duplicate arrives in the expected time-frame
3) the even gets received after nova stopped waiting for it (neutron didn't conform to the contract)
4) nova never gets the event within the agreed time-frame (message lost)
As you can see, there is quite a few corner cases for that scenario
[0] https:/ /github. com/openstack/ nova/blob/ 50fdbc752a9ca9c 31488140ef2997e d59d861a41/ nova/tests/ functional/ regressions/ test_bug_ 1831771. py