Skip to content

Commit 8f43e77

Browse files
committed
Retry for 5 times when renaming adapter to get more reliable
Change-Id: Ia148c3ee5bcf55a7ae9cf8c1834d3991bfe6609e
1 parent 7cb24ea commit 8f43e77

2 files changed

Lines changed: 40 additions & 14 deletions

File tree

cloudbaseinit/osutils/windows.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -855,12 +855,24 @@ def set_network_adapter_mtu(self, name, mtu):
855855
'Setting MTU for interface "%(name)s" with '
856856
'value "%(mtu)s" failed' % {'name': name, 'mtu': mtu})
857857

858+
@retry_decorator.retry_decorator(
859+
max_retry_count=5,
860+
max_sleep_time=10,
861+
exceptions=exception.CloudbaseInitException)
858862
def rename_network_adapter(self, old_name, new_name):
859-
net_adapter = self._get_network_msft_adapter(old_name)
860863
try:
864+
LOG.info('Renaming interface "%(old_name)s" to "%(new_name)s"...' %
865+
{'old_name': old_name,
866+
'new_name': new_name})
867+
net_adapter = self._get_network_msft_adapter(old_name)
861868
net_adapter.rename(new_name)
862869
self._get_network_msft_adapter(new_name)
863-
except Exception:
870+
except Exception as ex:
871+
LOG.warning('Renaming interface "%(old_name)s" to "%(new_name)s" '
872+
'failed: %(err)s' %
873+
{'old_name': old_name,
874+
'new_name': new_name,
875+
'err': ex})
864876
raise exception.CloudbaseInitException(
865877
'Renaming interface "%(old_name)s" to "%(new_name)s" '
866878
'failed' % {'old_name': old_name, 'new_name': new_name})

cloudbaseinit/tests/osutils/test_windows.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ def _test_add_user_to_local_group(self,
353353

354354
is_in_alias = ret_value != self._winutils.ERROR_MEMBER_IN_ALIAS
355355

356-
if ret_value is not 0 and is_in_alias:
356+
if ret_value and is_in_alias:
357357
self.assertRaises(
358358
exception.CloudbaseInitException,
359359
self._winutils.add_user_to_local_group,
@@ -833,21 +833,30 @@ def test_set_static_network_config_ipv6(self):
833833

834834
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
835835
'._get_network_msft_adapter')
836-
def _test_rename_network_adapter(self, rename_exception,
836+
@mock.patch('time.sleep')
837+
def _test_rename_network_adapter(self,
838+
rename_adapter_retries,
839+
rename_adapter_failed,
840+
mock_sleep,
837841
mock_get_network_adapter):
838842
old_name = "fake_old"
839843
new_name = "fake_new"
840844

841845
adapter = mock.Mock()
842846
adapter.Name = mock.sentinel.old_name
843847
mock_get_network_adapter.return_value = adapter
844-
get_network_adapter_called = 1
845-
if rename_exception:
846-
adapter.rename.side_effect = Exception("fake exception")
848+
get_network_adapter_called = 1 + rename_adapter_retries
849+
rename_adapter_side_effect = []
850+
for i in range(rename_adapter_retries):
851+
rename_adapter_side_effect.append(Exception("fake exception"))
852+
if rename_adapter_failed:
853+
adapter.rename.side_effect = rename_adapter_side_effect
847854
with self.assertRaises(exception.CloudbaseInitException):
848855
self._winutils.rename_network_adapter(old_name, new_name)
849856
else:
850-
get_network_adapter_called = 2
857+
get_network_adapter_called += 1
858+
rename_adapter_side_effect.append(None)
859+
adapter.rename.side_effect = rename_adapter_side_effect
851860
self._winutils.rename_network_adapter(old_name, new_name)
852861

853862
adapter.rename.assert_called()
@@ -856,9 +865,11 @@ def _test_rename_network_adapter(self, rename_exception,
856865
get_network_adapter_called)
857866
self.assertEqual(mock_get_network_adapter.call_args_list[0].args,
858867
(old_name,))
859-
if not exception:
860-
self.assertEqual(mock_get_network_adapter.call_args_list[1].args,
861-
(new_name,))
868+
if not rename_adapter_failed:
869+
self.assertEqual(
870+
mock_get_network_adapter.
871+
call_args_list[get_network_adapter_called - 1].args,
872+
(new_name,))
862873

863874
def _test_get_config_key_name(self, section):
864875
response = self._winutils._get_config_key_name(section)
@@ -875,10 +886,13 @@ def test_get_config_key_name_no_section(self):
875886
self._test_get_config_key_name(None)
876887

877888
def test_rename_network_adapter(self):
878-
self._test_rename_network_adapter(False)
889+
self._test_rename_network_adapter(0, False)
890+
891+
def test_rename_network_adapter_with_retry(self):
892+
self._test_rename_network_adapter(3, False)
879893

880-
def test_rename_network_adapter_fail(self):
881-
self._test_rename_network_adapter(True)
894+
def test_rename_network_adapter_failed(self):
895+
self._test_rename_network_adapter(5, True)
882896

883897
@mock.patch('cloudbaseinit.osutils.windows.WindowsUtils'
884898
'._get_config_key_name')

0 commit comments

Comments
 (0)