[Adding the correct mailing list, removing libvirt-list-owner]
On Fri, Feb 24, 2017 at 05:35:31PM +0800, WangJie (Captain) wrote:
> Hello, I got a question here. When we create consistent active external
> snapshots with flag “VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE” , the
> qemuDomainSnapshotFSFreeze will be called firstly to freeze all filesystems
> in vm, and then create snapshots. For windows vm, freezing filesystems used
> by vss service. If IO pressure in vm is too big or internal error happened in
> vss , freezing filesytems will failed , and qemuDomainSnapshotFSFreeze
> returns 0 which meaning that no filesystems are frozen. In the function
> qemuDomainSnapshotCreateActiveExternal, libvirt creates external snapshots
> all the same in such a situation that qemuDomainSnapshotFSFreeze returns 0,
> but the created snapshots are not consistent snapshots in such a situation .
> So shouldn't we abandon creating snapshots and goto cleanup in the situation
> that qemuDomainSnapshotFSFreeze returns 0?
>
>
> The code below:
>
>
> static int
> qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
> virQEMUDriverPtr driver,
> virDomainObjPtr vm,
> virDomainSnapshotObjPtr snap,
> unsigned int flags)
> {
> virObjectEventPtr event;
> bool resume = false;
> int ret = -1;
> qemuDomainObjPrivatePtr priv = vm->privateData;
> char *xml = NULL;
> bool memory = snap->def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
> bool memory_unlink = false;
> bool atomic = !!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC);
> bool transaction = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_TRANSACTION);
> int thaw = 0; /* 1 if freeze succeeded, -1 if freeze failed */
> bool pmsuspended = false;
> virQEMUDriverConfigPtr cfg = NULL;
> int compressed;
> char *compressedpath = NULL;
>
> /* If quiesce was requested, then issue a freeze command, and a
> * counterpart thaw command when it is actually sent to agent.
> * The command will fail if the guest is paused or the guest agent
> * is not running, or is already quiesced. */
> if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE) {
> int freeze = qemuDomainSnapshotFSFreeze(driver, vm, NULL, 0);
> if (freeze < 0) {
> /* the helper reported the error */
> if (freeze == -2)
> thaw = -1; /* the command is sent but agent failed */
> goto cleanup;
> }
> thaw = 1;
> }
>
> ......
> ......
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW
--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list