Exemple #1
0
 def _query_parent_storage(self) -> storage.Storage:
     parent_storage = storage.query_by_ident(self.parent_ident)
     if not parent_storage:
         unconsumed = journal.query_unconsumed_create(
             self._params.journal_obj)
         for jn in unconsumed:
             if jn.new_ident == self.parent_ident and jn.is_qcow:
                 """发现父快照还在日志表中,且父快照为qcow文件类型"""
                 jn.append_child_storage_ident(self.new_ident)
                 if jn.is_root:
                     _logger.info(
                         f'parent in journal and is root. <{jn.token}>')
                 else:
                     _logger.info(
                         f'parent in journal and not root. _find_parent_in_storage. <{jn.token}>'
                     )
                     parent_storage = self._find_parent_in_storage(
                         unconsumed)
                 break
         else:
             raise exc.generate_exception_and_logger(
                 'CDP快照存储父节点无效',
                 f'journal {self._params.token} parent_ident invalid {self.parent_ident}, not in storage',
                 0)
     _logger.info(f'{self} _query_parent_storage : ({parent_storage})')
     return parent_storage
Exemple #2
0
 def _query_parent_storage(self) -> storage.Storage:
     parent_storage = storage.query_by_ident(self.parent_ident)
     if not parent_storage:
         raise exc.generate_exception_and_logger(
             'QCOW快照存储父节点无效',
             f'journal {self._params.token} parent_ident invalid {self.parent_ident}, not in storage',
             0)
     _logger.info(f'{self} _query_parent_storage : ({parent_storage})')
     return parent_storage
Exemple #3
0
    def _find_parent_in_storage(
            self, unconsumed: typing.List[journal.CreateInJournal]
    ) -> storage.Storage:
        first_in_journals = self._params
        _ = xf.DataHolder()
        while _.set(first_in_journals.query_parent_in_journals(unconsumed)):
            first_in_journals = _.get()

        st = storage.query_by_ident(first_in_journals.parent_ident)
        if st:
            return st
        else:
            raise exc.generate_exception_and_logger(
                'CDP快照存储父节点无效',
                f'journal {self._params.token} parent_ident invalid {self.parent_ident}, not chain',
                0)
Exemple #4
0
    def _deal_in_storage(self, ident) -> bool:
        st = storage.query_by_ident(ident)
        if not st:
            return False

        if st.status == m.SnapshotStorage.STATUS_STORAGE:
            st.update_status(m.SnapshotStorage.STATUS_RECYCLING)
            _logger.info(
                f'set [{st}] recycling. because destroy by {self._params.token}'
            )
            return True
        elif st.status in (
                m.SnapshotStorage.STATUS_ABNORMAL,
                m.SnapshotStorage.STATUS_DELETED,
                m.SnapshotStorage.STATUS_RECYCLING,
        ):
            _logger.warning(f'{ident} status is {st}, NOT update to RECYCLING')
            return True
        else:
            raise DestroyJournal.DelayDealException()
Exemple #5
0
 def _set_storage_status(self, status):
     with lm.get_storage_locker(self.trace_msg), s.transaction():
         storage.query_by_ident(self.handle.storage_chain.last_storage_item.
                                ident).update_status(status)
Exemple #6
0
 def _query_depend_nodes(self):
     tree_ident = storage.query_by_ident(self.storage_ident).tree_ident
     storage_tree = tree.generate(tree_ident)
     return storage_tree.fetch_nodes_to_root(self.storage_ident)
 def save_work_result(self):
     if self.work_successful:
         storage.query_by_ident(self.storage_item.ident).update_status(
             m.SnapshotStorage.STATUS_DELETED)
     return self.work_successful