def exists(self, disk_path): if os.path.islink(disk_path): disk_path = os.path.realpath(disk_path) disk = Disk.from_path(disk_path, root_helper=self.root_helper) hdd_group = DmLinearTable(self.group_name, root_helper=self.root_helper) assert hdd_group.existed, "Group %s dose NOT exist..." % self.group_name return self._exists(hdd_group, disk)
def find_disk(self, the_disk): if not isinstance(the_disk, Disk): the_disk = Disk.from_path(the_disk, root_helper=self.root_helper) for disk in self.disks: if disk.major_minor == the_disk.major_minor: return disk return None
def _create_hdd_group(self): group_name = self.group_name hdd_size = '1P' hdd_sectors = utils.bytes2sectors(hdd_size) hdd = Disk.from_error(hdd_sectors, root_helper=self.root_helper) self.hdd_group = DmLinearTable.from_disks(group_name, [hdd], root_helper=self.root_helper)
def _parse_table(self): table = self.dm.get_table(self.name) disks = [] lines = table.split('\n') for line in lines: disk = Disk.from_line(line, root_helper=self.root_helper) if disk: disks.append(disk) return disks
def from_disks(name, disks, root_helper='', cls=None): if not cls: cls = DmLinearTable linear_table = cls(name, root_helper=root_helper) for disk in disks: if type(disk) == str: linear_table.disks.append(Disk.from_path(disk, root_helper=root_helper)) elif isinstance(disk, Disk): linear_table.disks.append(disk) else: raise Exception("Unknown type of %s" % disk) linear_table.create_table() return linear_table
def add_disk(self, disk_path): if os.path.islink(disk_path): disk_path = os.path.realpath(disk_path) disk = Disk.from_path(disk_path) hdd_group = LinearTable(self.group_name) assert hdd_group.existed, "Group %s dose NOT exist..." % self.group_name hdd_group.insert_disk(disk) dm = Dmsetup() cache_dev = dm.mapdev_prefix + self._cache_name() cached_table = '0 %d linear %s %d' % (disk.size, cache_dev, disk.start) cached_disk_name = self._cached_disk_name(disk.dev) dm.create_table(cached_disk_name, cached_table) return dm.mapdev_prefix + cached_disk_name
def add_disk(self, disk_path): if os.path.islink(disk_path): disk_path = os.path.realpath(disk_path) disk = Disk.from_path(disk_path, root_helper=self.root_helper) hdd_group = LinearTable(self.group_name, root_helper=self.root_helper) assert hdd_group.existed, "Group %s dose NOT exist..." % self.group_name hdd_group.insert_disk(disk) dm = Dmsetup(root_helper=self.root_helper) cache_dev = dm.mapdev_prefix + self._cache_name() cached_table = '0 %d linear %s %d' % (disk.size, cache_dev, disk.start) cached_disk_name = self._cached_disk_name(disk.dev) dm.create_table(cached_disk_name, cached_table) return dm.mapdev_prefix + cached_disk_name
def create_group(self, ssds, block_size, pattern): #TODO: roll back if failed group_name = self.group_name hdd_size = '1P' hdd_sectors = utils.bytes2sectors(hdd_size) hdd = Disk.from_error(hdd_sectors, root_helper=self.root_helper) hdd_group = LinearTable.from_disks(group_name, [hdd], root_helper=self.root_helper) ssd_name = self._ssd_name() ssd_group = LinearTable.from_disks(ssd_name, ssds, root_helper=self.root_helper) fc = Flashcache(root_helper=self.root_helper) cache_name = self._cache_name() cache_dev = fc.create(cache_name, ssd_group.path, hdd_group.path, block_size, pattern) return cache_dev
def create_group(self, ssds, block_size, pattern): #TODO: roll back if failed group_name = self.group_name dm = Dmsetup() hdd_size = '1P' hdd_sectors = utils.bytes2sectors(hdd_size) hdd = Disk.from_error(hdd_sectors) hdd_group = LinearTable.from_disks(group_name, [hdd]) ssd_name = self._ssd_name() ssd_group = LinearTable.from_disks(ssd_name, ssds) fc = Flashcache() cache_name = self._cache_name() cache_Dev = fc.create(cache_name, ssd_group.path, hdd_group.path, block_size, pattern)
def add_disk(self, disk_path): if os.path.islink(disk_path): disk_path = os.path.realpath(disk_path) disk = Disk.from_path(disk_path, root_helper=self.root_helper) if not self.hdd_group: self.hdd_group = DmLinearTable(self.group_name, root_helper=self.root_helper) assert self.hdd_group.existed, "Group %s dose NOT exist..." % self.group_name if not self.hdd_group.exists(disk): self.hdd_group.append_disk(disk) dm = Dmsetup(root_helper=self.root_helper) cached_disk_name = self._cached_disk_name(disk.dev) if not dm.is_exist(cached_disk_name): cache_dev = dm.mapdev_prefix + self._cache_name cached_table = '0 %d linear %s %d' % (disk.size, cache_dev, disk.start) dm.create_table(cached_disk_name, cached_table) return dm.mapdev_prefix + cached_disk_name