From 549071a0f5181e54c14810dc9afc017866e5aa41 Mon Sep 17 00:00:00 2001 From: Luca Bigliardi <shammash@google.com> Date: Wed, 16 Jun 2010 17:59:20 +0100 Subject: [PATCH] BaseDRBD: provide a way to query usermode_helper parameter Signed-off-by: Luca Bigliardi <shammash@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- Makefile.am | 1 + lib/bdev.py | 18 ++++++++++++++++++ test/data/sys_drbd_usermode_helper.txt | 1 + test/ganeti.bdev_unittest.py | 13 +++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 test/data/sys_drbd_usermode_helper.txt diff --git a/Makefile.am b/Makefile.am index 0769197b0..c0da777fa 100644 --- a/Makefile.am +++ b/Makefile.am @@ -358,6 +358,7 @@ TEST_FILES = \ test/data/proc_drbd8.txt \ test/data/proc_drbd80-emptyline.txt \ test/data/proc_drbd83.txt \ + test/data/sys_drbd_usermode_helper.txt \ test/import-export_unittest-helper python_tests = \ diff --git a/lib/bdev.py b/lib/bdev.py index e941362fa..9b4388780 100644 --- a/lib/bdev.py +++ b/lib/bdev.py @@ -825,6 +825,7 @@ class BaseDRBD(BlockDev): # pylint: disable-msg=W0223 _ST_CONNECTED = "Connected" _STATUS_FILE = "/proc/drbd" + _USERMODE_HELPER_FILE = "/sys/module/drbd/parameters/usermode_helper" @staticmethod def _GetProcData(filename=_STATUS_FILE): @@ -902,6 +903,23 @@ class BaseDRBD(BlockDev): # pylint: disable-msg=W0223 return retval + @staticmethod + def GetUsermodeHelper(filename=_USERMODE_HELPER_FILE): + """Returns DRBD usermode_helper currently set. + + """ + try: + helper = utils.ReadFile(filename).splitlines()[0] + except EnvironmentError, err: + if err.errno == errno.ENOENT: + _ThrowError("The file %s cannot be opened, check if the module" + " is loaded (%s)", filename, str(err)) + else: + _ThrowError("Can't read DRBD helper file %s: %s", filename, str(err)) + if not helper: + _ThrowError("Can't read any data from %s", filename) + return helper + @staticmethod def _DevPath(minor): """Return the path to a drbd device for a given minor. diff --git a/test/data/sys_drbd_usermode_helper.txt b/test/data/sys_drbd_usermode_helper.txt new file mode 100644 index 000000000..836b5e7b2 --- /dev/null +++ b/test/data/sys_drbd_usermode_helper.txt @@ -0,0 +1 @@ +/bin/true diff --git a/test/ganeti.bdev_unittest.py b/test/ganeti.bdev_unittest.py index 1e4460500..36dc58564 100755 --- a/test/ganeti.bdev_unittest.py +++ b/test/ganeti.bdev_unittest.py @@ -143,6 +143,19 @@ class TestDRBD8Status(testutils.GanetiTestCase): self.failUnlessRaises(errors.BlockDeviceError, bdev.DRBD8._GetProcData, filename=temp_file) + def testHelper(self): + """Test reading usermode_helper in /sys.""" + sys_drbd_helper = self._TestDataFilename("sys_drbd_usermode_helper.txt") + drbd_helper = bdev.DRBD8.GetUsermodeHelper(filename=sys_drbd_helper) + self.failUnlessEqual(drbd_helper, "/bin/true") + + def testHelperIOErrors(self): + """Test handling of errors while reading usermode_helper in /sys.""" + temp_file = self._CreateTempFile() + os.unlink(temp_file) + self.failUnlessRaises(errors.BlockDeviceError, + bdev.DRBD8.GetUsermodeHelper, filename=temp_file) + def testMinorNotFound(self): """Test not-found-minor in /proc""" self.failUnless(9 not in self.mass_data) -- GitLab