[libvirt] Use of 'detach' flag with QMP command `migrate` in qemuMonitorJSONMigrate()

Kashyap Chamarthy kchamart at redhat.com
Mon Sep 28 10:30:13 UTC 2015

On Mon, Sep 28, 2015 at 10:02:48AM +0100, Daniel P. Berrange wrote:
> On Sun, Sep 27, 2015 at 06:23:15PM +0200, Kashyap Chamarthy wrote:
> > The qmp-commands.hx file from QEMU says[1]:
> > 
> >     "The user Monitor's "detach" argument is invalid in QMP and should
> >     not be used"
> That does not exactly reflect reality. 

Ah, so the doc should probably be reworded.

> The QMP parser permits "detach", but the qmp_migrate() method ignores
> it, and operates as if it were always set to 'true', which is what
> libvirt wants anyway.

I see.  Indeed, the qmp_migrate() method in QEMU explicitly checks if
'blk' and 'inc' flags are initialized, but ignores 'detach'.

> > However, when live block migration is performed, I still see that
> > libvirt sets the 'detach' boolean to 'true':

[. . .]

> > Where 'detach' means: "not wait for completion" (reading hmp-commands.hx
> > in QEMU source) or 'QEMU_MONITOR_MIGRATE_BACKGROUND' (reading
> > qemuMonitorJSONMigrate() from qemu_monitor_json.c in libvirt source).
> > 
> > 
> > Two questions:
> > 
> >   - Should the 'detach' flag be not passed in this case, because the
> >     documentation says it's not valid in QMP case?
> > 
> >   - _What_ exactly is setting the 'detach' flag explicitly in this case?
> >     Or is it default when using 'inc' flag ('--copy-storage-inc' in
> >     `virsh` parlance)?
> In HMP, the monitor would block until migration was completed.

Yep, I see so in hmp.c (in QEMU source), 'detach' defaults to

> Passing detach=true means the monitor command completes immediately
> migration has started. Libvirt passes detach=true because it wants the
> latter behaviour which was not the default with HMP.

> We've just inherited that when we ported to QMP, even though it is
> redundant.

Noted, thanks for the clarification, Dan.

[. . .]


More information about the libvir-list mailing list