[pve-devel] [PATCH container 3/3] bwlimit: add parameter to API2 calls

Thomas Lamprecht t.lamprecht at proxmox.com
Sat Mar 30 11:25:57 CET 2019


On 3/29/19 8:28 AM, Stoiko Ivanov wrote:
> for migrate_vm, clone_vm and move_volume
> 

some nits, and as for a change an actual real issue at the bottom :-)

> Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
> ---
>  src/PVE/API2/LXC.pm | 30 +++++++++++++++++++++++++++---
>  1 file changed, 27 insertions(+), 3 deletions(-)
> 
> diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm
> index 6de121f..35e6851 100644
> --- a/src/PVE/API2/LXC.pm
> +++ b/src/PVE/API2/LXC.pm
> @@ -987,6 +987,12 @@ __PACKAGE__->register_method({
>  		    " mounts. NOTE: deprecated, use 'shared' property of mount point instead.",
>  		optional => 1,
>  	    },
> +	    bwlimit => {
> +		description => "Override i/o bandwidth limit (in KiB/s).",

I/O

> +		optional => 1,
> +		type => 'number',
> +		minimum => '0',
> +	    },
>  	},
>      },
>      returns => {
> @@ -1250,6 +1256,12 @@ __PACKAGE__->register_method({
>  		description => "Target node. Only allowed if the original VM is on shared storage.",
>  		optional => 1,
>  	    }),
> +	    bwlimit => {
> +		description => "Override i/o bandwidth limit (in KiB/s).",

I/O

also, we always speak about "override a limit", but nowhere we talk about
what we override. Maybe this wording could be improved, semi-related to this
I'd add a "default" key here, something like:

default => 'cluster wide clone limit',

or respectively:
default => 'cluster wide migrate limit',


..., this could already help with making it clear what this overrides

> +		optional => 1,
> +		type => 'number',
> +		minimum => '0',
> +	    },
>          },
>      },
>      returns => {
> @@ -1434,6 +1446,7 @@ __PACKAGE__->register_method({
>  		    local $SIG{HUP} = sub { die "interrupted by signal\n"; };
>  
>  		PVE::Storage::activate_volumes($storecfg, $vollist, $snapname);
> +		my $bwlimit = extract_param($param, 'bwlimit');
>  
>  		foreach my $opt (keys %$mountpoints) {
>  		    my $mp = $mountpoints->{$opt};
> @@ -1442,8 +1455,10 @@ __PACKAGE__->register_method({
>  		    my $newvolid;
>  		    if ($fullclone->{$opt}) {
>  			print "create full clone of mountpoint $opt ($volid)\n";
> -			my $target_storage = $storage // PVE::Storage::parse_volume_id($volid);
> -			$newvolid = PVE::LXC::copy_volume($mp, $newid, $target_storage, $storecfg, $newconf, $snapname);
> +			my $source_storage = PVE::Storage::parse_volume_id($volid);
> +			my $target_storage = $storage // $source_storage;
> +			my $clonelimit = PVE::Storage::get_bandwidth_limit('clone', [$source_storage, $target_storage], $bwlimit);
> +			$newvolid = PVE::LXC::copy_volume($mp, $newid, $target_storage, $storecfg, $newconf, $snapname, $clonelimit);
>  		    } else {
>  			print "create linked clone of mount point $opt ($volid)\n";
>  			$newvolid = PVE::Storage::vdisk_clone($storecfg, $volid, $newid, $snapname);
> @@ -1690,7 +1705,13 @@ __PACKAGE__->register_method({
>  		description => 'Prevent changes if current configuration file has different SHA1 digest. This can be used to prevent concurrent modifications.',
>  		maxLength => 40,
>  		optional => 1,
> -	    }
> +	    },
> +	    bwlimit => {
> +		description => "Override i/o bandwidth limit (in KiB/s).",
> +		optional => 1,
> +		type => 'number',
> +		minimum => '0',
> +	    },
>  	},
>      },
>      returns => {
> @@ -1747,6 +1768,9 @@ __PACKAGE__->register_method({
>  
>  		eval {
>  		    PVE::Storage::activate_volumes($storage_cfg, [ $old_volid ]);
> +		    my $bwlimit = extract_param($param, 'bwlimit');
> +		    my $source_storage = PVE::Storage::parse_volume_id($old_volid);
> +		    my $movelimit = PVE::Storage::get_bandwidth_limit('move', [$source_storage, $storage], $bwlimit);

maybe also pass it to copy_volume so that it actually does something ;-)

>  		    $new_volid = PVE::LXC::copy_volume($mpdata, $vmid, $storage, $storage_cfg, $conf);
>  		    $mpdata->{volume} = $new_volid;
>  
> 





More information about the pve-devel mailing list