Example #1
0
    def __init__(self, fs, server, index, dev, jdev=None, group=None,
            tag=None, enabled=True, mode='managed', network=None,
            active='yes'):
        """
        Initialize a Lustre target object.
        """
        Disk.__init__(self, dev)
        self._states = {}
        Component.__init__(self, fs, server, enabled, mode, active)

        self.defaultserver = server      # Default server the target runs on
        self.failservers = ServerGroup() # All failover servers

        assert index is not None
        self.index = int(index)
        self.group = group
        self.tag = tag
        self.network = network
        self.mntdev = self.dev
        self.recov_info = None

        if jdev:
            self.journal = Journal(self, jdev)
        else:
            self.journal = None

        # If target mode is external then set target state accordingly
        if self.is_external():
            self.state = EXTERNAL

        # If target is inactive, then set target state accordingly
        if not self.is_active():
            self.state = INACTIVE
Example #2
0
    def update(self, other):
        """
        Update my serializable fields from other/distant object.
        """
        Disk.update(self, other)
        Component.update(self, other)
        self.index = other.index

        # Compat v0.910: 'recov_info' value depends on remote version
        self.recov_info = getattr(other, 'recov_info',
                                  getattr(other, 'status_info', None))
Example #3
0
    def testUpdate(self):
        """test update a Disk instance with another one"""
        disk1 = Disk(dev='a_dev')
        disk1.dev_size = 1234
        disk2 = Disk(dev='b_dev')
        disk2.dev_size = 5678
        disk1.update(disk2)

        self.assertEqual(disk1.dev_size, disk2.dev_size)
Example #4
0
    def update(self, other):
        """
        Update my serializable fields from other/distant object.
        """
        Disk.update(self, other)
        # We used to call Component.update(). Be careful if it is updated.
        srvname = str(other.server.hostname)
        self._states[srvname] = other._states[srvname]
        if self._states[srvname] == RECOVERING:
            # Compat v0.910: 'recov_info' value depends on remote version
            self.recov_info = getattr(other, 'recov_info',
                                      getattr(other, 'status_info', None))
        self.index = other.index

        # other could be a pre shine 1.5 object, in this case, let's report it.
        if getattr(other, '_compat', False) is True:
            msg = "WARNING: shine version mismatch !!!\n" \
                  "\tPartial results may show up.\n" \
                  "\tMigrated targets may not be detected.\n" \
                  "\tTo avoid this, please synchronize shine versions."
            self.fs._handle_shine_proxy_error(srvname, msg)
Example #5
0
    def testUpdate(self):
        """test update a Disk instance with another one"""
        disk1 = Disk(dev='a_dev')
        disk1.dev_size = 1234
        disk2 = Disk(dev='b_dev')
        disk2.dev_size = 5678
        disk1.update(disk2)

        self.assertEqual(disk1.dev_size, disk2.dev_size)
Example #6
0
 def setUp(self):
     self.size = 450 * 1024 * 1024
     self.diskfile = Utils.make_disk(450)
     self.dev = self.diskfile.name
     self.disk = Disk(dev=self.dev)
Example #7
0
 def testBlockDevCheck(self):
     """test device check with a block device"""
     disk = Disk(Utils.config_options('noformat_dev'))
     disk._device_check()
     self.assertEqual(disk.dev_isblk, True)
     self.assertNotEqual(disk.dev_size, 0)
