virsh attach/detach 的延时问题:重试不是灵药,可能是毒药
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 不是实时状态,有一定延时; 做重试之前要充分测试,重试不是灵药,可能是毒药。