From 2756dacc748091908104fd7842800194b6e6c321 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 14 Sep 2021 15:08:24 -0400 Subject: [PATCH] osd,mon: add EIO pool flag Signed-off-by: Sage Weil --- src/mon/MonCommands.h | 4 ++-- src/mon/OSDMonitor.cc | 20 ++++++++++++++++++-- src/osd/osd_types.h | 6 +++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 88f2278cfbac2..1db9879873364 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -1077,11 +1077,11 @@ COMMAND("osd pool rename " "rename to ", "osd", "rw") COMMAND("osd pool get " "name=pool,type=CephPoolname " - "name=var,type=CephChoices,strings=size|min_size|pg_num|pgp_num|crush_rule|hashpspool|nodelete|nopgchange|nosizechange|write_fadvise_dontneed|noscrub|nodeep-scrub|hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|use_gmt_hitset|target_max_objects|target_max_bytes|cache_target_dirty_ratio|cache_target_dirty_high_ratio|cache_target_full_ratio|cache_min_flush_age|cache_min_evict_age|erasure_code_profile|min_read_recency_for_promote|all|min_write_recency_for_promote|fast_read|hit_set_grade_decay_rate|hit_set_search_last_n|scrub_min_interval|scrub_max_interval|deep_scrub_interval|recovery_priority|recovery_op_priority|scrub_priority|compression_mode|compression_algorithm|compression_required_ratio|compression_max_blob_size|compression_min_blob_size|csum_type|csum_min_block|csum_max_block|allow_ec_overwrites|fingerprint_algorithm|pg_autoscale_mode|pg_autoscale_bias|pg_num_min|target_size_bytes|target_size_ratio|dedup_tier|dedup_chunk_algorithm|dedup_cdc_chunk_size", + "name=var,type=CephChoices,strings=size|min_size|pg_num|pgp_num|crush_rule|hashpspool|nodelete|nopgchange|nosizechange|write_fadvise_dontneed|noscrub|nodeep-scrub|hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|use_gmt_hitset|target_max_objects|target_max_bytes|cache_target_dirty_ratio|cache_target_dirty_high_ratio|cache_target_full_ratio|cache_min_flush_age|cache_min_evict_age|erasure_code_profile|min_read_recency_for_promote|all|min_write_recency_for_promote|fast_read|hit_set_grade_decay_rate|hit_set_search_last_n|scrub_min_interval|scrub_max_interval|deep_scrub_interval|recovery_priority|recovery_op_priority|scrub_priority|compression_mode|compression_algorithm|compression_required_ratio|compression_max_blob_size|compression_min_blob_size|csum_type|csum_min_block|csum_max_block|allow_ec_overwrites|fingerprint_algorithm|pg_autoscale_mode|pg_autoscale_bias|pg_num_min|target_size_bytes|target_size_ratio|dedup_tier|dedup_chunk_algorithm|dedup_cdc_chunk_size|eio", "get pool parameter ", "osd", "r") COMMAND("osd pool set " "name=pool,type=CephPoolname " - "name=var,type=CephChoices,strings=size|min_size|pg_num|pgp_num|pgp_num_actual|crush_rule|hashpspool|nodelete|nopgchange|nosizechange|write_fadvise_dontneed|noscrub|nodeep-scrub|hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|use_gmt_hitset|target_max_bytes|target_max_objects|cache_target_dirty_ratio|cache_target_dirty_high_ratio|cache_target_full_ratio|cache_min_flush_age|cache_min_evict_age|min_read_recency_for_promote|min_write_recency_for_promote|fast_read|hit_set_grade_decay_rate|hit_set_search_last_n|scrub_min_interval|scrub_max_interval|deep_scrub_interval|recovery_priority|recovery_op_priority|scrub_priority|compression_mode|compression_algorithm|compression_required_ratio|compression_max_blob_size|compression_min_blob_size|csum_type|csum_min_block|csum_max_block|allow_ec_overwrites|fingerprint_algorithm|pg_autoscale_mode|pg_autoscale_bias|pg_num_min|target_size_bytes|target_size_ratio|dedup_tier|dedup_chunk_algorithm|dedup_cdc_chunk_size " + "name=var,type=CephChoices,strings=size|min_size|pg_num|pgp_num|pgp_num_actual|crush_rule|hashpspool|nodelete|nopgchange|nosizechange|write_fadvise_dontneed|noscrub|nodeep-scrub|hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|use_gmt_hitset|target_max_bytes|target_max_objects|cache_target_dirty_ratio|cache_target_dirty_high_ratio|cache_target_full_ratio|cache_min_flush_age|cache_min_evict_age|min_read_recency_for_promote|min_write_recency_for_promote|fast_read|hit_set_grade_decay_rate|hit_set_search_last_n|scrub_min_interval|scrub_max_interval|deep_scrub_interval|recovery_priority|recovery_op_priority|scrub_priority|compression_mode|compression_algorithm|compression_required_ratio|compression_max_blob_size|compression_min_blob_size|csum_type|csum_min_block|csum_max_block|allow_ec_overwrites|fingerprint_algorithm|pg_autoscale_mode|pg_autoscale_bias|pg_num_min|target_size_bytes|target_size_ratio|dedup_tier|dedup_chunk_algorithm|dedup_cdc_chunk_size|eio " "name=val,type=CephString " "name=yes_i_really_mean_it,type=CephBool,req=false", "set pool parameter to ", "osd", "rw") diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 3c1021230602f..e14f20a931856 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -5357,7 +5357,7 @@ namespace { CSUM_TYPE, CSUM_MAX_BLOCK, CSUM_MIN_BLOCK, FINGERPRINT_ALGORITHM, PG_AUTOSCALE_MODE, PG_NUM_MIN, TARGET_SIZE_BYTES, TARGET_SIZE_RATIO, PG_AUTOSCALE_BIAS, DEDUP_TIER, DEDUP_CHUNK_ALGORITHM, - DEDUP_CDC_CHUNK_SIZE }; + DEDUP_CDC_CHUNK_SIZE, POOL_EIO }; std::set subtract_second_from_first(const std::set& first, @@ -6046,7 +6046,9 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op) {"size", SIZE}, {"min_size", MIN_SIZE}, {"pg_num", PG_NUM}, {"pgp_num", PGP_NUM}, - {"crush_rule", CRUSH_RULE}, {"hashpspool", HASHPSPOOL}, + {"crush_rule", CRUSH_RULE}, + {"hashpspool", HASHPSPOOL}, + {"eio", POOL_EIO}, {"allow_ec_overwrites", EC_OVERWRITES}, {"nodelete", NODELETE}, {"nopgchange", NOPGCHANGE}, {"nosizechange", NOSIZECHANGE}, {"noscrub", NOSCRUB}, {"nodeep-scrub", NODEEP_SCRUB}, @@ -6205,6 +6207,7 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op) p->pg_autoscale_mode)); break; case HASHPSPOOL: + case POOL_EIO: case NODELETE: case NOPGCHANGE: case NOSIZECHANGE: @@ -6432,6 +6435,7 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op) "\n"; break; case HASHPSPOOL: + case POOL_EIO: case NODELETE: case NOPGCHANGE: case NOSIZECHANGE: @@ -8402,6 +8406,18 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap, var == "nosizechange" || var == "write_fadvise_dontneed" || var == "noscrub" || var == "nodeep-scrub") { uint64_t flag = pg_pool_t::get_flag_by_name(var); + // make sure we only compare against 'n' if we didn't receive a string + if (val == "true" || (interr.empty() && n == 1)) { + p.set_flag(flag); + } else if (val == "false" || (interr.empty() && n == 0)) { + p.unset_flag(flag); + } else { + ss << "expecting value 'true', 'false', '0', or '1'"; + return -EINVAL; + } + } else if (var == "eio") { + uint64_t flag = pg_pool_t::get_flag_by_name(var); + // make sure we only compare against 'n' if we didn't receive a string if (val == "true" || (interr.empty() && n == 1)) { p.set_flag(flag); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index dd70cf75a8bae..4674085838942 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1255,9 +1255,10 @@ struct pg_pool_t { FLAG_SELFMANAGED_SNAPS = 1<<13, // pool uses selfmanaged snaps FLAG_POOL_SNAPS = 1<<14, // pool has pool snaps FLAG_CREATING = 1<<15, // initial pool PGs are being created + FLAG_EIO = 1<<16, // return EIO for all client ops }; - static const char *get_flag_name(int f) { + static const char *get_flag_name(uint64_t f) { switch (f) { case FLAG_HASHPSPOOL: return "hashpspool"; case FLAG_FULL: return "full"; @@ -1275,6 +1276,7 @@ struct pg_pool_t { case FLAG_SELFMANAGED_SNAPS: return "selfmanaged_snaps"; case FLAG_POOL_SNAPS: return "pool_snaps"; case FLAG_CREATING: return "creating"; + case FLAG_EIO: return "eio"; default: return "???"; } } @@ -1325,6 +1327,8 @@ struct pg_pool_t { return FLAG_POOL_SNAPS; if (name == "creating") return FLAG_CREATING; + if (name == "eio") + return FLAG_EIO; return 0; } -- 2.39.5