Example #8
0
class DiskLoopbackTest(unittest.TestCase):

    def format(self, *opts):
        cmd = []
        cmd += ["/usr/sbin/mkfs.lustre", "--device-size", str(self.size / 1024)]
        cmd += opts
        cmd.append(self.dev)
        process = Popen(cmd, stdout=PIPE, stderr=STDOUT)
        process.wait()
        self.assertEqual(process.returncode, 0)

    def setUp(self):
        self.size = 450 * 1024 * 1024
        self.diskfile = Utils.make_disk(450)
        self.dev = self.diskfile.name
        self.disk = Disk(dev=self.dev)

    def testLoopbackDevCheck(self):
        """test device check with a loopback device"""
        self.disk._device_check()
        self.assertEqual(self.disk.dev_isblk, False)
        self.assertEqual(self.disk.dev_size, self.size)

    @Utils.rootonly
    def testMountDataFlags(self):
        """test mountdata flag check when freshly formatted"""

        self.format("--fsname=nonreg", "--ost", "--mgsnode=127.0.0.1@lo")

        self.disk._mountdata_check()

        # first_time TRUE
        self.assertTrue(self.disk.has_first_time_flag())
        # need_index TRUE
        self.assertTrue(self.disk.has_need_index_flag())
        # update TRUE
        self.assertTrue(self.disk.has_update_flag())
        # rewrite_ldd FALSE
        self.assertFalse(self.disk.has_rewrite_ldd_flag())
        # writeconf FALSE
        self.assertFalse(self.disk.has_writeconf_flag())
        # upgrade14 FALSE
        self.assertFalse(self.disk.has_upgrade14_flag())
        # param FALSE
        self.assertFalse(self.disk.has_param_flag())

        self.assertEqual(self.disk.flags(),
                         ['need_index', 'first_time', 'update'])

    @Utils.rootonly
    def test_mountdata_label_mgs(self):
        """test mountdata check with fsname and MGS as label"""

        self.format("--fsname=nonreg", "--mgs", "--param", "sys.timeout=40")

        self.disk._mountdata_check(label_check="MGS")

        # update TRUE
        self.assertTrue(self.disk.has_update_flag())
        # rewrite_ldd FALSE
        self.assertFalse(self.disk.has_rewrite_ldd_flag())
        # writeconf FALSE
        self.assertFalse(self.disk.has_writeconf_flag())
        # upgrade14 FALSE
        self.assertFalse(self.disk.has_upgrade14_flag())
        # param FALSE
        self.assertFalse(self.disk.has_param_flag())

        # Starting from Lustre 2.4, 'need_index' and 'first_time' flags are no
        # more set
        flags = self.disk.flags()
        if 'need_index' in flags:
            flags.remove('need_index')
        if 'first_time' in flags:
            flags.remove('first_time')
        self.assertEqual(flags, ['update'])

    @Utils.rootonly
    def test_mountdata_label_ost(self):
        """test mountdata check with fsname and label for an OST"""

        self.format("--fsname=nonreg", "--ost", "--mgsnode=127.0.0.1@lo",
                    "--param", "sys.timeout=40")

        self.disk._mountdata_check(label_check="nonreg-OSTffff")

        # first_time TRUE
        self.assertTrue(self.disk.has_first_time_flag())
        # need_index TRUE
        self.assertTrue(self.disk.has_need_index_flag())
        # update TRUE
        self.assertTrue(self.disk.has_update_flag())
        # rewrite_ldd FALSE
        self.assertFalse(self.disk.has_rewrite_ldd_flag())
        # writeconf FALSE
        self.assertFalse(self.disk.has_writeconf_flag())
        # upgrade14 FALSE
        self.assertFalse(self.disk.has_upgrade14_flag())
        # param FALSE
        self.assertFalse(self.disk.has_param_flag())

        self.assertEqual(self.disk.flags(),
                         ['need_index', 'first_time', 'update'])

    @Utils.rootonly
    def testMountDataBadLabel(self):
        """test mountdata check with wrong fsname and label"""
        self.format("--fsname=nonreg","--mgs")
        self.assertRaises(DiskDeviceError, self.disk._mountdata_check,
                          label_check="MDT")
        self.assertRaises(DiskDeviceError, self.disk._mountdata_check,
                          label_check="bad_label")

    def testMountDataNoFormat(self):
        """test mountdata on a not formatted device"""
        self.assertRaises(DiskDeviceError, self.disk._mountdata_check)
Example #9
0
 def setUp(self):
     self.size = 450 * 1024 * 1024
     self.diskfile = Utils.make_disk(450)
     self.dev = self.diskfile.name
     self.disk = Disk(dev=self.dev)
Example #10
0
 def testException(self):
     """test Disk exception classes"""
     disk = Disk(dev="foo")
     exp = DiskDeviceError(disk=disk, message="Something")
     self.assertEqual(str(exp), "Something")
Example #11
0
 def testBlockDevCheck(self):
     """test device check with a block device"""
     disk = Disk(Utils.get_block_dev())
     disk._device_check()
     self.assertEqual(disk.dev_isblk, True)
     self.assertNotEqual(disk.dev_size, 0)
Example #12
0
 def testBadDevCheck(self):
     """test device check with a bad file"""
     disk = Disk(dev='/dev/tty0')
     self.assertRaises(DiskDeviceError, disk._device_check)
Example #13
0
 def testErrorDevCheck(self):
     """test device check with a wrong device"""
     disk = Disk(dev='wrong path')
     self.assertRaises(DiskDeviceError, disk._device_check)
