[pve-devel] [PATCH guest-common 4/5] abstractconfig: add partial_fast_plug

Oguz Bektas o.bektas at proxmox.com
Tue Jan 28 16:03:20 CET 2020


allows partial fast plugging of functions as defined in the
$partial_fast_plug_option in qemuserver (and possibly lxc later on)

Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
---
 PVE/AbstractConfig.pm | 44 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/PVE/AbstractConfig.pm b/PVE/AbstractConfig.pm
index b63a744..102b12d 100644
--- a/PVE/AbstractConfig.pm
+++ b/PVE/AbstractConfig.pm
@@ -168,6 +168,50 @@ sub cleanup_pending {
     return $changes;
 }
 
+sub get_partial_fast_plug_map {
+    my ($class) = @_;
+
+    die "abstract method - implement me ";
+}
+
+sub partial_fast_plug {
+    my ($class, $conf, $opt) = @_;
+
+    my $partial_fast_plug_option = $class->get_partial_fast_plug_map();
+    my $format = $partial_fast_plug_option->{$opt}->{fmt};
+    my $fast_pluggable = $partial_fast_plug_option->{$opt}->{properties};
+
+    my $old = {};
+    if (exists($conf->{$opt})) {
+	$old = PVE::JSONSchema::parse_property_string($format, $conf->{$opt});
+    }
+    my $new = PVE::JSONSchema::parse_property_string($format, $conf->{pending}->{$opt});
+
+    my $changes_left = 0;
+
+    # merge old and new opts to iterate
+    my @all_keys = keys %{{ %$new, %$old }};
+
+    foreach my $subopt (@all_keys) {
+	my $type = $format->{$subopt}->{type};
+	if (PVE::GuestHelpers::typesafe_ne($old->{$subopt}, $new->{$subopt}, $type)) {
+	    if ($fast_pluggable->{$subopt}) {
+		$old->{$subopt} = $new->{$subopt};
+	    } else {
+		$changes_left = 1;
+	    }
+	}
+    }
+
+    # fastplug
+    if (keys %$old) {
+	$conf->{$opt} = PVE::JSONSchema::print_property_string($old, $format);
+    }
+
+    return $changes_left;
+}
+
+
 sub load_snapshot_config {
     my ($class, $vmid, $snapname) = @_;
 
-- 
2.20.1




More information about the pve-devel mailing list