all lists on 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal