On 7/3/24 18:29, John Levon wrote:
On Wed, Jul 03, 2024 at 09:44:47AM +0200, Michal Prívozník wrote:
>>> LIVE is not supported and thus shouldn't be in list of supported flags.
>>
>> I was a bit unclear on the test hypervisor case - in a sense everything is both
>> LIVE *and* CONFIG :)
>
> I see what you mean, but no. The fact that libvirt doesn't really store
> XMLs on disk for inactive domains doesn't necessarily mean there's no
> distinction. The aim of test driver is to mimic real life scenarios as
> closely as possible, so that when somebody is developing an app on top
> of libvirt they can use the test driver instead of spawning real VMs and
> thus test their app quickly. Therefore, the distinction between inactive
> and live XMLs must be preserved.
I get the rationale, but now we're inconsistent with our previous contribution:
10247 static int
10248 testDomainAttachDeviceLiveAndConfig(virDomainObj *vm,
10249 testDriver *driver,
10250 const char *xml,
10251 unsigned int flags)
10252 {
10253 g_autoptr(virDomainDeviceDef) devLive = NULL;
10254 unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
10255 VIR_DOMAIN_DEF_PARSE_ABI_UPDATE;
10256
10257 virCheckFlags(VIR_DOMAIN_AFFECT_LIVE, -1);
Given that the test driver does not and cannot have a persisted configuration
(there is only the in-process ->vmdef), I'm confused why you made the new code
be:
10399 virCheckFlags(VIR_DOMAIN_AFFECT_CONFIG, -1);
in testDomainUpdateDeviceFlags().
The fact that domain XML is not stored on a disk doesn't necessarily
mean it can't have inactive XML. Those are two different things. Just
consider:
virsh -c test:///default
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # domstate test
running
virsh # destroy test
Domain 'test' destroyed
virsh # domstate test
shut off
And in fact, inactive (sometimes called also config) XML can differ from
that of a running domain. Hence '--inactive' flag to 'dumpxml'. And
since the testDomainUpdateDeviceFlags() is made to error out on
VIR_DOMAIN_AFFECT_LIVE flag it makes no sense to accept the flag.
Therefore it's not listed in virCheckFlags().
There's one caveat - if the API is called with flags=0 then it means
"affect current state of the domain". flgas is then updated in
virDomainObjUpdateModificationImpact() and thus _LIVE needs to be
checked again.
For our application we actually do want to pass the LIVE flag - we never want to
modify any persistent configuration. We'd prefer not to have to carry a patch on
top for this.
Ah, I thought you're interested only in _CONFIG since that's what your
original patch implemented. But implementing live update should be
pretty trivial. It's a test driver so "hypervisor" will allow just any
change. Do you want to post a patch for that or should I?
Michal