Nir Soffer has uploaded a new change for review.
Change subject: guest-lvs: Skip foreign vgs during bootstrap
......................................................................
guest-lvs: Skip foreign vgs during bootstrap
Previously we tried to deactivate any lv in any vg backed by multipath
device. This may clash with non-ovirt vgs created on a multipath device.
We use now the STORAGE_DOMAIN_TAG to detect oVirt vgs and ignore other
vgs during bootstrap.
Change-Id: I8f072a05026cec8b9d027b52d0adf2e236089706
Bug-Url:
https://bugzilla.redhat.com/1374545
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
M tests/storage_lvm_test.py
M vdsm/storage/hsm.py
M vdsm/storage/lvm.py
3 files changed, 25 insertions(+), 5 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/70/64370/1
diff --git a/tests/storage_lvm_test.py b/tests/storage_lvm_test.py
index d4a1952..98f5b7e 100644
--- a/tests/storage_lvm_test.py
+++ b/tests/storage_lvm_test.py
@@ -67,13 +67,28 @@
run("lvcreate", "-n", "ovirt-lv-1",
"-L", "128m", "ovirt-vg")
run("lvcreate", "-n", "ovirt-lv-2",
"-L", "128m", "ovirt-vg")
try:
- lvm.bootstrap()
+ lvm.bootstrap(blockSD.STORAGE_DOMAIN_TAG)
# ovirt-lv must be inactive
self.assertEqual(self.find_active_lvs("ovirt-vg"), [])
finally:
run("vgchange", "-an", "ovirt-vg")
- # TODO: do not modify vgs without STORAGE_DOMAIN_TAG
+ @ValidateRunningAsRoot
+ def test_skip_foreign_vgs(self):
+ with fake_env() as env:
+ log.debug("Creating ovirt lvs")
+ run("pvcreate", "-ff", env.device)
+ # This is not ovirt-vg - no STORAGE_DOMAIN_TAG
+ run("vgcreate", "foreign-vg", env.device)
+ run("lvcreate", "-n", "foreign-lv-1",
"-L", "128m", "foreign-vg")
+ run("lvcreate", "-n", "foreign-lv-2",
"-L", "128m", "foreign-vg")
+ try:
+ lvm.bootstrap(blockSD.STORAGE_DOMAIN_TAG)
+ # foreign lvs should not be modified
+ self.assertEqual(self.find_active_lvs("foreign-vg"),
+ ["foreign-lv-1", "foreign-lv-2"])
+ finally:
+ run("vgchange", "-an", "foreign-vg")
@ValidateRunningAsRoot
def test_deactivate_unused_ovirt_lv_with_guest_lvs(self):
@@ -94,7 +109,7 @@
run("lvcreate", "--config", config, "-n",
"guest-lv-2",
"-L", "128m", "guest-vg")
try:
- lvm.bootstrap()
+ lvm.bootstrap(blockSD.STORAGE_DOMAIN_TAG)
# ovirt-lv must be inactive
self.assertEqual(self.find_active_lvs("ovirt-vg"), [])
except AssertionError:
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index d1b50d2..38d8d14 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -372,7 +372,8 @@
def storageRefresh():
sdCache.refreshStorage()
- lvm.bootstrap(refreshlvs=blockSD.SPECIAL_LVS)
+ lvm.bootstrap(blockSD.STORAGE_DOMAIN_TAG,
+ refreshlvs=blockSD.SPECIAL_LVS)
self._ready = True
self.log.debug("HSM is ready")
diff --git a/vdsm/storage/lvm.py b/vdsm/storage/lvm.py
index eadf11d..5e0ce2a 100644
--- a/vdsm/storage/lvm.py
+++ b/vdsm/storage/lvm.py
@@ -638,7 +638,7 @@
_lvminfo = LVMCache()
-def bootstrap(refreshlvs=()):
+def bootstrap(vg_tag, refreshlvs=()):
"""
Bootstrap lvm module
@@ -650,6 +650,10 @@
refreshlvs = set(refreshlvs)
for vg in _lvminfo.getAllVgs():
+ if vg_tag not in vg.tags:
+ log.info("Skipping foreign vg %s", vg.name)
+ continue
+
deactivate = []
refresh = []
--
To view, visit
https://gerrit.ovirt.org/64370
To unsubscribe, visit
https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I8f072a05026cec8b9d027b52d0adf2e236089706
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer(a)redhat.com>