From: xie xingguo Date: Wed, 28 Jun 2017 10:10:32 +0000 (+0800) Subject: os/bluestore: allow user to unset pool compression_mode[algorithm] properly X-Git-Tag: ses5-milestone8~1^2~11^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=db42eef59d687a6a6d3ef578e5bce9ea56314af8;p=ceph.git os/bluestore: allow user to unset pool compression_mode[algorithm] properly A string-typed pool option requires user pass in a empty string to do a valid cancellation, but the "osd pool set " command won't allow it. E.g.: ./bin/ceph osd pool set rbd compression_mode Invalid command: missing required parameter val() Since we already use the "unset" keyword to cancel the csum_type setting, we could simply extends the above mechanism for compression_mode and compression_algorithm too. E.g.: ./bin/ceph osd pool set rbd compression_algorithm zlib set pool 0 compression_algorithm to zlib ./bin/ceph osd pool set rbd compression_algorithm unset unset pool 0 compression_algorithm Signed-off-by: xie xingguo --- diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index d8546e0c42442..a22d5661d264d 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -1944,6 +1944,40 @@ function test_mon_osd_pool_set() ceph osd pool delete $TEST_POOL_GETSET $TEST_POOL_GETSET --yes-i-really-really-mean-it ceph osd pool get rbd crush_rule | grep 'crush_rule: ' + + ceph osd pool get $TEST_POOL_GETSET compression_mode | expect_false grep '.' + ceph osd pool set $TEST_POOL_GETSET compression_mode aggressive + ceph osd pool get $TEST_POOL_GETSET compression_mode | grep 'aggressive' + ceph osd pool set $TEST_POOL_GETSET compression_mode unset + ceph osd pool get $TEST_POOL_GETSET compression_mode | expect_false grep '.' + + ceph osd pool get $TEST_POOL_GETSET compression_algorithm | expect_false grep '.' + ceph osd pool set $TEST_POOL_GETSET compression_algorithm zlib + ceph osd pool get $TEST_POOL_GETSET compression_algorithm | grep 'zlib' + ceph osd pool set $TEST_POOL_GETSET compression_algorithm unset + ceph osd pool get $TEST_POOL_GETSET compression_algorithm | expect_false grep '.' + + ceph osd pool get $TEST_POOL_GETSET compression_required_ratio | expect_false grep '.' + expect_false ceph osd pool set $TEST_POOL_GETSET compression_required_ratio 1.1 + expect_false ceph osd pool set $TEST_POOL_GETSET compression_required_ratio -.2 + ceph osd pool set $TEST_POOL_GETSET compression_required_ratio .2 + ceph osd pool get $TEST_POOL_GETSET compression_required_ratio | grep '.2' + ceph osd pool set $TEST_POOL_GETSET compression_required_ratio 0 + ceph osd pool get $TEST_POOL_GETSET compression_required_ratio | expect_false grep '.' + + ceph osd pool get $TEST_POOL_GETSET csum_type | expect_false grep '.' + ceph osd pool set $TEST_POOL_GETSET csum_type crc32c + ceph osd pool get $TEST_POOL_GETSET csum_type | grep 'crc32c' + ceph osd pool set $TEST_POOL_GETSET csum_type unset + ceph osd pool get $TEST_POOL_GETSET csum_type | expect_false grep '.' + + for size in compression_max_blob_size compression_min_blob_size csum_max_block csum_min_block; do + ceph osd pool get $TEST_POOL_GETSET $size | expect_false grep '.' + ceph osd pool set $TEST_POOL_GETSET $size 100 + ceph osd pool get $TEST_POOL_GETSET $size | grep '100' + ceph osd pool set $TEST_POOL_GETSET $size 0 + ceph osd pool get $TEST_POOL_GETSET $size | expect_false grep '.' + done } function test_mon_osd_tiered_pool_set() diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index d9140b92eb122..b8b988a972c3c 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -6136,17 +6136,22 @@ int OSDMonitor::prepare_command_pool_set(map &cmdmap, return -EINVAL; } } else if (pool_opts_t::is_opt_name(var)) { + bool unset = val == "unset"; if (var == "compression_mode") { - auto cmode = Compressor::get_comp_mode_type(val); - if (!cmode) { - ss << "unrecognized compression mode '" << val << "'"; - return -EINVAL; + if (!unset) { + auto cmode = Compressor::get_comp_mode_type(val); + if (!cmode) { + ss << "unrecognized compression mode '" << val << "'"; + return -EINVAL; + } } } else if (var == "compression_algorithm") { - auto alg = Compressor::get_comp_alg_type(val); - if (!alg) { - ss << "unrecognized compression_algorithm '" << val << "'"; - return -EINVAL; + if (!unset) { + auto alg = Compressor::get_comp_alg_type(val); + if (!alg) { + ss << "unrecognized compression_algorithm '" << val << "'"; + return -EINVAL; + } } } else if (var == "compression_required_ratio") { if (floaterr.length()) { @@ -6158,7 +6163,7 @@ int OSDMonitor::prepare_command_pool_set(map &cmdmap, return -EINVAL; } } else if (var == "csum_type") { - auto t = val != "unset" ? Checksummer::get_csum_string_type(val) : 0; + auto t = unset ? 0 : Checksummer::get_csum_string_type(val); if (t < 0 ) { ss << "unrecognized csum_type '" << val << "'"; return -EINVAL; @@ -6179,7 +6184,7 @@ int OSDMonitor::prepare_command_pool_set(map &cmdmap, pool_opts_t::opt_desc_t desc = pool_opts_t::get_opt_desc(var); switch (desc.type) { case pool_opts_t::STR: - if (val.empty()) { + if (unset) { p.opts.unset(desc.key); } else { p.opts.set(desc.key, static_cast(val)); @@ -6214,7 +6219,11 @@ int OSDMonitor::prepare_command_pool_set(map &cmdmap, ss << "unrecognized variable '" << var << "'"; return -EINVAL; } - ss << "set pool " << pool << " " << var << " to " << val; + if (val != "unset") { + ss << "set pool " << pool << " " << var << " to " << val; + } else { + ss << "unset pool " << pool << " " << var; + } p.last_change = pending_inc.epoch; pending_inc.new_pools[pool] = p; return 0;