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

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