public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools
@ 2022-04-29 14:16 Aaron Lauterer
  2022-04-29 14:16 ` [pve-devel] [PATCH manager 2/4] api: ceph pools: add type to returned properties Aaron Lauterer
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Aaron Lauterer @ 2022-04-29 14:16 UTC (permalink / raw)
  To: pve-devel

Erasure code pools cannot change certain settings after creation.
Trying to set them will cause errors on Cephs side.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
---
 PVE/Ceph/Tools.pm | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm
index 7bd3eedc..65589820 100644
--- a/PVE/Ceph/Tools.pm
+++ b/PVE/Ceph/Tools.pm
@@ -205,7 +205,7 @@ sub check_ceph_enabled {
 }
 
 my $set_pool_setting = sub {
-    my ($pool, $setting, $value) = @_;
+    my ($pool, $setting, $value, $rados) = @_;
 
     my $command;
     if ($setting eq 'application') {
@@ -224,7 +224,7 @@ my $set_pool_setting = sub {
 	};
     }
 
-    my $rados = PVE::RADOS->new();
+    $rados = PVE::RADOS->new() if !$rados;
     eval { $rados->mon_command($command); };
     return $@ ? $@ : undef;
 };
@@ -232,6 +232,16 @@ my $set_pool_setting = sub {
 sub set_pool {
     my ($pool, $param) = @_;
 
+    my $rados = PVE::RADOS->new();
+
+    if (get_pool_type($pool, $rados) eq 'erasure') {
+	#remove parameters that cannot be changed for erasure coded pools
+	my $ignore_params = ['size', 'crush_rule'];
+	for my $setting (@$ignore_params) {
+	    print "cannot set '${setting}' for erasure coded pool\n";
+	    delete $param->{$setting};
+	}
+    }
     # by default, pool size always resets min_size, so set it as first item
     # https://tracker.ceph.com/issues/44862
     my $keys = [ grep { $_ ne 'size' } sort keys %$param ];
@@ -241,7 +251,7 @@ sub set_pool {
 	my $value = $param->{$setting};
 
 	print "pool $pool: applying $setting = $value\n";
-	if (my $err = $set_pool_setting->($pool, $setting, $value)) {
+	if (my $err = $set_pool_setting->($pool, $setting, $value, $rados)) {
 	    print "$err";
 	} else {
 	    delete $param->{$setting};
@@ -267,6 +277,12 @@ sub get_pool_properties {
     return $rados->mon_command($command);
 }
 
+sub get_pool_type {
+    my ($pool, $rados) = @_;
+    return 'erasure' if get_pool_properties($pool, $rados)->{erasure_code_profile};
+    return 'replicated';
+}
+
 sub create_pool {
     my ($pool, $param, $rados) = @_;
     $rados = PVE::RADOS->new() if !defined($rados);
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH manager 2/4] api: ceph pools: add type to returned properties
  2022-04-29 14:16 [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Aaron Lauterer
@ 2022-04-29 14:16 ` Aaron Lauterer
  2022-05-02  7:11   ` Dominik Csapak
  2022-04-29 14:16 ` [pve-devel] [PATCH manager 3/4] ui: ceph pool edit: disable size and crush rule for erasure pools Aaron Lauterer
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Aaron Lauterer @ 2022-04-29 14:16 UTC (permalink / raw)
  To: pve-devel

The osd dump already contains the pool type in numerical format.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
---
 PVE/API2/Ceph/Pools.pm | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/PVE/API2/Ceph/Pools.pm b/PVE/API2/Ceph/Pools.pm
