示例#1
0
 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)
示例#2
0
 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
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
 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
示例#6
0
 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
示例#7
0
    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
示例#8
0
    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
示例#9
0
    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
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
 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
示例#13
0
 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)