From: Mykola Golub Date: Fri, 11 Sep 2015 08:05:42 +0000 (+0300) Subject: osd: new pool flags: noscrub, nodeep-scrub X-Git-Tag: v9.1.0~90^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=48db7b16d45161b7d1582ce9c76aedc8e5ad27bb;p=ceph.git osd: new pool flags: noscrub, nodeep-scrub This allows to disable periodic scrub on per pool basis. Fixes: #13076 Signed-off-by: Mykola Golub --- diff --git a/doc/rados/operations/pools.rst b/doc/rados/operations/pools.rst index d4d2f1711372..80b56d4b6d68 100644 --- a/doc/rados/operations/pools.rst +++ b/doc/rados/operations/pools.rst @@ -305,6 +305,20 @@ You may set values for the following keys: :Valid Range: 1 sets flag, 0 unsets flag +``noscrub`` + +:Description: Set/Unset NOSCRUB flag on a given pool. +:Type: Integer +:Valid Range: 1 sets flag, 0 unsets flag + + +``nodeep-scrub`` + +:Description: Set/Unset NODEEP_SCRUB flag on a given pool. +:Type: Integer +:Valid Range: 1 sets flag, 0 unsets flag + + ``hit_set_type`` :Description: Enables hit set tracking for cache pools. diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index 4f9a7ab6d15e..157eb612873e 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -1355,7 +1355,7 @@ function test_mon_osd_pool_set() ceph --format=xml osd pool get $TEST_POOL_GETSET auid | grep $auid ceph osd pool set $TEST_POOL_GETSET auid 0 - for flag in hashpspool nodelete nopgchange nosizechange write_fadvise_dontneed; do + for flag in hashpspool nodelete nopgchange nosizechange write_fadvise_dontneed noscrub nodeep-scrub; do ceph osd pool set $TEST_POOL_GETSET $flag false ceph osd pool get $TEST_POOL_GETSET $flag | grep "$flag: false" ceph osd pool set $TEST_POOL_GETSET $flag true diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index a87136b1201c..0286b8319dd1 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -674,11 +674,11 @@ COMMAND("osd pool rename " \ "rename to ", "osd", "rw", "cli,rest") COMMAND("osd pool get " \ "name=pool,type=CephPoolname " \ - "name=var,type=CephChoices,strings=size|min_size|crash_replay_interval|pg_num|pgp_num|crush_ruleset|hashpspool|nodelete|nopgchange|nosizechange|write_fadvise_dontneed|hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|auid|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", \ + "name=var,type=CephChoices,strings=size|min_size|crash_replay_interval|pg_num|pgp_num|crush_ruleset|hashpspool|nodelete|nopgchange|nosizechange|write_fadvise_dontneed|noscrub|nodeep-scrub|hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|auid|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", \ "get pool parameter ", "osd", "r", "cli,rest") COMMAND("osd pool set " \ "name=pool,type=CephPoolname " \ - "name=var,type=CephChoices,strings=size|min_size|crash_replay_interval|pg_num|pgp_num|crush_ruleset|hashpspool|nodelete|nopgchange|nosizechange|write_fadvise_dontneed|hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|use_gmt_hitset|debug_fake_ec_pool|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|auid|min_read_recency_for_promote|min_write_recency_for_promote|fast_read " \ + "name=var,type=CephChoices,strings=size|min_size|crash_replay_interval|pg_num|pgp_num|crush_ruleset|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|debug_fake_ec_pool|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|auid|min_read_recency_for_promote|min_write_recency_for_promote|fast_read " \ "name=val,type=CephString " \ "name=force,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \ "set pool parameter to ", "osd", "rw", "cli,rest") diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 7779ea623dd3..97165d857f85 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2876,9 +2876,9 @@ namespace { SIZE, MIN_SIZE, CRASH_REPLAY_INTERVAL, PG_NUM, PGP_NUM, CRUSH_RULESET, HASHPSPOOL, NODELETE, NOPGCHANGE, NOSIZECHANGE, - WRITE_FADVISE_DONTNEED, HIT_SET_TYPE, - HIT_SET_PERIOD, HIT_SET_COUNT, HIT_SET_FPP, USE_GMT_HITSET, - AUID, TARGET_MAX_OBJECTS, TARGET_MAX_BYTES, + WRITE_FADVISE_DONTNEED, NOSCRUB, NODEEP_SCRUB, + HIT_SET_TYPE, HIT_SET_PERIOD, HIT_SET_COUNT, HIT_SET_FPP, + USE_GMT_HITSET, AUID, 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, @@ -3342,6 +3342,7 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op) ("pg_num", PG_NUM)("pgp_num", PGP_NUM)("crush_ruleset", CRUSH_RULESET) ("hashpspool", HASHPSPOOL)("nodelete", NODELETE) ("nopgchange", NOPGCHANGE)("nosizechange", NOSIZECHANGE) + ("noscrub", NOSCRUB)("nodeep-scrub", NODEEP_SCRUB) ("write_fadvise_dontneed", WRITE_FADVISE_DONTNEED) ("hit_set_type", HIT_SET_TYPE)("hit_set_period", HIT_SET_PERIOD) ("hit_set_count", HIT_SET_COUNT)("hit_set_fpp", HIT_SET_FPP) @@ -3444,6 +3445,8 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op) case NOPGCHANGE: case NOSIZECHANGE: case WRITE_FADVISE_DONTNEED: + case NOSCRUB: + case NODEEP_SCRUB: for (i = ALL_CHOICES.begin(); i != ALL_CHOICES.end(); ++i) { if (i->second == *it) break; @@ -3620,6 +3623,8 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op) case NOPGCHANGE: case NOSIZECHANGE: case WRITE_FADVISE_DONTNEED: + case NOSCRUB: + case NODEEP_SCRUB: for (i = ALL_CHOICES.begin(); i != ALL_CHOICES.end(); ++i) { if (i->second == *it) break; @@ -4872,7 +4877,8 @@ int OSDMonitor::prepare_command_pool_set(map &cmdmap, } p.crush_ruleset = n; } else if (var == "hashpspool" || var == "nodelete" || var == "nopgchange" || - var == "nosizechange" || var == "write_fadvise_dontneed") { + 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)) { diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 3bdb13cbbd48..ada7c81dc211 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -3151,16 +3151,18 @@ bool PG::sched_scrub() bool time_for_deep = (ceph_clock_now(cct) > info.history.last_deep_scrub_stamp + cct->_conf->osd_deep_scrub_interval); - + //NODEEP_SCRUB so ignore time initiated deep-scrub - if (osd->osd->get_osdmap()->test_flag(CEPH_OSDMAP_NODEEP_SCRUB)) + if (osd->osd->get_osdmap()->test_flag(CEPH_OSDMAP_NODEEP_SCRUB) || + pool.info.has_flag(pg_pool_t::FLAG_NODEEP_SCRUB)) time_for_deep = false; if (!scrubber.must_scrub) { assert(!scrubber.must_deep_scrub); //NOSCRUB so skip regular scrubs - if (osd->osd->get_osdmap()->test_flag(CEPH_OSDMAP_NOSCRUB) && !time_for_deep) + if ((osd->osd->get_osdmap()->test_flag(CEPH_OSDMAP_NOSCRUB) || + pool.info.has_flag(pg_pool_t::FLAG_NOSCRUB)) && !time_for_deep) return false; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index baace7c396ce..10c38da351fc 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -922,6 +922,8 @@ struct pg_pool_t { FLAG_NOPGCHANGE = 1<<5, // pool's pg and pgp num can't be changed FLAG_NOSIZECHANGE = 1<<6, // pool's size and min size can't be changed FLAG_WRITE_FADVISE_DONTNEED = 1<<7, // write mode with LIBRADOS_OP_FLAG_FADVISE_DONTNEED + FLAG_NOSCRUB = 1<<8, // block periodic scrub + FLAG_NODEEP_SCRUB = 1<<9, // block periodic deep-scrub }; static const char *get_flag_name(int f) { @@ -934,6 +936,8 @@ struct pg_pool_t { case FLAG_NOPGCHANGE: return "nopgchange"; case FLAG_NOSIZECHANGE: return "nosizechange"; case FLAG_WRITE_FADVISE_DONTNEED: return "write_fadvise_dontneed"; + case FLAG_NOSCRUB: return "noscrub"; + case FLAG_NODEEP_SCRUB: return "nodeep-scrub"; default: return "???"; } } @@ -968,6 +972,10 @@ struct pg_pool_t { return FLAG_NOSIZECHANGE; if (name == "write_fadvise_dontneed") return FLAG_WRITE_FADVISE_DONTNEED; + if (name == "noscrub") + return FLAG_NOSCRUB; + if (name == "nodeep-scrub") + return FLAG_NODEEP_SCRUB; return 0; } diff --git a/src/test/mon/misc.sh b/src/test/mon/misc.sh index 82751faaba02..d2e5dbd51c9a 100755 --- a/src/test/mon/misc.sh +++ b/src/test/mon/misc.sh @@ -41,7 +41,7 @@ function TEST_osd_pool_get_set() { run_mon $dir a || return 1 local flag - for flag in hashpspool nodelete nopgchange nosizechange write_fadvise_dontneed; do + for flag in hashpspool nodelete nopgchange nosizechange write_fadvise_dontneed noscrub nodeep-scrub; do if [ $flag = hashpspool ]; then ./ceph osd dump | grep 'pool ' | grep $flag || return 1 else