Do udevadm settle after running partx in image extn
This commit adds running 'udevadm settle' after running partx so that the partition table is re-read properly by lsblk which follows it. Closes-bug: 1432918 Change-Id: I1c7dddd3ed8cab175e608e09ecc4ae7f289cfc31
This commit is contained in:
		@@ -44,6 +44,7 @@ def _get_partition(device, uuid):
 | 
			
		||||
        try:
 | 
			
		||||
            utils.execute('partx', '-u', device, attempts=3,
 | 
			
		||||
                          delay_on_retry=True)
 | 
			
		||||
            utils.execute('udevadm', 'settle')
 | 
			
		||||
        except processutils.ProcessExecutionError:
 | 
			
		||||
            LOG.warning("Couldn't re-read the partition table "
 | 
			
		||||
                        "on device %s" % device)
 | 
			
		||||
 
 | 
			
		||||
@@ -215,13 +215,14 @@ class TestImageExtension(test_base.BaseTestCase):
 | 
			
		||||
        lsblk_output = ('''KNAME="test" UUID="" TYPE="disk"
 | 
			
		||||
        KNAME="test1" UUID="256a39e3-ca3c-4fb8-9cc2-b32eec441f47" TYPE="part"
 | 
			
		||||
        KNAME="test2" UUID="%s" TYPE="part"''' % self.fake_root_uuid)
 | 
			
		||||
        mock_execute.side_effect = (None, [lsblk_output])
 | 
			
		||||
        mock_execute.side_effect = (None, None, [lsblk_output])
 | 
			
		||||
 | 
			
		||||
        root_part = image._get_partition(self.fake_dev,
 | 
			
		||||
                                              self.fake_root_uuid)
 | 
			
		||||
        self.assertEqual('/dev/test2', root_part)
 | 
			
		||||
        expected = [mock.call('partx', '-u', self.fake_dev, attempts=3,
 | 
			
		||||
                              delay_on_retry=True),
 | 
			
		||||
                    mock.call('udevadm', 'settle'),
 | 
			
		||||
                    mock.call('lsblk', '-PbioKNAME,UUID,TYPE', self.fake_dev)]
 | 
			
		||||
        mock_execute.assert_has_calls(expected)
 | 
			
		||||
        self.assertFalse(mock_dispatch.called)
 | 
			
		||||
@@ -231,20 +232,21 @@ class TestImageExtension(test_base.BaseTestCase):
 | 
			
		||||
        lsblk_output = ('''KNAME="test" UUID="" TYPE="disk"
 | 
			
		||||
        KNAME="test1" UUID="256a39e3-ca3c-4fb8-9cc2-b32eec441f47" TYPE="part"
 | 
			
		||||
        KNAME="test2" UUID="" TYPE="part"''')
 | 
			
		||||
        mock_execute.side_effect = (None, [lsblk_output])
 | 
			
		||||
        mock_execute.side_effect = (None, None, [lsblk_output])
 | 
			
		||||
 | 
			
		||||
        self.assertRaises(errors.DeviceNotFound,
 | 
			
		||||
                          image._get_partition, self.fake_dev,
 | 
			
		||||
                          self.fake_root_uuid)
 | 
			
		||||
        expected = [mock.call('partx', '-u', self.fake_dev, attempts=3,
 | 
			
		||||
                              delay_on_retry=True),
 | 
			
		||||
                    mock.call('udevadm', 'settle'),
 | 
			
		||||
                    mock.call('lsblk', '-PbioKNAME,UUID,TYPE', self.fake_dev)]
 | 
			
		||||
        mock_execute.assert_has_calls(expected)
 | 
			
		||||
        self.assertFalse(mock_dispatch.called)
 | 
			
		||||
 | 
			
		||||
    def test__get_partition_command_fail(self, mock_execute,
 | 
			
		||||
                                              mock_dispatch):
 | 
			
		||||
        mock_execute.side_effect = (None,
 | 
			
		||||
        mock_execute.side_effect = (None, None,
 | 
			
		||||
                                    processutils.ProcessExecutionError('boom'))
 | 
			
		||||
        self.assertRaises(errors.CommandExecutionError,
 | 
			
		||||
                          image._get_partition, self.fake_dev,
 | 
			
		||||
@@ -252,6 +254,7 @@ class TestImageExtension(test_base.BaseTestCase):
 | 
			
		||||
 | 
			
		||||
        expected = [mock.call('partx', '-u', self.fake_dev, attempts=3,
 | 
			
		||||
                              delay_on_retry=True),
 | 
			
		||||
                    mock.call('udevadm', 'settle'),
 | 
			
		||||
                    mock.call('lsblk', '-PbioKNAME,UUID,TYPE', self.fake_dev)]
 | 
			
		||||
        mock_execute.assert_has_calls(expected)
 | 
			
		||||
        self.assertFalse(mock_dispatch.called)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user