[pve-devel] [PATCH v4 qemu-server 09/11] migrate: add remote migration handling

Fabian Ebner f.ebner at proxmox.com
Fri Feb 4 14:45:46 CET 2022


Am 03.02.22 um 13:41 schrieb Fabian Grünbichler:
> @@ -251,22 +311,30 @@ sub scan_local_volumes {
>  	    next if @{$dl->{$storeid}} == 0;
>  
>  	    my $targetsid = PVE::QemuServer::map_id($self->{opts}->{storagemap}, $storeid);
> -	    # check if storage is available on target node
> -	    my $target_scfg = PVE::Storage::storage_check_enabled(
> -		$storecfg,
> -		$targetsid,
> -		$self->{node},
> -	    );
> -
> -	    die "content type 'images' is not available on storage '$targetsid'\n"
> -		if !$target_scfg->{content}->{images};
> +	    my $remote_bwlimit;

Nit: unused variable

> +	    my $bwlimit_sids = [$storeid];
> +	    if (!$self->{opts}->{remote}) {
> +		# check if storage is available on target node
> +		my $target_scfg = PVE::Storage::storage_check_enabled(
> +		    $storecfg,
> +		    $targetsid,
> +		    $self->{node},
> +		);
> +
> +		die "content type 'images' is not available on storage '$targetsid'\n"
> +		    if !$target_scfg->{content}->{images};
> +
> +		push @$bwlimit_sids, $targetsid;
> +	    }
>  
>  	    my $bwlimit = PVE::Storage::get_bandwidth_limit(
>  		'migration',
> -		[$targetsid, $storeid],
> +		$bwlimit_sids,
>  		$self->{opts}->{bwlimit},
>  	    );
>  
> +	    $bwlimit = $self->merge_bwlimits($bwlimit, [$targetsid]);
> +
>

----8<----

>  
> +# merges local limit '$bwlimit' and a possible remote limit
> +sub merge_bwlimits {
> +    my ($self, $bwlimit, $storages) = @_;
> +

Since both callers of this call PVE::Storage::get_bandwith_limit() right
before, it could be moved in here, and $bwlimit dropped from our parameters?

> +    if ($self->{opts}->{remote}) {
> +	# get remote bwlimit
> +	my $bwlimit_opts = {
> +	    operation => 'migration',
> +	    storages => $storages,
> +	    bwlimit => $self->{opts}->{bwlimit},

I was confused for a bit here why it's not $bwlimit, but of course we
want to re-do the (admittedly edge-case heavy) calculation on the remote
side. Might be worth a comment, but no big deal.

> +	};
> +	my $remote_bwlimit = PVE::Tunnel::write_tunnel($self->{tunnel}, 10, 'bwlimit', $bwlimit_opts);
> +	if ($remote_bwlimit && $remote_bwlimit->{bwlimit}) {
> +	    $remote_bwlimit = $remote_bwlimit->{bwlimit};
> +
> +	    $bwlimit = $remote_bwlimit
> +		if (!$bwlimit || $bwlimit > $remote_bwlimit);

Style nit: unnecessary parentheses

> +	}
> +    }
> +
> +    return $bwlimit;
> +}
> +
>  1;





More information about the pve-devel mailing list