Avoid huge metadata reservations in LVMpv

By some reason, pvcreate method allocates two 64MiB metadata chunks by
default.  We can/should make test how many vg/lv can be allocated using
default two 2MiB metadata chunks(this LVM defaults not our). But I
believe that it will be enough for any reasonable amount ov vg/lv.

We still can pass required metadata size, if we need to.

Update functional tests expected constants to match metadata size
update.

Change-Id: I0106fa35b7b21f16ce6a9a8794e6c88ba61ceeca
This commit is contained in:
Dmitry Bogun 2016-12-26 18:08:04 +02:00 committed by Andrii Ostapenko
parent 0d52a375cc
commit 3dc8f1c411
3 changed files with 37 additions and 42 deletions

View File

@ -77,25 +77,16 @@ class TestLvmUtils(unittest2.TestCase):
expected_calls = [ expected_calls = [
mock.call('pvcreate', mock.call('pvcreate',
'--metadatacopies', '1', '--metadatasize=32m',
'--metadatasize', '32m', '--metadatacopies=1',
'/dev/fake1', '/dev/fake1'),
check_exit_code=[0]),
mock.call('pvcreate', mock.call('pvcreate',
'--metadatacopies', '1', '--metadatacopies=1',
'--metadatasize', '64m', '/dev/fake2'),
'/dev/fake2',
check_exit_code=[0]),
mock.call('pvcreate', mock.call('pvcreate',
'--metadatacopies', '2', '--metadatasize=32m',
'--metadatasize', '32m', '/dev/fake3'),
'/dev/fake3', mock.call('pvcreate', '/dev/fake4')
check_exit_code=[0]),
mock.call('pvcreate',
'--metadatacopies', '2',
'--metadatasize', '64m',
'/dev/fake4',
check_exit_code=[0])
] ]
self.assertEqual(mock_exec.call_args_list, expected_calls) self.assertEqual(mock_exec.call_args_list, expected_calls)

View File

