virsh detach 后 domblklist 有短暂延时,detach 成功后立即 detach 相同卷也能成功,两次重复 detach 后再 attach 会失败。根因是 libvirt 不是实时状态,有一定延时。
现象
已测试:连续 attach、detach、attach、detach… 反复是没有问题的。
有问题的:
- detach 后,
virsh domblklist是没有卸载的,要过一两秒,有短暂延时; - detach 成功后,立即 detach 相同的卷,居然也可以成功。预期应该是会报错提示没有对应的卷;
- 两次重复的 detach 后,再 attach,attach 命令成功,但实际没有把卷挂载上。
根因
我们挺多奇怪的问题,可能都是类似的原因造成的。
libvirt 和 qemu:
- libvirt 不是实时状态,有一定延时;
- 然后一些重复操作,看上去是幂等的,但是它对后续操作有影响(其实也是 libvirt 的 bug)。
比如之前有过 domblk 和 qmp 查询卷不一样的情况,造成后续丢数据等。
设计思考
做重试之前,要充分测试。
- 是否达到了重试条件(状态、时间);
- 这个动作是否幂等;
- 对后续动作是否有影响。
重试不是灵药,可能是毒药。
小结
- virsh detach 后 domblklist 有短暂延时,要过一两秒;
- detach 成功后立即 detach 相同卷也能成功,不符合预期;
- 两次重复 detach 后再 attach,attach 成功但实际没挂载上;
- 根因是 libvirt 不是实时状态,有一定延时;
- 做重试之前要充分测试,重试不是灵药,可能是毒药。