Example #14
0
class DiskLoopbackTest(unittest.TestCase):

    def format(self, *opts):
        cmd = []
        cmd += ["/usr/sbin/mkfs.lustre", "--device-size", str(self.size / 1024)]
        cmd += opts
        cmd.append(self.dev)
        process = Popen(cmd, stdout=PIPE, stderr=STDOUT)
        process.wait()
        self.assertEqual(process.returncode, 0)

    def setUp(self):
        self.size = 450 * 1024 * 1024
        self.diskfile = Utils.make_disk(450)
        self.dev = self.diskfile.name
        self.disk = Disk(dev=self.dev)

    def testLoopbackDevCheck(self):
        """test device check with a loopback device"""
        self.disk._device_check()
        self.assertEqual(self.disk.dev_isblk, False)
        self.assertEqual(self.disk.dev_size, self.size)

    @Utils.rootonly
    def testMountDataFlags(self):
        """test mountdata flag check when freshly formatted"""

        self.format("--fsname=nonreg", "--ost", "--mgsnode=127.0.0.1@lo")

        self.disk._mountdata_check()

        # first_time TRUE
        self.assertTrue(self.disk.has_first_time_flag())
        # need_index TRUE
        self.assertTrue(self.disk.has_need_index_flag())
        # update TRUE
        self.assertTrue(self.disk.has_update_flag())
        # rewrite_ldd FALSE
        self.assertFalse(self.disk.has_rewrite_ldd_flag())
        # writeconf FALSE
        self.assertFalse(self.disk.has_writeconf_flag())
        # upgrade14 FALSE
        self.assertFalse(self.disk.has_upgrade14_flag())
        # param FALSE
        self.assertFalse(self.disk.has_param_flag())

        self.assertEqual(self.disk.flags(),
                         ['need_index', 'first_time', 'update'])

    @Utils.rootonly
    def test_mountdata_label_mgs(self):
        """test mountdata check with fsname and MGS as label"""

        self.format("--fsname=nonreg", "--mgs", "--param", "sys.timeout=40")

        self.disk._mountdata_check(label_check="MGS")

        # update TRUE
        self.assertTrue(self.disk.has_update_flag())
        # rewrite_ldd FALSE
        self.assertFalse(self.disk.has_rewrite_ldd_flag())
        # writeconf FALSE
        self.assertFalse(self.disk.has_writeconf_flag())
        # upgrade14 FALSE
        self.assertFalse(self.disk.has_upgrade14_flag())
        # param FALSE
        self.assertFalse(self.disk.has_param_flag())

        # Starting from Lustre 2.4, 'need_index' and 'first_time' flags are no
        # more set
        flags = self.disk.flags()
        if 'need_index' in flags:
            flags.remove('need_index')
        if 'first_time' in flags:
            flags.remove('first_time')
        self.assertEqual(flags, ['update'])

    @Utils.rootonly
    def test_mountdata_label_ost(self):
        """test mountdata check with fsname and label for an OST"""

        self.format("--fsname=nonreg", "--ost", "--mgsnode=127.0.0.1@lo",
                    "--param", "sys.timeout=40")

        self.disk._mountdata_check(label_check="nonreg-OSTffff")

        # first_time TRUE
        self.assertTrue(self.disk.has_first_time_flag())
        # need_index TRUE
        self.assertTrue(self.disk.has_need_index_flag())
        # update TRUE
        self.assertTrue(self.disk.has_update_flag())
        # rewrite_ldd FALSE
        self.assertFalse(self.disk.has_rewrite_ldd_flag())
        # writeconf FALSE
        self.assertFalse(self.disk.has_writeconf_flag())
        # upgrade14 FALSE
        self.assertFalse(self.disk.has_upgrade14_flag())
        # param FALSE
        self.assertFalse(self.disk.has_param_flag())

        self.assertEqual(self.disk.flags(),
                         ['need_index', 'first_time', 'update'])

    @Utils.rootonly
    def testMountDataBadLabel(self):
        """test mountdata check with wrong fsname and label"""
        self.format("--fsname=nonreg","--mgs")
        self.assertRaises(DiskDeviceError, self.disk._mountdata_check,
                          label_check="MDT")
        self.assertRaises(DiskDeviceError, self.disk._mountdata_check,
                          label_check="bad_label")

    def testMountDataNoFormat(self):
        """test mountdata on a not formatted device"""
        self.assertRaises(DiskDeviceError, self.disk._mountdata_check)
Example #15
0
 def testBlockDevCheck(self):
     """test device check with a block device"""
     disk = Disk(Utils.config_options('noformat_dev'))
     disk._device_check()
     self.assertEqual(disk.dev_isblk, True)
     self.assertNotEqual(disk.dev_size, 0)