On Tue, Dec 01, 2020 at 07:38:51PM +0100, Jiri Denemark wrote:
On Tue, Dec 01, 2020 at 17:53:30 +0000, Daniel P. Berrangé wrote:
> On Tue, Dec 01, 2020 at 05:09:26PM +0100, Jiri Denemark wrote:
> > On Tue, Dec 01, 2020 at 15:34:05 +0100, Peter Krempa wrote:
> > > On Mon, Nov 30, 2020 at 14:45:18 -0500, Luna Xu wrote:
> > > > Hi developers,
> > >
> > > Hi,
> > >
> > > [...]
> > >
> > > > When I start a VM with the qemu command I can specify the
-no-shutdown
> > > > flag so that my qemu process doesn't quit even if I shutdown the
VM
> > > > from the inside (issue shutdown or halt command inside VM). The VM
is
> > > > shutdown but the qemu process is not killed so that the jobs I
> > > > submitted before for example backup (drive-backup) can continue to
run
> > > > even after VM gets shutdown by the user, and I'm able to check
the
> > > > status of the job through qmp commands (by communicating with the
qemu
> > > > process).
> > >
> > > As I've noted in my reply on libvirt-users, we currently don't
support
> > > this on the shutdown part of the VM lifecycle.
> > >
> > > On the startup part you can use VIR_DOMAIN_START_PAUSED for a VM which
> > > didn't yet excecute any guest instructions.
> > >
> > > > Is anyone aware of any project that is currently implementing this
> > > > functionality? Thanks for reading.
> > >
> > > I don't think that there's anybody working on it.
> > >
> > > If you are interested in implementing the feature the idea would be to
> > > add a 'pause' action for
<on_poweroff>pause</on_poweroff> along with a
> > > new 'virDomainPausedReason' such as VIR_DOMAIN_PAUSED_POWEROFF
and
> >
> > > implement the lifecycle transition from PAUSED -> RUNNING via
> > > qemuDomainResume, which would in this case have to issue a
> > > 'system-reset' qmp command and emit the appropriate events.
> >
> > This is weird, the domain was paused just before being shut down so
> > resuming it should logically just resume the paused process and finish
> > the shutdown. On the other hand, domain shutdown as a result of calling
> > resume is weird too.
> >
> > So how about just adding a check to qemuDomainResume to report an error
> > if you try to resume a domain which was paused for shutdown?
>
> Note we have a virDomainReset() API that does a full machine/cpu reset,
> so if we're in the puased state after shutdown, then a reset followed
> by a resume is a valid way to boot the guest OS fresh. This is in fact
> how we fake graceful reboots.
Sure, I just didn't want virDomainResume to automagically do the reset
part. I guess you're suggesting that we should not report an error
because virDomainReset would not change the domain state (or would it?)
and thus reporting an error would block this scenario. So in that case,
we should not report any error and in just try to resume the CPUs. In
other words, this would mean no change is really needed in
qemuDomainResume.
We should be in the "SHUTDOWN" state when paused at the end of shutdown.
Normally you'd never see this stsate as we immediately go into SHUTOFF.
A virDomainReset should likely transition back to "RUNNING", but
"PAUSED".
So we can block on the state in virDomainResume if we're in SHUTDOWN.
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|