vmconfig_apply_pending: remove redundant write/load config calls

since we handle errors gracefully now, we don't need to write & save
config every time we change a setting.

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
This commit is contained in:
Oguz Bektas 2020-01-15 14:48:59 +01:00 committed by Fabian Grünbichler
parent 5a7f7b99b2
commit 3d48b95aa8

View File

@ -5111,20 +5111,10 @@ sub vmconfig_apply_pending {
foreach my $opt (sort keys %$pending_delete_hash) { foreach my $opt (sort keys %$pending_delete_hash) {
my $force = $pending_delete_hash->{$opt}->{force}; my $force = $pending_delete_hash->{$opt}->{force};
eval { eval {
die "internal error" if $opt =~ m/^unused/; if ($opt =~ m/^unused/) {
$conf = PVE::QemuConfig->load_config($vmid); # update/reload die "internal error";
if (!defined($conf->{$opt})) { } elsif (defined($conf->{$opt}) && is_valid_drivename($opt)) {
PVE::QemuConfig->remove_from_pending_delete($conf, $opt);
PVE::QemuConfig->write_config($vmid, $conf);
} elsif (is_valid_drivename($opt)) {
vmconfig_delete_or_detach_drive($vmid, $storecfg, $conf, $opt, $force); vmconfig_delete_or_detach_drive($vmid, $storecfg, $conf, $opt, $force);
PVE::QemuConfig->remove_from_pending_delete($conf, $opt);
delete $conf->{$opt};
PVE::QemuConfig->write_config($vmid, $conf);
} else {
PVE::QemuConfig->remove_from_pending_delete($conf, $opt);
delete $conf->{$opt};
PVE::QemuConfig->write_config($vmid, $conf);
} }
}; };
if (my $err = $@) { if (my $err = $@) {
@ -5132,35 +5122,27 @@ sub vmconfig_apply_pending {
} else { } else {
PVE::QemuConfig->remove_from_pending_delete($conf, $opt); PVE::QemuConfig->remove_from_pending_delete($conf, $opt);
delete $conf->{$opt}; delete $conf->{$opt};
PVE::QemuConfig->write_config($vmid, $conf);
} }
} }
$conf = PVE::QemuConfig->load_config($vmid); # update/reload PVE::QemuConfig->cleanup_pending($conf);
foreach my $opt (keys %{$conf->{pending}}) { # add/change foreach my $opt (keys %{$conf->{pending}}) { # add/change
$conf = PVE::QemuConfig->load_config($vmid); # update/reload next if $opt eq 'delete'; # just to be sure
eval { eval {
if (defined($conf->{$opt}) && ($conf->{$opt} eq $conf->{pending}->{$opt})) { if (defined($conf->{$opt}) && is_valid_drivename($opt)) {
# skip if nothing changed
} elsif (is_valid_drivename($opt)) {
vmconfig_register_unused_drive($storecfg, $vmid, $conf, parse_drive($opt, $conf->{$opt})) vmconfig_register_unused_drive($storecfg, $vmid, $conf, parse_drive($opt, $conf->{$opt}))
if defined($conf->{$opt});
$conf->{$opt} = $conf->{pending}->{$opt};
} else {
$conf->{$opt} = $conf->{pending}->{$opt};
} }
}; };
if (my $err = $@) { if (my $err = $@) {
$add_apply_error->($opt, $err); $add_apply_error->($opt, $err);
} else { } else {
$conf->{$opt} = delete $conf->{pending}->{$opt}; $conf->{$opt} = delete $conf->{pending}->{$opt};
PVE::QemuConfig->cleanup_pending($conf);
} }
PVE::QemuConfig->write_config($vmid, $conf);
} }
# write all changes at once to avoid unnecessary i/o
PVE::QemuConfig->write_config($vmid, $conf);
} }
my $safe_num_ne = sub { my $safe_num_ne = sub {