记一次openstack bug 发现:RBD 驱动多层clone 超过最大clone层数后flatten的bug,使用非法内存

测试在测试产品的clone卷功能时,对接openstack 平台测试多层clone,超过默认最大clone层数(5)后自动 flatten的功能。测试过程中发现最后一层新建的clone卷一直在创建中,于是就找到了我。

打开cinder 的日志 /var/log/cinder/volumes.log ,发现cinder-volume 进程被kill了。

开始猜测,flatten 时间太长,导致cinder服务自杀?,查看卷以后发现卷才1G,于是搜下messages,看是否有异常log,一看果然有异常记录。

内存错误,菊花一紧,难道是我的锅?之前的测试flatten ,unprotect, remove 操作并没有问题。这种常见的操作如果有bug,应该早发现了。初步怀疑是openstack的锅。打开rbd 驱动找问题点附近的code,create_cloned_volume 函数。

出问题的code,src_volume 操作时候crash的,怀疑之前被释放过。

于是继续向上找问题点:果然在上面发现了src-volume被释放了,后面有继续使用。。。。

应该是防止src_volume close 之后再打开或者这里不关闭就可以了,修改后,在验证可以创建卷了。

openstack   cinder-13.0.1 附近的几个版本可能都有问题。