@ -147,18 +147,18 @@ BYT;
BYT; BYT;
/dev/vda:4295MB:virtblk:512:512:gpt:Virtio Block Device:; /dev/vda:4295MB:virtblk:512:512:gpt:Virtio Block Device:;
1:1049kB:26.2MB:25.2MB::primary:bios_grub; 1:1049kB:26.2MB:25.2MB::primary:bios_grub;
2:26.2MB:2123MB:2097MB::primary:; 2:26.2MB:2123MB:2097MB::primary:lvm;
3:2123MB:3147MB:1023MB::primary:; 3:2123MB:3147MB:1023MB::primary:lvm;
BYT; BYT;
/dev/vdb:2147MB:virtblk:512:512:gpt:Virtio Block Device:; /dev/vdb:2147MB:virtblk:512:512:gpt:Virtio Block Device:;
1:1049kB:26.2MB:25.2MB::primary:bios_grub; 1:1049kB:26.2MB:25.2MB::primary:bios_grub;
2:26.2MB:2098MB:2072MB::primary:; 2:26.2MB:2098MB:2072MB::primary:lvm;
PV VG Fmt Attr PSize PFree PV VG Fmt Attr PSize PFree
/dev/vda2 fpa_test_vg_1 lvm2 a-- 1.89g 4.00m /dev/vda2 fpa_test_vg_1 lvm2 a-- 1.95g 60.00m
/dev/vda3 fpa_test_vg_2 lvm2 a-- 916.00m 8.00m /dev/vda3 fpa_test_vg_2 lvm2 a-- 972.00m 120.00m
/dev/vdb2 fpa_test_vg_2 lvm2 a-- 1.87g 0 /dev/vdb2 fpa_test_vg_2 lvm2 a-- 1.93g 0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
fpa_root_vol fpa_test_vg_1 -wi-a----- 1000.00m fpa_root_vol fpa_test_vg_1 -wi-a----- 1000.00m
fpa_var_vol fpa_test_vg_1 -wi-a----- 936.00m fpa_var_vol fpa_test_vg_1 -wi-a----- 936.00m
@ -228,7 +228,7 @@ BYT;
"type": "lv", "type": "lv",
"name": "fpa_usr_vol", "name": "fpa_usr_vol",
"mount": "/usr", "mount": "/usr",
"size": "1348", # (976+500) - 2*64 (lvm meta) "size": "100%",
"file_system": "ext3" "file_system": "ext3"
} }
] ]
@ -244,7 +244,7 @@ BYT;
"type": "lv", "type": "lv",
"name": "fpa_opt_vol", "name": "fpa_opt_vol",
"mount": "/opt", "mount": "/opt",
"size": "936", # 1000 - 1*64 (lvm meta) "size": "100%",
"file_system": "ext4" "file_system": "ext4"
} }
] ]
@ -263,31 +263,31 @@ BYT;
actual = node.run_cmd('parted -lm && pvs && lvs')[0] actual = node.run_cmd('parted -lm && pvs && lvs')[0]
expected = """ expected = """
BYT; BYT;
/dev/mapper/fpa_test_vg_2-fpa_opt_vol:981MB:dm:512:512:loop:Linux device-mapper (linear):; /dev/mapper/fpa_test_vg_2-fpa_opt_vol:1044MB:dm:512:512:loop:Linux device-mapper (linear):;
1:0.00B:981MB:981MB:ext4::; 1:0.00B:1044MB:1044MB:ext4::;
BYT; BYT;
/dev/mapper/fpa_test_vg_1-fpa_usr_vol:1413MB:dm:512:512:loop:Linux device-mapper (linear):; /dev/mapper/fpa_test_vg_1-fpa_usr_vol:1539MB:dm:512:512:loop:Linux device-mapper (linear):;
1:0.00B:1413MB:1413MB:ext3::; 1:0.00B:1539MB:1539MB:ext3::;
BYT; BYT;
/dev/vda:4295MB:virtblk:512:512:gpt:Virtio Block Device:; /dev/vda:4295MB:virtblk:512:512:gpt:Virtio Block Device:;
1:1049kB:26.2MB:25.2MB::primary:bios_grub; 1:1049kB:26.2MB:25.2MB::primary:bios_grub;
2:26.2MB:2622MB:2596MB:ext4:primary:; 2:26.2MB:2622MB:2596MB:ext4:primary:;
3:2622MB:3147MB:524MB::primary:; 3:2622MB:3147MB:524MB::primary:lvm;
BYT; BYT;
/dev/vdb:2147MB:virtblk:512:512:gpt:Virtio Block Device:; /dev/vdb:2147MB:virtblk:512:512:gpt:Virtio Block Device:;
1:1049kB:26.2MB:25.2MB::primary:bios_grub; 1:1049kB:26.2MB:25.2MB::primary:bios_grub;
2:26.2MB:1050MB:1023MB::primary:; 2:26.2MB:1050MB:1023MB::primary:lvm;
3:1050MB:2098MB:1049MB::primary:; 3:1050MB:2098MB:1049MB::primary:lvm;
PV VG Fmt Attr PSize PFree PV VG Fmt Attr PSize PFree
/dev/vda3 fpa_test_vg_1 lvm2 a-- 440.00m 8.00m /dev/vda3 fpa_test_vg_1 lvm2 a-- 496.00m 0
/dev/vdb2 fpa_test_vg_1 lvm2 a-- 916.00m 0 /dev/vdb2 fpa_test_vg_1 lvm2 a-- 972.00m 0
/dev/vdb3 fpa_test_vg_2 lvm2 a-- 940.00m 4.00m /dev/vdb3 fpa_test_vg_2 lvm2 a-- 996.00m 0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
fpa_usr_vol fpa_test_vg_1 -wi-a----- 1.32g fpa_usr_vol fpa_test_vg_1 -wi-a----- 1.43g
fpa_opt_vol fpa_test_vg_2 -wi-a----- 936.00m fpa_opt_vol fpa_test_vg_2 -wi-a----- 996.00m
""" # noqa """ # noqa
utils.assertNoDiff(expected, actual) utils.assertNoDiff(expected, actual)

View File

@ -52,15 +52,19 @@ def pvdisplay_parse(output):
return pvs return pvs
def pvcreate(pvname, metadatasize=64, metadatacopies=2): def pvcreate(pvname, metadatasize=None, metadatacopies=None):
# check if pv already exists # check if pv already exists
if get_first_by_key_value(pvdisplay(), 'name', pvname, False): if get_first_by_key_value(pvdisplay(), 'name', pvname, False):
raise errors.PVAlreadyExistsError( raise errors.PVAlreadyExistsError(
'Error while creating pv: pv %s already exists' % pvname) 'Error while creating pv: pv %s already exists' % pvname)
utils.execute('pvcreate',
'--metadatacopies', str(metadatacopies), cmd = ['pvcreate']
'--metadatasize', str(metadatasize) + 'm', if metadatasize is not None:
pvname, check_exit_code=[0]) cmd.append('--metadatasize={}m'.format(metadatasize))
if metadatacopies is not None:
cmd.append('--metadatacopies={}'.format(metadatacopies))
cmd.append(pvname)
utils.execute(*cmd)
def pvremove(pvname): def pvremove(pvname):