[PATCH blivet/master 2/3] devicelibs.lvm: Add 'autobackup' attribute

Will Woods wwoods at redhat.com
Fri Sep 19 22:18:37 UTC 2014


This adds the 'autobackup' attribute, which - if set to False - will
suppress the automatic backup of LVM metadata by adding the appropriate
configuration options (backup.backup=0 and backup.archive=0).

Also, extend the test case so it tests this functionality.
---
 blivet/devicelibs/lvm.py          |  6 ++++++
 tests/devicelibs_test/lvm_test.py | 21 +++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/blivet/devicelibs/lvm.py b/blivet/devicelibs/lvm.py
index 949532c..df4746a 100644
--- a/blivet/devicelibs/lvm.py
+++ b/blivet/devicelibs/lvm.py
@@ -50,6 +50,10 @@ RAID_levels = raid.RAIDLevels(["raid0", "raid1", "linear"])
 # These LVM commands are read-only, so we can run them with read-only locking
 READONLY_COMMANDS = ('lvs', 'pvs', 'vgs')
 
+# This defines whether we want automatic metadata backup or not.
+# You probably want this on unless you're doing image builds.
+autobackup = True
+
 def has_lvm():
     if util.find_program_in_path("lvm"):
         for line in open("/proc/devices").readlines():
@@ -91,6 +95,8 @@ def _getConfigArgs(args):
     config_string = " devices { %s } " % (devices_string) # strings can be added
     if cmd in READONLY_COMMANDS:
         config_string += "global {locking_type=4} "
+    if not autobackup:
+        config_string += "backup {backup=0 archive=0} "
     if config_string:
         config_args = ["--config", config_string]
     return config_args
diff --git a/tests/devicelibs_test/lvm_test.py b/tests/devicelibs_test/lvm_test.py
index b7000ea..33f0185 100755
--- a/tests/devicelibs_test/lvm_test.py
+++ b/tests/devicelibs_test/lvm_test.py
@@ -7,6 +7,8 @@ from blivet.errors import LVMError
 
 from tests import loopbackedtestcase
 
+import glob
+
 class LVMTestCase(unittest.TestCase):
 
     def testGetPossiblePhysicalExtents(self):
@@ -38,6 +40,9 @@ class LVMAsRootTestCase(loopbackedtestcase.LoopBackedTestCase):
         self._vg_name = "test-vg"
         self._lv_name = "test-lv"
 
+    def _list_backups(self):
+        return set(glob.glob("/etc/lvm/archive/%s_*" % self._vg_name))
+
     def tearDown(self):
         """Destroy volume group."""
         try:
@@ -68,6 +73,7 @@ class LVMAsRootTestCase(loopbackedtestcase.LoopBackedTestCase):
     def testLVM(self):
         _LOOP_DEV0 = self.loopDevices[0]
         _LOOP_DEV1 = self.loopDevices[1]
+        _old_backups = self._list_backups()
 
         ##
         ## pvcreate
@@ -109,6 +115,16 @@ class LVMAsRootTestCase(loopbackedtestcase.LoopBackedTestCase):
             lvm.vgcreate("another-vg", [_LOOP_DEV0], Size("5MiB"))
 
         ##
+        ## check for autobackup - should be some new stuff here
+        ## FIXME: skip if backups have been disabled by host
+        ##
+        _current_backups = self._list_backups()
+        self.assertNotEqual(_old_backups, _current_backups,
+                            "lvm.autobackup enabled but no backups created")
+        _old_backups = _current_backups
+        lvm.autobackup = False
+
+        ##
         ## vgdeactivate
         ##
         # pass
@@ -279,5 +295,10 @@ class LVMAsRootTestCase(loopbackedtestcase.LoopBackedTestCase):
         # pv already removed
         self.assertEqual(lvm.pvremove(_LOOP_DEV0), None)
 
+        ##
+        ## check if autobackup=False worked
+        ##
+        self.assertEqual(_old_backups, self._list_backups())
+
 if __name__ == "__main__":
     unittest.main()
-- 
1.9.3



More information about the anaconda-patches mailing list