diff options
-rw-r--r-- | src/common/config_opts.h | 2 | ||||
-rw-r--r-- | src/mon/OSDMonitor.cc | 7 | ||||
-rw-r--r-- | src/mon/PGMonitor.cc | 7 | ||||
-rw-r--r-- | src/osd/osd_types.cc | 2 |
4 files changed, 14 insertions, 4 deletions
diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 4d7a08b01b7..6fb6d943658 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -300,7 +300,7 @@ OPTION(osd_min_rep, OPT_INT, 1) OPTION(osd_max_rep, OPT_INT, 10) OPTION(osd_pool_default_crush_rule, OPT_INT, 0) OPTION(osd_pool_default_size, OPT_INT, 2) -OPTION(osd_pool_default_min_size, OPT_INT, 2) +OPTION(osd_pool_default_min_size, OPT_INT, 0) // 0 means no specific default; ceph will use size-size/2 OPTION(osd_pool_default_pg_num, OPT_INT, 8) OPTION(osd_pool_default_pgp_num, OPT_INT, 8) OPTION(osd_map_dedup, OPT_BOOL, true) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 0316a906fa6..40d12de9fd5 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1892,8 +1892,11 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_rule, pending_inc.new_pools[pool].type = pg_pool_t::TYPE_REP; pending_inc.new_pools[pool].size = g_conf->osd_pool_default_size; - pending_inc.new_pools[pool].min_size = - g_conf->osd_pool_default_min_size; + if (g_conf->osd_pool_default_min_size) + pending_inc.new_pools[pool].min_size = MIN(g_conf->osd_pool_default_size, + g_conf->osd_pool_default_min_size); + else + pending_inc.new_pools[pool].min_size = g_conf->osd_pool_default_size - g_conf->osd_pool_default_size/2; if (crush_rule >= 0) pending_inc.new_pools[pool].crush_ruleset = crush_rule; else diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 14b97df97bb..f8d311235ce 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -1291,6 +1291,13 @@ void PGMonitor::get_health(list<pair<health_status_t,string> >& summary, ss << ", acting " << p->second.acting; if (p->second.stats.sum.num_objects_unfound) ss << ", " << p->second.stats.sum.num_objects_unfound << " unfound"; + if (p->second.state & PG_STATE_INCOMPLETE) { + const pg_pool_t *pi = mon->osdmon()->osdmap.get_pg_pool(p->first.pool()); + if (pi && pi->min_size > 1) { + ss << " (reducing pool " << mon->osdmon()->osdmap.get_pool_name(p->first.pool()) + << " min_size from " << (int)pi->min_size << " may help; search ceph.com/docs for 'incomplete')"; + } + } detail->push_back(make_pair(HEALTH_WARN, ss.str())); } } diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 629704d6377..1ca5adc70be 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -768,7 +768,7 @@ void pg_pool_t::decode(bufferlist::iterator& bl) if (struct_v >= 7) { ::decode(min_size, bl); } else { - min_size = MAX(size - 1, 1); + min_size = size - size/2; } DECODE_FINISH(bl); calc_pg_masks(); |