index efdee360..b93f87e4 100644
--- a/PVE/API2/Ceph/Pools.pm
+++ b/PVE/API2/Ceph/Pools.pm
@@ -66,6 +66,11 @@ __PACKAGE__->register_method ({
 		    type => 'integer',
 		    title => 'Size',
 		},
+		type => {
+		    type => 'string',
+		    title => 'Type',
+		    enum => ['replicated', 'erasure', 'unknown'],
+		},
 		min_size => {
 		    type => 'integer',
 		    title => 'Min Size',
@@ -185,6 +190,15 @@ __PACKAGE__->register_method ({
 		$d->{bytes_used} = $s->{bytes_used};
 		$d->{percent_used} = $s->{percent_used};
 	    }
+
+	    if ($e->{type} == 1) {
+		$d->{type} = 'replicated';
+	    } elsif ($e->{type} == 3) {
+		$d->{type} = 'erasure';
+	    } else {
+		# we should never get here, but better be safe
+		$d->{type} = 'unknown';
+	    }
 	    push @$data, $d;
 	}
 
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH manager 3/4] ui: ceph pool edit: disable size and crush rule for erasure pools
  2022-04-29 14:16 [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Aaron Lauterer
  2022-04-29 14:16 ` [pve-devel] [PATCH manager 2/4] api: ceph pools: add type to returned properties Aaron Lauterer
@ 2022-04-29 14:16 ` Aaron Lauterer
  2022-04-29 14:16 ` [pve-devel] [PATCH manager 4/4] ui: ceph pools: add pool type column Aaron Lauterer
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Aaron Lauterer @ 2022-04-29 14:16 UTC (permalink / raw)
  To: pve-devel

They cannot be changed after pool creation for erasure coded pools

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
---
 www/manager6/ceph/Pool.js | 44 ++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 15 deletions(-)

diff --git a/www/manager6/ceph/Pool.js b/www/manager6/ceph/Pool.js
index 41df216e..16b903ce 100644
--- a/www/manager6/ceph/Pool.js
+++ b/www/manager6/ceph/Pool.js
@@ -19,21 +19,28 @@ Ext.define('PVE.CephPoolInputPanel', {
 	    allowBlank: false,
 	},
 	{
-	    xtype: 'proxmoxintegerfield',
+	    xtype: 'pmxDisplayEditField',
+	    cbind: {
+		editable: '{!isErasure}',
+	    },
 	    fieldLabel: gettext('Size'),
 	    name: 'size',
-	    value: 3,
-	    minValue: 2,
-	    maxValue: 7,
-	    allowBlank: false,
-	    listeners: {
-		change: function(field, val) {
-		    let size = Math.round(val / 2);
-		    if (size > 1) {
-			field.up('inputpanel').down('field[name=min_size]').setValue(size);
-		    }
+	    editConfig: {
+		xtype: 'proxmoxintegerfield',
+		value: 3,
+		minValue: 2,
+		maxValue: 7,
+		allowBlank: false,
+		listeners: {
+		    change: function(field, val) {
+			let size = Math.round(val / 2);
+			if (size > 1) {
+			    field.up('inputpanel').down('field[name=min_size]').setValue(size);
+			}
+		    },
 		},
 	    },
+
 	},
     ],
     column2: [
@@ -101,14 +108,18 @@ Ext.define('PVE.CephPoolInputPanel', {
 	    hidden: true,
 	},
 	{
-	    xtype: 'pveCephRuleSelector',
-	    fieldLabel: 'Crush Rule', // do not localize
-	    name: 'crush_rule',
+	    xtype: 'pmxDisplayEditField',
 	    cbind: {
+		editable: '{!isErasure}',
 		nodename: '{nodename}',
 		isCreate: '{isCreate}',
 	    },
-	    allowBlank: false,
+	    fieldLabel: 'Crush Rule', // do not localize
+	    name: 'crush_rule',
+	    editConfig: {
+		xtype: 'pveCephRuleSelector',
+		allowBlank: false,
+	    },
 	},
 	{
 	    xtype: 'proxmoxintegerfield',
@@ -203,6 +214,7 @@ Ext.define('PVE.Ceph.PoolEdit', {
 	cbind: {
 	    nodename: '{nodename}',
 	    pool_name: '{pool_name}',
+	    isErasure: '{isErasure}',
 	    isCreate: '{isCreate}',
 	},
     }],
@@ -354,6 +366,7 @@ Ext.define('PVE.node.Ceph.PoolList', {
 		title: gettext('Edit') + ': Ceph Pool',
 		nodename: nodename,
 		pool_name: rec.data.pool_name,
+		isErasure: rec.data.type === 'erasure',
 		autoShow: true,
 		listeners: {
 		    destroy: () => rstore.load(),
@@ -371,6 +384,7 @@ Ext.define('PVE.node.Ceph.PoolList', {
 			Ext.create('PVE.Ceph.PoolEdit', {
 			    title: gettext('Create') + ': Ceph Pool',
 			    isCreate: true,
+			    isErasure: false,
 			    nodename: nodename,
 			    autoShow: true,
 			    listeners: {
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH manager 4/4] ui: ceph pools: add pool type column
  2022-04-29 14:16 [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Aaron Lauterer
  2022-04-29 14:16 ` [pve-devel] [PATCH manager 2/4] api: ceph pools: add type to returned properties Aaron Lauterer
  2022-04-29 14:16 ` [pve-devel] [PATCH manager 3/4] ui: ceph pool edit: disable size and crush rule for erasure pools Aaron Lauterer
@ 2022-04-29 14:16 ` Aaron Lauterer
  2022-05-02  7:10 ` [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Dominik Csapak
  2022-05-02  7:13 ` Dominik Csapak
  4 siblings, 0 replies; 8+ messages in thread
From: Aaron Lauterer @ 2022-04-29 14:16 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
---
 www/manager6/ceph/Pool.js | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/www/manager6/ceph/Pool.js b/www/manager6/ceph/Pool.js
index 16b903ce..a1f008d1 100644
--- a/www/manager6/ceph/Pool.js
+++ b/www/manager6/ceph/Pool.js
@@ -240,6 +240,13 @@ Ext.define('PVE.node.Ceph.PoolList', {
 	    sortable: true,
 	    dataIndex: 'pool_name',
 	},
+	{
+	    text: gettext('Type'),
+	    minWidth: 100,
+	    flex: 1,
+	    dataIndex: 'type',
+	    hidden: true,
+	},
 	{
 	    text: gettext('Size') + '/min',
 	    minWidth: 100,
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools
  2022-04-29 14:16 [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Aaron Lauterer
                   ` (2 preceding siblings ...)
  2022-04-29 14:16 ` [pve-devel] [PATCH manager 4/4] ui: ceph pools: add pool type column Aaron Lauterer
@ 2022-05-02  7:10 ` Dominik Csapak
  2022-05-02  7:13 ` Dominik Csapak
  4 siblings, 0 replies; 8+ messages in thread
From: Dominik Csapak @ 2022-05-02  7:10 UTC (permalink / raw)
  To: Proxmox VE development discussion, Aaron Lauterer

one minor nit inline

On 4/29/22 16:16, Aaron Lauterer wrote:
> Erasure code pools cannot change certain settings after creation.
> Trying to set them will cause errors on Cephs side.
> 
> Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
> ---
>   PVE/Ceph/Tools.pm | 22 +++++++++++++++++++---
>   1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm
> index 7bd3eedc..65589820 100644
> --- a/PVE/Ceph/Tools.pm
> +++ b/PVE/Ceph/Tools.pm
> @@ -205,7 +205,7 @@ sub check_ceph_enabled {
>   }
>   
>   my $set_pool_setting = sub {
> -    my ($pool, $setting, $value) = @_;
> +    my ($pool, $setting, $value, $rados) = @_;
>   
>       my $command;
>       if ($setting eq 'application') {
> @@ -224,7 +224,7 @@ my $set_pool_setting = sub {
>   	};
>       }
>   
> -    my $rados = PVE::RADOS->new();
> +    $rados = PVE::RADOS->new() if !$rados;
>       eval { $rados->mon_command($command); };
>       return $@ ? $@ : undef;
>   };
> @@ -232,6 +232,16 @@ my $set_pool_setting = sub {
>   sub set_pool {
>       my ($pool, $param) = @_;
>   
> +    my $rados = PVE::RADOS->new();
> +
> +    if (get_pool_type($pool, $rados) eq 'erasure') {
> +	#remove parameters that cannot be changed for erasure coded pools
> +	my $ignore_params = ['size', 'crush_rule'];
> +	for my $setting (@$ignore_params) {
> +	    print "cannot set '${setting}' for erasure coded pool\n";

i'd only print that line if there was actually a value there, else
every one gets those warnings even if they did not attempt to set e.g.
the size

> +	    delete $param->{$setting};
> +	}
> +    }
>       # by default, pool size always resets min_size, so set it as first item
>       # https://tracker.ceph.com/issues/44862
>       my $keys = [ grep { $_ ne 'size' } sort keys %$param ];
> @@ -241,7 +251,7 @@ sub set_pool {
>   	my $value = $param->{$setting};
>   
>   	print "pool $pool: applying $setting = $value\n";
> -	if (my $err = $set_pool_setting->($pool, $setting, $value)) {
> +	if (my $err = $set_pool_setting->($pool, $setting, $value, $rados)) {
>   	    print "$err";
>   	} else {
>   	    delete $param->{$setting};
> @@ -267,6 +277,12 @@ sub get_pool_properties {
>       return $rados->mon_command($command);
>   }
>   
> +sub get_pool_type {
> +    my ($pool, $rados) = @_;
> +    return 'erasure' if get_pool_properties($pool, $rados)->{erasure_code_profile};
> +    return 'replicated';
> +}
> +
>   sub create_pool {
>       my ($pool, $param, $rados) = @_;
>       $rados = PVE::RADOS->new() if !defined($rados);





^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH manager 2/4] api: ceph pools: add type to returned properties
  2022-04-29 14:16 ` [pve-devel] [PATCH manager 2/4] api: ceph pools: add type to returned properties Aaron Lauterer
@ 2022-05-02  7:11   ` Dominik Csapak
  2022-05-02  7:19     ` Aaron Lauterer
  0 siblings, 1 reply; 8+ messages in thread
From: Dominik Csapak @ 2022-05-02  7:11 UTC (permalink / raw)
  To: Proxmox VE development discussion, Aaron Lauterer

one nit inline

On 4/29/22 16:16, Aaron Lauterer wrote:
> The osd dump already contains the pool type in numerical format.
> 
> Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
> ---
>   PVE/API2/Ceph/Pools.pm | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)
> 
> diff --git a/PVE/API2/Ceph/Pools.pm b/PVE/API2/Ceph/Pools.pm
> index efdee360..b93f87e4 100644
> --- a/PVE/API2/Ceph/Pools.pm
> +++ b/PVE/API2/Ceph/Pools.pm
> @@ -66,6 +66,11 @@ __PACKAGE__->register_method ({
>   		    type => 'integer',
>   		    title => 'Size',
>   		},
> +		type => {
> +		    type => 'string',
> +		    title => 'Type',
> +		    enum => ['replicated', 'erasure', 'unknown'],
> +		},
>   		min_size => {
>   		    type => 'integer',
>   		    title => 'Min Size',
> @@ -185,6 +190,15 @@ __PACKAGE__->register_method ({
>   		$d->{bytes_used} = $s->{bytes_used};
>   		$d->{percent_used} = $s->{percent_used};
>   	    }
> +
> +	    if ($e->{type} == 1) {
> +		$d->{type} = 'replicated';
> +	    } elsif ($e->{type} == 3) {
> +		$d->{type} = 'erasure';
> +	    } else {
> +		# we should never get here, but better be safe
> +		$d->{type} = 'unknown';
> +	    }

i remember we talked off-list about those '1' / '3' values,
but is there any reference we can use to document these?
(as comment or commit message)

even if it's only a link to some github or refence to a file in
some commit hash of ceph, that way we can easily look it up
if it changes

also what would be value '2' ?

>   	    push @$data, $d;
>   	}
>   





^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools
  2022-04-29 14:16 [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Aaron Lauterer
                   ` (3 preceding siblings ...)
  2022-05-02  7:10 ` [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Dominik Csapak
@ 2022-05-02  7:13 ` Dominik Csapak
  4 siblings, 0 replies; 8+ messages in thread
From: Dominik Csapak @ 2022-05-02  7:13 UTC (permalink / raw)
  To: Proxmox VE development discussion, Aaron Lauterer

aside from the 2 nits, consider this

Reviewed-By: Dominik Csapak <d.csapak@proxmox.com>
Tested-By: Dominik Csapak <d.csapak@proxmox.com>




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH manager 2/4] api: ceph pools: add type to returned properties
  2022-05-02  7:11   ` Dominik Csapak
@ 2022-05-02  7:19     ` Aaron Lauterer
  0 siblings, 0 replies; 8+ messages in thread
From: Aaron Lauterer @ 2022-05-02  7:19 UTC (permalink / raw)
  To: Dominik Csapak, Proxmox VE development discussion



On 5/2/22 09:11, Dominik Csapak wrote:
> one nit inline
> 
> On 4/29/22 16:16, Aaron Lauterer wrote:
>> The osd dump already contains the pool type in numerical format.
>>
>> Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
>> ---
>>   PVE/API2/Ceph/Pools.pm | 14 ++++++++++++++
>>   1 file changed, 14 insertions(+)
>>
>> diff --git a/PVE/API2/Ceph/Pools.pm b/PVE/API2/Ceph/Pools.pm
>> index efdee360..b93f87e4 100644
>> --- a/PVE/API2/Ceph/Pools.pm
>> +++ b/PVE/API2/Ceph/Pools.pm
>> @@ -66,6 +66,11 @@ __PACKAGE__->register_method ({
>>               type => 'integer',
>>               title => 'Size',
>>           },
>> +        type => {
>> +            type => 'string',
>> +            title => 'Type',
>> +            enum => ['replicated', 'erasure', 'unknown'],
>> +        },
>>           min_size => {
>>               type => 'integer',
>>               title => 'Min Size',
>> @@ -185,6 +190,15 @@ __PACKAGE__->register_method ({
>>           $d->{bytes_used} = $s->{bytes_used};
>>           $d->{percent_used} = $s->{percent_used};
>>           }
>> +
>> +        if ($e->{type} == 1) {
>> +        $d->{type} = 'replicated';
>> +        } elsif ($e->{type} == 3) {
>> +        $d->{type} = 'erasure';
>> +        } else {
>> +        # we should never get here, but better be safe
>> +        $d->{type} = 'unknown';
>> +        }
> 
> i remember we talked off-list about those '1' / '3' values,
> but is there any reference we can use to document these?
> (as comment or commit message)
> 
> even if it's only a link to some github or refence to a file in
> some commit hash of ceph, that way we can easily look it up
> if it changes

sure
> 
> also what would be value '2' ?

beats me, didn't find anything ;)

> 
>>           push @$data, $d;
>>       }
> 
> 




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-05-02  7:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-29 14:16 [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Aaron Lauterer
2022-04-29 14:16 ` [pve-devel] [PATCH manager 2/4] api: ceph pools: add type to returned properties Aaron Lauterer
2022-05-02  7:11   ` Dominik Csapak
2022-05-02  7:19     ` Aaron Lauterer
2022-04-29 14:16 ` [pve-devel] [PATCH manager 3/4] ui: ceph pool edit: disable size and crush rule for erasure pools Aaron Lauterer
2022-04-29 14:16 ` [pve-devel] [PATCH manager 4/4] ui: ceph pools: add pool type column Aaron Lauterer
2022-05-02  7:10 ` [pve-devel] [PATCH manager 1/4] ceph tools: set_pools: filter settings for erasure code pools Dominik Csapak
2022-05-02  7:13 ` Dominik Csapak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal