def test_vg_create_multiple_devices(tmp_storage, read_only): dev_size = 10 * GiB dev1 = tmp_storage.create_device(dev_size) dev2 = tmp_storage.create_device(dev_size) dev3 = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.createVG(vg_name, [dev1, dev2, dev3], "initial-tag", 128) lvm.set_read_only(read_only) vg = lvm.getVG(vg_name) assert vg.name == vg_name assert sorted(vg.pv_name) == sorted((dev1, dev2, dev3)) # pvs is broken with read-only mode # https://bugzilla.redhat.com/1809660. lvm.set_read_only(False) # The first pv (metadata pv) will have the 2 used metadata areas. pv = lvm.getPV(dev1) assert pv.name == dev1 assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 # The rest of the pvs will have 2 unused metadata areas. for dev in dev2, dev3: pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 0 # TODO: should work also in read-only mode. lvm.removeVG(vg_name) lvm.set_read_only(read_only) # We remove the VG with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name) # pvs is broken with read-only mode # https://bugzilla.redhat.com/1809660. lvm.set_read_only(False) # But keep the PVs, not sure why. for dev in dev1, dev2, dev3: pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == ""
def test_vg_create_multiple_devices(tmp_storage, read_only): dev_size = 10 * 1024**3 dev1 = tmp_storage.create_device(dev_size) dev2 = tmp_storage.create_device(dev_size) dev3 = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.createVG(vg_name, [dev1, dev2, dev3], "initial-tag", 128) lvm.set_read_only(read_only) vg = lvm.getVG(vg_name) assert vg.name == vg_name assert sorted(vg.pv_name) == sorted((dev1, dev2, dev3)) # The first pv (metadata pv) will have the 2 used metadata areas. pv = lvm.getPV(dev1) assert pv.name == dev1 assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 # The rest of the pvs will have 2 unused metadata areas. for dev in dev2, dev3: pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 0 lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.removeVG(vg_name) # TODO: check this also in read-only mode. vgs fail now after removing the # vg, and this cause 10 retries that take 15 seconds. # We remove the VG with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name) # But keep the PVs, not sure why. for dev in dev1, dev2, dev3: pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == ""
def test_vg_create_multiple_devices(tmp_storage, read_only): dev_size = 10 * 1024**3 dev1 = tmp_storage.create_device(dev_size) dev2 = tmp_storage.create_device(dev_size) dev3 = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.createVG(vg_name, [dev1, dev2, dev3], "initial-tag", 128) lvm.set_read_only(read_only) vg = lvm.getVG(vg_name) assert vg.name == vg_name assert sorted(vg.pv_name) == sorted((dev1, dev2, dev3)) # The first pv (metadata pv) will have the 2 used metadata areas. pv = lvm.getPV(dev1) assert pv.name == dev1 assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 # The rest of the pvs will have 2 unused metadata areas. for dev in dev2, dev3: pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 0 lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.removeVG(vg_name) # TODO: check this also in read-only mode. vgs fail now after removing the # vg, and this cause 10 retries that take 15 seconds. # We remove the VG with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name) # But keep the PVs, not sure why. for dev in dev1, dev2, dev3: pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == ""
def test_vg_create_remove_single_device(tmp_storage, read_only): dev_size = 20 * GiB dev = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.createVG(vg_name, [dev], "initial-tag", 128) lvm.set_read_only(read_only) vg = lvm.getVG(vg_name) assert vg.name == vg_name assert vg.pv_name == (dev, ) assert vg.tags == ("initial-tag", ) assert int(vg.extent_size) == 128 * MiB # pvs is broken with read-only mode # https://bugzilla.redhat.com/1809660. lvm.set_read_only(False) pv = lvm.getPV(dev) lvm.set_read_only(read_only) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.removeVG(vg_name) lvm.set_read_only(read_only) # We remove the VG with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name) # pvs is broken with read-only mode # https://bugzilla.redhat.com/1809660. lvm.set_read_only(False) # But keep the PVs, not sure why. pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == ""
def test_vg_extend_reduce(tmp_storage): dev_size = 10 * 1024**3 dev1 = tmp_storage.create_device(dev_size) dev2 = tmp_storage.create_device(dev_size) dev3 = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) lvm.createVG(vg_name, [dev1], "initial-tag", 128) vg = lvm.getVG(vg_name) assert vg.pv_name == (dev1, ) lvm.extendVG(vg_name, [dev2, dev3], force=False) vg = lvm.getVG(vg_name) assert sorted(vg.pv_name) == sorted((dev1, dev2, dev3)) # The first pv (metadata pv) will have the 2 used metadata areas. pv = lvm.getPV(dev1) assert pv.name == dev1 assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 # The rest of the pvs will have 2 unused metadata areas. for dev in dev2, dev3: pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 0 lvm.reduceVG(vg_name, dev2) vg = lvm.getVG(vg_name) assert sorted(vg.pv_name) == sorted((dev1, dev3)) lvm.removeVG(vg_name) with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name)
def test_vg_extend_reduce(tmp_storage): dev_size = 10 * 1024**3 dev1 = tmp_storage.create_device(dev_size) dev2 = tmp_storage.create_device(dev_size) dev3 = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) lvm.createVG(vg_name, [dev1], "initial-tag", 128) vg = lvm.getVG(vg_name) assert vg.pv_name == (dev1,) lvm.extendVG(vg_name, [dev2, dev3], force=False) vg = lvm.getVG(vg_name) assert sorted(vg.pv_name) == sorted((dev1, dev2, dev3)) # The first pv (metadata pv) will have the 2 used metadata areas. pv = lvm.getPV(dev1) assert pv.name == dev1 assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 # The rest of the pvs will have 2 unused metadata areas. for dev in dev2, dev3: pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 0 lvm.reduceVG(vg_name, dev2) vg = lvm.getVG(vg_name) assert sorted(vg.pv_name) == sorted((dev1, dev3)) lvm.removeVG(vg_name) with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name)
def test_vg_create_remove_single_device(tmp_storage, read_only): dev_size = 20 * 1024**3 dev = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.createVG(vg_name, [dev], "initial-tag", 128) lvm.set_read_only(read_only) vg = lvm.getVG(vg_name) assert vg.name == vg_name assert vg.pv_name == (dev, ) assert vg.tags == ("initial-tag", ) assert int(vg.extent_size) == 128 * 1024**2 pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.removeVG(vg_name) # TODO: check this also in read-only mode. vgs fail now after removing the # vg, and this cause 10 retries that take 15 seconds. # We remove the VG with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name) # But keep the PVs, not sure why. pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == ""
def test_vg_create_remove_single_device(tmp_storage, read_only): dev_size = 20 * 1024**3 dev = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.createVG(vg_name, [dev], "initial-tag", 128) lvm.set_read_only(read_only) vg = lvm.getVG(vg_name) assert vg.name == vg_name assert vg.pv_name == (dev,) assert vg.tags == ("initial-tag",) assert int(vg.extent_size) == 128 * 1024**2 pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 lvm.set_read_only(False) # TODO: should work also in read-only mode. lvm.removeVG(vg_name) # TODO: check this also in read-only mode. vgs fail now after removing the # vg, and this cause 10 retries that take 15 seconds. # We remove the VG with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name) # But keep the PVs, not sure why. pv = lvm.getPV(dev) assert pv.name == dev assert pv.vg_name == ""
def test_vg_extend_reduce(tmp_storage): dev_size = 10 * GiB dev1 = tmp_storage.create_device(dev_size) dev2 = tmp_storage.create_device(dev_size) dev3 = tmp_storage.create_device(dev_size) vg_name = str(uuid.uuid4()) lvm.set_read_only(False) lvm.createVG(vg_name, [dev1], "initial-tag", 128) clear_stats() vg = lvm.getVG(vg_name) check_stats(hits=0, misses=1) # Call getVG() again will get cache hit. lvm.getVG(vg_name) check_stats(hits=1, misses=1) assert vg.pv_name == (dev1,) lvm.extendVG(vg_name, [dev2, dev3], force=False) clear_stats() vg = lvm.getVG(vg_name) # Calling getVG() after extendVG() does not use the cache. # This happens because extendVG() invalidates the VG. check_stats(hits=0, misses=1) assert sorted(vg.pv_name) == sorted((dev1, dev2, dev3)) clear_stats() # The first pv (metadata pv) will have the 2 used metadata areas. pv = lvm.getPV(dev1) check_stats(hits=0, misses=1) assert pv.name == dev1 assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 2 # The rest of the pvs will have 2 unused metadata areas. for dev in dev2, dev3: clear_stats() pv = lvm.getPV(dev) check_stats(hits=0, misses=1) assert pv.name == dev assert pv.vg_name == vg_name assert int(pv.dev_size) == dev_size assert int(pv.mda_count) == 2 assert int(pv.mda_used_count) == 0 lvm.reduceVG(vg_name, dev2) clear_stats() vg = lvm.getVG(vg_name) # Calling getVG() after reduceVG() does not use the cache. # This happens because reduceVG() invalidates the VG. check_stats(hits=0, misses=1) assert sorted(vg.pv_name) == sorted((dev1, dev3)) lvm.removeVG(vg_name) clear_stats() with pytest.raises(se.VolumeGroupDoesNotExist): lvm.getVG(vg_name) check_stats(hits=0, misses=1)