commit 99ff4a8167aab04e3ac2ec2f8ba537f3f681de22 Author: asarfaty Date: Thu Oct 15 08:18:06 2020 +0200 NSX|P: Wait with segment realization until it is fully done Nova boot may fail if the logical switch is not accessible. This patch wait until the segment consolidated state is successful before returning the LS id to nova. Change-Id: Ib055feda79877fe4ebcc5db193f7d9d081724a94 (cherry picked from commit e0f7bfaeaf2fd01afe711487e90a7e298f47a78c) diff --git a/vmware_nsx/plugins/nsx_p/plugin.py b/vmware_nsx/plugins/nsx_p/plugin.py index e68f552..153eb13 100644 --- a/vmware_nsx/plugins/nsx_p/plugin.py +++ b/vmware_nsx/plugins/nsx_p/plugin.py @@ -1618,6 +1618,10 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base): try: nsx_id = self.nsxpolicy.segment.get_realized_logical_switch_id( segment_id) + # Make sure the LS is already active before letting nova use it + if utils.is_nsx_version_3_1_0(self._nsx_version): + self.nsxpolicy.segment.wait_until_state_successful( + segment_id, with_refresh=True) # Add result to caches NET_NEUTRON_2_NSX_ID_CACHE[network_id] = nsx_id NET_NSX_2_NEUTRON_ID_CACHE[nsx_id] = network_id diff --git a/vmware_nsx/tests/unit/nsx_p/test_plugin.py b/vmware_nsx/tests/unit/nsx_p/test_plugin.py index 6f073de..ef3321f 100644 --- a/vmware_nsx/tests/unit/nsx_p/test_plugin.py +++ b/vmware_nsx/tests/unit/nsx_p/test_plugin.py @@ -127,6 +127,9 @@ class NsxPPluginTestCaseMixin( return_value=LOGICAL_SWITCH_ID ).start() mock.patch("vmware_nsxlib.v3.policy.core_resources." + "NsxPolicySegmentApi.wait_until_state_successful" + ).start() + mock.patch("vmware_nsxlib.v3.policy.core_resources." "NsxPolicySegmentApi.get_realized_id", return_value=LOGICAL_SWITCH_ID ).start()