[pve-devel] [PATCH 1/1] add rollback hook and remove qemu machine code

Fabian Grünbichler f.gruenbichler at proxmox.com
Thu Sep 13 13:00:54 CEST 2018


just some phrasing inline

On Thu, Sep 13, 2018 at 12:15:02PM +0200, Dominik Csapak wrote:
> instead do the machine logic inside qemu-server package with
> the rollback hook
> 
> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
> ---
>  PVE/AbstractConfig.pm | 31 +++++++++++++++----------------
>  1 file changed, 15 insertions(+), 16 deletions(-)
> 
> diff --git a/PVE/AbstractConfig.pm b/PVE/AbstractConfig.pm
> index 11180df..1ec5b81 100644
> --- a/PVE/AbstractConfig.pm
> +++ b/PVE/AbstractConfig.pm
> @@ -285,6 +285,15 @@ sub __snapshot_delete_vol_snapshot {
>      die "abstract method - implement me\n";
>  }
>  
> +# code run  during rollback prepare and after rollback before start

called during rollback prepare, and between config rollback and starting
guest.

> +# can change config, e.g. for vmgenid
> +# use data for passing data betweend calls and for the final start

$data is shared across calls and passed to vm_start

> +sub __snapshot_rollback_hook {
> +    my ($class, $vmid, $conf, $snap, $prepare, $data) = @_;
> +
> +    return;
> +}
> +
>  # Checks whether a volume snapshot is possible for this volume.
>  sub __snapshot_rollback_vol_possible {
>      my ($class, $volume, $snapname) = @_;
> @@ -308,7 +317,7 @@ sub __snapshot_rollback_vm_stop {
>  
>  # Start the VM/CT after a rollback with restored vmstate.
>  sub __snapshot_rollback_vm_start {
> -    my ($class, $vmid, $vmstate, $forcemachine);
> +    my ($class, $vmid, $vmstate, $data);
>  
>      die "abstract method - implement me\n";
>  }
> @@ -631,6 +640,8 @@ sub snapshot_rollback {
>  	$class->__snapshot_rollback_vol_possible($volume, $snapname);
>      });
>  
> +    my $data = {};
> +
>      my $updatefn = sub {
>  
>  	$conf = $class->load_config($vmid);
> @@ -653,36 +664,24 @@ sub snapshot_rollback {
>  	} else {
>  	    die "got wrong lock\n" if !($conf->{lock} && $conf->{lock} eq 'rollback');
>  	    delete $conf->{lock};
> -	}
> -
> -	# machine only relevant for Qemu
> -	my $forcemachine;
>  
> -	if (!$prepare) {
>  	    my $unused = $class->__snapshot_rollback_get_unused($conf, $snap);
>  
>  	    foreach my $volid (@$unused) {
>  		$class->add_unused_volume($conf, $volid);
>  	    }
>  
> -	    my $has_machine_config = defined($conf->{machine});
> -
>  	    # copy snapshot config to current config
>  	    $conf = $class->__snapshot_apply_config($conf, $snap);
>  	    $conf->{parent} = $snapname;
> -
> -	    # Note: old code did not store 'machine', so we try to be smart
> -	    # and guess the snapshot was generated with kvm 1.4 (pc-i440fx-1.4).
> -	    $forcemachine = $conf->{machine} || 'pc-i440fx-1.4';
> -	    # we remove the 'machine' configuration if not explicitly specified
> -	    # in the original config.
> -	    delete $conf->{machine} if $snap->{vmstate} && !$has_machine_config;
>  	}
>  
> +	$class->__snapshot_rollback_hook($vmid, $conf, $snap, $prepare, $data);
> +
>  	$class->write_config($vmid, $conf);
>  
>  	if (!$prepare && $snap->{vmstate}) {
> -	    $class->__snapshot_rollback_vm_start($vmid, $snap->{vmstate}, $forcemachine);
> +	    $class->__snapshot_rollback_vm_start($vmid, $snap->{vmstate}, $data);
>  	}
>      };
>  
> -- 
> 2.11.0
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel




More information about the pve-devel mailing list