nova中通过FixedIntervalLoopingCall实现的定时任务

来源:互联网 发布:odn网络 s r什么意思 编辑:程序博客网 时间:2024/06/06 15:37
在nova/virt/libvirt/driver.py 中通过FixedIntervalLoopingCall 实现了一个定时任务        def _wait_for_destroy(expected_domid):            """Called at an interval until the VM is gone."""            # NOTE(vish): If the instance disappears during the destroy            #             we ignore it so the cleanup can still be            #             attempted because we would prefer destroy to            #             never fail.            try:                dom_info = self.get_info(instance)                state = dom_info.state                new_domid = dom_info.id            except exception.InstanceNotFound:                LOG.info(_LI("During wait destroy, instance disappeared."),                         instance=instance)                raise loopingcall.LoopingCallDone()            if state == power_state.SHUTDOWN:                LOG.info(_LI("Instance destroyed successfully."),                         instance=instance)//通过raise 异常的方式结束time                raise loopingcall.LoopingCallDone()//这里from oslo_service import loopingcall。通过loopingcall.FixedIntervalLoopingCall 就会得到一个time,这个time的回调函数同样是_wait_for_destroy        timer = loopingcall.FixedIntervalLoopingCall(_wait_for_destroy,                                                     old_domid)在0.5s后启动这个time,并通过wait等待其运行结束。        timer.start(interval=0.5).wait()        if kwargs['is_running']:            LOG.info(_LI("Going to destroy instance again."),                     instance=instance)            self._destroy(instance)        else:            # NOTE(GuanQiang): teardown container to avoid resource leak            if CONF.libvirt.virt_type == 'lxc':                self._teardown_container(instance)

原创粉丝点击