[pve-devel] [PATCH v2 qemu-server 5/5] hotplug_pending: allow partial fast plugging
Oguz Bektas
o.bektas at proxmox.com
Thu Mar 12 14:11:47 CET 2020
hi,
On Tue, Mar 10, 2020 at 11:25:23AM +0100, Thomas Lamprecht wrote:
> On 2/19/20 5:07 PM, Oguz Bektas wrote:
> > adds a loop after the main fastplug loop, to check if any of the options
> > are partially fast pluggable.
> >
> > these are defined in $partial_fast_plug_option
> >
> > Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
> > ---
> >
> > v1->v2:
> > * set $changes according to partial_fast_plug result as well as fast_plug result
> > * do cleanup_pending before writing fastplug changes
> >
> >
> >
> > PVE/QemuConfig.pm | 7 +++++++
> > PVE/QemuServer.pm | 19 +++++++++++++++++++
> > 2 files changed, 26 insertions(+)
> >
> > diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm
> > index 1ba728a..d1727b2 100644
> > --- a/PVE/QemuConfig.pm
> > +++ b/PVE/QemuConfig.pm
> > @@ -399,6 +399,13 @@ sub __snapshot_foreach_volume {
> >
> > PVE::QemuServer::foreach_drive($conf, $func);
> > }
> > +
> > +sub get_partial_fast_plug_option {
> > + my ($class) = @_;
> > +
> > + return $PVE::QemuServer::partial_fast_plug_option;
> > +}
> > +
> > # END implemented abstract methods from PVE::AbstractConfig
> >
> > 1;
> > diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> > index 44d0dee..8a689a0 100644
> > --- a/PVE/QemuServer.pm
> > +++ b/PVE/QemuServer.pm
> > @@ -4732,6 +4732,18 @@ my $fast_plug_option = {
> > 'tags' => 1,
> > };
> >
> > +# name of opt
> > +# -> fmt -> format variable
> > +# -> properties -> fastpluggable options hash
> > +our $partial_fast_plug_option = {
> > + agent => {
> > + fmt => $agent_fmt,
> > + properties => {
> > + fstrim_cloned_disks => 1
> > + },
> > + },
> > +};
>
> this belongs solely in the get_partial_fast_plug_option method, I do not want
> to tighten the cyclic use of both modules and it's not required here.
when we move the hash to QemuConfig it complains about $agent_fmt which
resides in QemuServer (as well as other formats which could be used
later on for partial fastplugging). that was the initial reason i added
it there because i didn't want to move the formats. should we change the
definitions from 'my' to 'our' to use them in QemuConfig? or how to
handle this better?
>
> > +
> > # hotplug changes in [PENDING]
> > # $selection hash can be used to only apply specified options, for
> > # example: { cores => 1 } (only apply changed 'cores')
> > @@ -4761,7 +4773,14 @@ sub vmconfig_hotplug_pending {
> > }
> > }
> >
> > + foreach my $opt (keys %{$conf->{pending}}) {
> > + if ($partial_fast_plug_option->{$opt}) {
> > + $changes ||= PVE::QemuConfig->partial_fast_plug($conf, $opt);
> > + }
> > + }
>
> with my followup for the guest-common series where I early return with 0 (no
> change) if no partial_fast_plug_option is set for $opt you could just do:
>
> for my $opt (keys %{$conf->{pending}}) {
> $changes ||= PVE::QemuConfig->partial_fast_plug($conf, $opt);
> }
>
> This avoids a split of logic between here and the guest common method, i.e.,
> untangles spaghetti code a bit :)
okay i'll do that
>
> > +
> > if ($changes) {
> > + PVE::QemuConfig->cleanup_pending($conf);
> > PVE::QemuConfig->write_config($vmid, $conf);
> > }
> >
> >
>
More information about the pve-devel
mailing list