Exemple #1
0
 def _destroy_cache(self):
     dm = Dmsetup(root_helper=self.root_helper)
     cache_name = self._cache_name
     cache_table = dm.get_table(cache_name)
     ssd_dev = self.flashcache.get_ssd_dev(cache_table)
     dm.remove_table(cache_name)
     self.flashcache.destroy(ssd_dev)
Exemple #2
0
 def rm_disk(self, disk_path):
     if os.path.islink(disk_path):
         disk_path = os.path.realpath(disk_path)
     hdd_group = FcgLinearTable(self.group_name, root_helper=self.root_helper)
     assert hdd_group.existed, "Group %s dose NOT exist..." % self.group_name
     disk = hdd_group.find_disk(disk_path)
     dm = Dmsetup(root_helper=self.root_helper)
     cached_name = self._cached_disk_name(disk.dev)
     dm.remove_table(cached_name)
     hdd_group.remove_disk(disk)
    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 delete_group(self):
        hdd_group = LinearTable(self.group_name, root_helper=self.root_helper)
        assert hdd_group.existed, "Group %s dose NOT exist..." % self.group_name
        dm = Dmsetup(root_helper=self.root_helper)
        #TODO: check for wether busy
        for disk in hdd_group.disks:
            if disk.mapper != 'error':
                cached_name = self._cached_disk_name(disk.dev)
                dm.remove_table(cached_name)

        fc = Flashcache(root_helper=self.root_helper)
        cache_name = self._cache_name()
        cache_table = dm.get_table(cache_name)
        ssd_dev = fc.get_ssd_dev(cache_table)
        dm.remove_table(cache_name)
        fc.destroy(ssd_dev)

        dm.remove_table(self._ssd_name())
        dm.remove_table(self.group_name)
Exemple #5
0
    def rm_disk(self, disk_path):
        if os.path.islink(disk_path):
            disk_path = os.path.realpath(disk_path)
        hdd_group = LinearTable(self.group_name, root_helper=self.root_helper)
        assert hdd_group.existed, "Group %s dose NOT exist..." % self.group_name
        disk = hdd_group.find_disk(disk_path)

        dm = Dmsetup(root_helper=self.root_helper)
        cached_name = self._cached_disk_name(disk.dev)

        cache_name = self._cache_name()
        cache_dev = dm.mapdev_prefix + cache_name
        cache_table = dm.get_table(cache_name)
        fc = Flashcache(root_helper=self.root_helper)
        block_size = fc.get_block_size(cache_table)
        start_blk, offset_blk = utils.sector_offset2block_offset(disk.start, disk.size, block_size)
        fc.invalid(cache_dev, start_blk, offset_blk)

        dm.remove_table(cached_name)
        hdd_group.remove_disk(disk)
Exemple #6
0
 def is_valid(self):
     dm = Dmsetup(root_helper=self.root_helper)
     existences = map(dm.is_exist,
                      [self.group_name, self._ssd_name, self._cache_name])
     if reduce(lambda x, y: x and y, existences):
         return True
     else:
         if reduce(lambda x, y: x or y, existences):
             raise Exception("Cache group has been broken!")
         else:
             return False
Exemple #7
0
class Table(object):
    def __init__(self, name, method, root_helper=''):
        self.root_helper = root_helper
        self.name = name
        self.method = method
        self.path = ''
        self.dm = Dmsetup(root_helper=root_helper)
        self.block = Blockdev(root_helper=root_helper)
        if self.dm.is_exist(self.name):
            self.existed = True
        else:
            self.existed = False

    def __str__(self):
        return NotImplementedError()

    def _parse_table(self):
        return NotImplementedError()

    def create_table(self):
        if self.existed:
            raise Exception("%s has been existed!" % self.name)
        else:
            self.path = self.dm.create_table(self.name, str(self))
            self.existed = True

    def remove_table(self):
        if not self.existed:
            raise Exception("%s does NOT exist!" % self.name)
        else:
            self.dm.remove_table(self.name)

    def reload_table(self):
        self.dm.reload_table(self.name, str(self))
Exemple #8
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)
Exemple #9
0
    def delete_group(self):
        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
        dm = Dmsetup(root_helper=self.root_helper)
        # TODO: check for wether busy
        for disk in self.hdd_group.disks:
            if disk.mapper != 'error':
                cached_name = self._cached_disk_name(disk.dev)
                dm.remove_table(cached_name)

        self._destroy_cache()

        time.sleep(0.1)

        dm.remove_table(self._ssd_name)
        dm.remove_table(self.group_name)
Exemple #10
0
    def delete_group(self):
        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
        dm = Dmsetup(root_helper=self.root_helper)
        # TODO: check for wether busy
        for disk in self.hdd_group.disks:
            if disk.mapper != 'error':
                cached_name = self._cached_disk_name(disk.dev)
                dm.remove_table(cached_name)

        self._destroy_cache()

        time.sleep(0.1)

        dm.remove_table(self._ssd_name)
        dm.remove_table(self.group_name)
Exemple #11
0
    def delete_group(self):
        hdd_group = LinearTable(self.group_name)
        assert hdd_group.existed, "Group %s dose NOT exist..." % self.group_name
        dm = Dmsetup()
        #TODO: check for wether busy
        for disk in hdd_group.disks:
            if disk.mapper != 'error':
                cached_name = self._cached_disk_name(disk.dev)
                dm.remove_table(cached_name)

        fc = Flashcache()
        cache_name = self._cache_name()
        cache_table = dm.get_table(cache_name)
        ssd_dev = fc.get_ssd_dev(cache_table)
        dm.remove_table(cache_name)
        fc.destroy(ssd_dev)

        dm.remove_table(self._ssd_name())
        dm.remove_table(self.group_name)
Exemple #12
0
 def _exists(self, fcg_table, disk):
     dm = Dmsetup(root_helper=self.root_helper)
     cached_disk_name = self._cached_disk_name(disk.dev)
     return fcg_table.exists(disk) and dm.is_exist(cached_disk_name)
Exemple #13
0
 def _exists(self, fcg_table, disk):
     dm = Dmsetup(root_helper=self.root_helper)
     cached_disk_name = self._cached_disk_name(disk.dev)
     return fcg_table.exists(disk) and dm.is_exist(cached_disk_name)