专栏首页后端云Ocata nova evacuate bug

Ocata nova evacuate bug

现象

执行nova evacuate操作,但是在rebuild的时候有问题,到了某个步骤之后报错”rebuild的虚机被删除了”。

原因

当实例从一个节点疏散到另一个节点的时候,在rebuild过程中check_instance_exists方法执行的过程中InstanceNotFound异常是被期待发生的。

check_instance_exists方法是用来确保实例在新的节点上不存在,若存在要引发异常的。

实际代码中的check_instance_exists在不该报InstanceNotFound异常的时候,报了此异常,在方法的except未加入捕获InstanceNotFound异常。

社区修复

nova/virt/libvirt/driver.py

def instance_exists(self, instance):
    """Efficient override of base instance_exists method."""
    try:
        self._host.get_guest(instance)
        return True
    except exception.InternalError:
        return False

修改成:

def instance_exists(self, instance):
    """Efficient override of base instance_exists method."""
    try:
        self._host.get_guest(instance)
        return True
    except (exception.InternalError, exception.InstanceNotFound):
        return False

增加测试

@mock.patch.object(host.Host, 'get_guest')
def test_instance_exists(self, mock_get_guest):
    drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
    self.assertTrue(drvr.instance_exists(None))

    mock_get_guest.side_effect = exception.InstanceNotFound
    self.assertFalse(drvr.instance_exists(None))

    mock_get_guest.side_effect = exception.InternalError
    self.assertFalse(drvr.instance_exists(None))

本文分享自微信公众号 - 后端云(opnfv-tech)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Openstack Masakari task流程源码分析

    masakari来源于日语板斧,Openstack的一个实现VM HA的开源项目。目前masakari支持下面3种故障恢复:

    后端云
  • k8s常用操作

    若出现故障,POD重生到其他的工作节点POD目录里的password.txt内容不会丢失。

    后端云
  • xshell工具在开发中的使用技巧

    这个没啥好说的,但是很实用,特别对于单显示器的情况。5.0或以上才支持,鼠标拖拽标签到屏幕某一个位置即可实现。

    后端云
  • 快速学习-Linux常用简单指令

    表示列出指定路径下的文件夹和文件的名字,如果路径没有指定则列出当前路径下的(list) 例如:在root用户的家目录中输入ls命令,则会看到以下的效果:

    cwl_java
  • 零售行业的数据体系,做成这样就对了

    面对日益艰难的市场环境,数据化管理能力将帮助塑造连锁零售企业差异化的核心竞争力,并成为保证其持续盈利的坚固基石。但对于广大的连锁零售服务商而言,要想成功落地“数...

    接地气的陈老师
  • 非对称加密Rsa数字签名Go实战

    非对称加密算法需要两个密钥:publickey和privatekey。如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,...

    Tiny熊
  • 通过 Trait 水平扩展 PHP 类功能

    从 PHP 5.4 开始,引入了一种新的代码复用方式 —— Trait,Trait 其实也是一种通过组合水平扩展类功能的机制,我们在 php_learning/...

    学院君
  • LeetCode 297. Serialize and Deserialize Binary Tree

    ShenduCC
  • 分享一次Linux任务计划crontab不执行的问题排查过程

    朋友弄了一个小项目,要我帮忙做下 Linux 系统运维,上线一段时间后,发现项目偶尔会挂掉导致服务不可用。开发朋友一时之间也没空去研究项目奔溃的根因,只好由我这...

    张戈
  • 10款软件的正式激活码!!

    用户1272546

扫码关注云+社区

领取腾讯云代金券