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
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))
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)
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)
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 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)
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)
def testException(self): """test Disk exception classes""" disk = Disk(dev="foo") exp = DiskDeviceError(disk=disk, message="Something") self.assertEqual(str(exp), "Something")
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)
def testBadDevCheck(self): """test device check with a bad file""" disk = Disk(dev='/dev/tty0') self.assertRaises(DiskDeviceError, disk._device_check)
def testErrorDevCheck(self): """test device check with a wrong device""" disk = Disk(dev='wrong path') self.assertRaises(DiskDeviceError, disk._device_check)