On Tue, 15 Mar 2011 15:55:51 -0600
Eric Blake <eblake(a)redhat.com> wrote:
On 03/02/2011 06:11 PM, KAMEZAWA Hiroyuki wrote:
>>From f7a997e3cd58cfac81e131afdd20c3691267831d Mon Sep 17 00:00:00 2001
> From: KAMEZAWA Hiroyuki <kamezawa.hiroyu(a)jp.fujitsu.com>
> Date: Thu, 3 Mar 2011 09:43:07 +0900
> Subject: [PATCH 3/5] libivrt/qemu - support persistent modification of devices.
>
> Now, virsh attach-***/detach-*** has --persistent option and
> it can update XML definition of inactive domains.
Hmm, looking at the recent additions of other virsh persistent support,
the single --persistent flag of virsh attach-{device,disk,interface} are
a bit limited; --persistent means the same thing as --config, but we may
need to add a counterpart --live option that specifies live only. But
cleaning up virsh to better expose the underlying flags is a separate
patch; this patch only deals with implementing the flags internally.
yes.
> Now, disk and nic are supported in Xen, but none in qemu.
It would be nice to get all devices supported, but incremental is better
than nothing at all.
>
> This patch adds a function for permanent modification for qemu.
> Following patches will add disk/network suport.
>
> TODO:
> - finally, need to do hotplug + XML modification for active domain.
>
> Changelog v3->v4
> - fixed trailing white spaces.
> - splitted into 2 part and this patch only contains wrappers.
> Changelog v2->v3:
> - clean ups.
> - handle all VIR_DOMAIN_DEVICE_MODIFY_XXX flags.
> ---
> src/qemu/qemu_driver.c | 143 ++++++++++++++++++++++++++++++++++++++++++++----
> 1 files changed, 131 insertions(+), 12 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index c9095bb..3248cdc 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -4099,16 +4099,131 @@ cleanup:
> return ret;
> }
>
> -static int qemudDomainAttachDeviceFlags(virDomainPtr dom,
> +/*
> + * Attach a device given by XML, the change will be persistent
> + * and domain XML definition file is updated.
> + */
> +static int qemuDomainAttachDevicePersistent(virDomainDefPtr vmdef,
> + virDomainDeviceDefPtr newdev)
> +{
> +
> + /* At first, check device confliction */
s/device confliction/for device support/
will fix.
> + switch(newdev->type) {
> + default:
> + qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> + _("Sorry, the device is not suppored for now"));
s/suppored/supported/ (twice)
will fix. ....I'll use spell checker.
> +
> +static int qemuDomainModifyDevicePersistent(virDomainPtr dom,
> const char *xml,
Indentation is not consistent.
ok.
> - unsigned int flags) {
> - if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
> - qemuReportError(VIR_ERR_OPERATION_INVALID,
> - "%s", _("cannot modify the persistent
configuration of a domain"));
> + unsigned int attach, int flags)
> +{
> + struct qemud_driver *driver;
> + virDomainDeviceDefPtr device;
> + virDomainDefPtr vmdef;
> + virDomainObjPtr vm;
> + int ret = -1;
> +
> + if (!dom || !dom->conn || !dom->name || !xml) {
> + qemuReportError(VIR_ERR_INTERNAL_ERROR,
> + _("internal error : %s"), __FUNCTION__);
> + return -1;
> + }
> + /*
> + * When both of MODIFY_CONFIG and MODIFY_LIVE is specified at the same time,
> + * return error for now. We should support this later.
> + */
> + if (flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) {
> + qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> + _("Now, cannot modify alive domain and its definition
"
> + "at the same time."));
It shouldn't be too hard to attempt supporting this now - after all, we
already did just that with Taku Izumi's patch for virsh setmem.
qemudDomainSetMemoryFlags can be a good reference point for how to
implement a command that first validates all conditions required by the
flags, then modifies the live configuration if requested and still live,
then modifies the persistent configuration if requested.
Can we do it in atomic ?
I think there have been enough findings already (Wen's feedback
has also
been useful), as well as quite a bit of upstream churn that will require
rebasing aspects of your patch, that I'll wait for v5 of this series; if
you use 'git send-email --subject-prefix=PATCHv5', that will make it
easier to recognize from the subject line that it is a resend.
ok, will do.
Thanks,
-Kame