On 6/11/21 9:40 AM, Huangzhichao wrote:
Hi Everyone, We find migration capabilities is not reset after restarting libvirtd, it would cause problem in the following scene: Version: libvirt release 7.4.0 Step 1. create a VM and query migration capabilities, mark the return content as “Cap A”. Step 2. stop the source libvirtd service when executing live migration, then migration failed. Step 3. restart the source libvirtd service, then query migration capabilities, mark the return content as “Cap B”. “Cap A” is different from “Cap B”, because the source libvirtd service would set migration capabilities when executing live migration. We find that there is a patch may cause this problem. Link: https://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=a1dec315c9ad87a198245db0077ef80778621392 <https://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=a1dec315c9ad87a198245db0077ef80778621392>
I'm not sure this patch is the culprit here. IMO the problem seems to be with the refresh of priv->migrationCaps bitmap in the situation you described. The migrationCaps from the failed migration are being restored in libvirtd restart.
When we roll back this patch, “CAP A” would be the same as “CAP B”. Do you have any suggestion ?
I suggest looking into how priv->migrationCaps is being fetched in that scenario. qemuMigrationCapsCheck() seems like a good place to start digging since it's the only place where priv->migrationCaps bits are being set. Thanks, Daniel
Thanks.