From: Aaron Lauterer <a.lauterer@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager v2 1/4] ceph tools: set_pools: filter settings for erasure code pools
Date: Mon, 2 May 2022 10:09:25 +0200 [thread overview]
Message-ID: <20220502080928.886800-1-a.lauterer@proxmox.com> (raw)
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>
---
changes since v1:
* check if setting is present in params before removing them
* create new rados object if needed in get_pool_type
PVE/Ceph/Tools.pm | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm
index 7bd3eedc..a1458b40 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,18 @@ 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) {
+ if ($param->{$setting}) {
+ 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 +253,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 +279,13 @@ sub get_pool_properties {
return $rados->mon_command($command);
}
+sub get_pool_type {
+ my ($pool, $rados) = @_;
+ $rados = PVE::RADOS->new() if !defined($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
next reply other threads:[~2022-05-02 8:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-02 8:09 Aaron Lauterer [this message]
2022-05-02 8:09 ` [pve-devel] [PATCH manager v2 2/4] api: ceph pools: add type to returned properties Aaron Lauterer
2022-05-02 12:36 ` [pve-devel] [PATCH manager v2 follow up " Aaron Lauterer
2022-05-02 8:09 ` [pve-devel] [PATCH manager v2 3/4] ui: ceph pool edit: disable size and crush rule for erasure pools Aaron Lauterer
2022-05-02 8:09 ` [pve-devel] [PATCH manager v2 4/4] ui: ceph pools: add pool type column Aaron Lauterer
2022-05-02 13:25 ` [pve-devel] [PATCH manager v2 1/4] ceph tools: set_pools: filter settings for erasure code pools Dominik Csapak
2022-05-02 13:45 ` [pve-devel] applied-series: " Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220502080928.886800-1-a.lauterer@proxmox.com \
--to=a.lauterer@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox