Usage::
- ceph osd set pause|noup|nodown|noout|noin|nobackfill|norecover|noscrub|
- nodeep-scrub|notieragent
+ ceph osd set pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|
+ noscrub|nodeep-scrub|notieragent
Subcommand ``setcrushmap`` sets crush map from input file.
Usage::
- osd unset pause|noup|nodown|noout|noin|nobackfill|norecover|noscrub|
- nodeep-scrub|notieragent
+ osd unset pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|
+ noscrub|nodeep-scrub|notieragent
pg
ceph osd deep-scrub 0
ceph osd repair 0
- for f in noup nodown noin noout noscrub nodeep-scrub nobackfill norecover notieragent full
+ for f in noup nodown noin noout noscrub nodeep-scrub nobackfill norebalance norecover notieragent full
do
ceph osd set $f
ceph osd unset $f
#define CEPH_OSDMAP_NOSCRUB (1<<11) /* block periodic scrub */
#define CEPH_OSDMAP_NODEEP_SCRUB (1<<12) /* block periodic deep-scrub */
#define CEPH_OSDMAP_NOTIERAGENT (1<<13) /* disable tiering agent */
+#define CEPH_OSDMAP_NOREBALANCE (1<<14) /* block osd backfill unless pg is degraded */
/*
* The error code to return when an OSD can't handle a write
"list all erasure code profiles", \
"osd", "r", "cli,rest")
COMMAND("osd set " \
- "name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norecover|noscrub|nodeep-scrub|notieragent", \
+ "name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|notieragent", \
"set <key>", "osd", "rw", "cli,rest")
COMMAND("osd unset " \
- "name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norecover|noscrub|nodeep-scrub|notieragent", \
+ "name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|notieragent", \
"unset <key>", "osd", "rw", "cli,rest")
COMMAND("osd cluster_snap", "take cluster snapshot (disabled)", \
"osd", "r", "")
CEPH_OSDMAP_NOIN |
CEPH_OSDMAP_NOOUT |
CEPH_OSDMAP_NOBACKFILL |
+ CEPH_OSDMAP_NOREBALANCE |
CEPH_OSDMAP_NORECOVER |
CEPH_OSDMAP_NOSCRUB |
CEPH_OSDMAP_NODEEP_SCRUB |
return prepare_set_flag(m, CEPH_OSDMAP_NOIN);
else if (key == "nobackfill")
return prepare_set_flag(m, CEPH_OSDMAP_NOBACKFILL);
+ else if (key == "norebalance")
+ return prepare_set_flag(m, CEPH_OSDMAP_NOREBALANCE);
else if (key == "norecover")
return prepare_set_flag(m, CEPH_OSDMAP_NORECOVER);
else if (key == "noscrub")
return prepare_unset_flag(m, CEPH_OSDMAP_NOIN);
else if (key == "nobackfill")
return prepare_unset_flag(m, CEPH_OSDMAP_NOBACKFILL);
+ else if (key == "norebalance")
+ return prepare_unset_flag(m, CEPH_OSDMAP_NOREBALANCE);
else if (key == "norecover")
return prepare_unset_flag(m, CEPH_OSDMAP_NORECOVER);
else if (key == "noscrub")
s += ",noin";
if (f & CEPH_OSDMAP_NOBACKFILL)
s += ",nobackfill";
+ if (f & CEPH_OSDMAP_NOREBALANCE)
+ s += ",norebalance";
if (f & CEPH_OSDMAP_NORECOVER)
s += ",norecover";
if (f & CEPH_OSDMAP_NOSCRUB)
}
if (!pg->is_clean() &&
- !pg->get_osdmap()->test_flag(CEPH_OSDMAP_NOBACKFILL)) {
+ !pg->get_osdmap()->test_flag(CEPH_OSDMAP_NOBACKFILL) &&
+ (!pg->get_osdmap()->test_flag(CEPH_OSDMAP_NOREBALANCE) || pg->is_degraded())) {
pg->osd->queue_for_recovery(pg);
}
return forward_event();
if (get_osdmap()->test_flag(CEPH_OSDMAP_NOBACKFILL)) {
dout(10) << "deferring backfill due to NOBACKFILL" << dendl;
deferred_backfill = true;
+ } else if (get_osdmap()->test_flag(CEPH_OSDMAP_NOREBALANCE) &&
+ !is_degraded()) {
+ dout(10) << "deferring backfill due to NOREBALANCE" << dendl;
+ deferred_backfill = true;
} else if (!backfill_reserved) {
dout(10) << "deferring backfill due to !backfill_reserved" << dendl;
if (!backfill_reserving) {