]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd,mon: change "mon_max_pg_per_osd" to uint64_t
authorKefu Chai <kchai@redhat.com>
Tue, 17 Oct 2017 04:10:55 +0000 (12:10 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 7 Nov 2017 11:43:22 +0000 (19:43 +0800)
as it should never be a negative number. if this option is disabled,
it's 0.

Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit 0d68197376b6cf48c6679d77ec9f28f279f3da68)

src/common/options.cc
src/mon/OSDMonitor.cc
src/mon/PGMap.cc
src/osd/OSD.cc

index f0643e100ba86a088ec6cb9a6195d66636ac9668..893fa6356b31e8a671fa68e4f0c9267ef4c6f1d3 100644 (file)
@@ -1039,7 +1039,7 @@ std::vector<Option> get_global_options() {
     .set_default(30)
     .set_description(""),
 
-    Option("mon_max_pg_per_osd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
+    Option("mon_max_pg_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
     .set_default(200)
     .set_description("Max number of PGs per OSD the cluster will allow"),
 
index b79378b0d599f4d6f7f3c40630db31939de95416..4702ae14f1b23891298517e77a437c0730db53aa 100644 (file)
@@ -5995,10 +5995,10 @@ int OSDMonitor::get_crush_rule(const string &rule_name,
 
 int OSDMonitor::check_pg_num(int64_t pool, int pg_num, int size, ostream *ss)
 {
-  int64_t max_pgs_per_osd = g_conf->get_val<int64_t>("mon_max_pg_per_osd");
-  int num_osds = MAX(osdmap.get_num_in_osds(), 3);   // assume min cluster size 3
-  int64_t max_pgs = max_pgs_per_osd * num_osds;
-  int64_t projected = 0;
+  auto max_pgs_per_osd = g_conf->get_val<uint64_t>("mon_max_pg_per_osd");
+  auto num_osds = std::max(osdmap.get_num_in_osds(), 3u);   // assume min cluster size 3
+  auto max_pgs = max_pgs_per_osd * num_osds;
+  uint64_t projected = 0;
   if (pool < 0) {
     projected += pg_num * size;
   }
index 44943f59e2b4f327a42aa2166035dbdae770b020..f25f2203d84277a172f29bc9c83dddb27e695841 100644 (file)
@@ -2921,12 +2921,12 @@ void PGMap::get_health_checks(
   }
 
   // TOO_FEW_PGS
-  int num_in = osdmap.get_num_in_osds();
-  int sum_pg_up = MAX(pg_sum.up, static_cast<int32_t>(pg_stat.size()));
+  unsigned num_in = osdmap.get_num_in_osds();
+  auto sum_pg_up = std::max(static_cast<size_t>(pg_sum.up), pg_stat.size());
   if (num_in &&
       cct->_conf->mon_pg_warn_min_per_osd > 0 &&
       osdmap.get_pools().size() > 0) {
-    int per = sum_pg_up / num_in;
+    auto per = sum_pg_up / num_in;
     if (per < cct->_conf->mon_pg_warn_min_per_osd && per) {
       ostringstream ss;
       ss << "too few PGs per OSD (" << per
@@ -2936,9 +2936,9 @@ void PGMap::get_health_checks(
   }
 
   // TOO_MANY_PGS
-  int64_t max_pg_per_osd = cct->_conf->get_val<int64_t>("mon_max_pg_per_osd");
+  auto max_pg_per_osd = cct->_conf->get_val<uint64_t>("mon_max_pg_per_osd");
   if (num_in && max_pg_per_osd > 0) {
-    int per = sum_pg_up / num_in;
+    auto per = sum_pg_up / num_in;
     if (per > max_pg_per_osd) {
       ostringstream ss;
       ss << "too many PGs per OSD (" << per
@@ -3605,7 +3605,7 @@ void PGMap::get_health(
        detail->push_back(make_pair(HEALTH_WARN, ss.str()));
     }
   }
-  int64_t max_pg_per_osd = cct->_conf->get_val<int64_t>("mon_max_pg_per_osd");
+  int64_t max_pg_per_osd = cct->_conf->get_val<uint64_t>("mon_max_pg_per_osd");
   if (num_in && max_pg_per_osd > 0) {
     int per = sum_pg_up / num_in;
     if (per > max_pg_per_osd) {
index e3caa30c5971e3edde98e34c524b908b45b0ab9e..0db220473fbdfd99c30cd725ca1ce7377f2780b4 100644 (file)
@@ -4420,7 +4420,7 @@ int OSD::handle_pg_peering_evt(
 bool OSD::maybe_wait_for_max_pg(spg_t pgid, bool is_mon_create)
 {
   const auto max_pgs_per_osd =
-    (cct->_conf->get_val<int64_t>("mon_max_pg_per_osd") *
+    (cct->_conf->get_val<uint64_t>("mon_max_pg_per_osd") *
      cct->_conf->get_val<double>("osd_max_pg_per_osd_hard_ratio"));
 
   RWLock::RLocker pg_map_locker{pg_map_lock};
@@ -4457,7 +4457,7 @@ void OSD::resume_creating_pg()
   MOSDPGTemp *pgtemp = nullptr;
   {
     const auto max_pgs_per_osd =
-      (cct->_conf->get_val<int64_t>("mon_max_pg_per_osd") *
+      (cct->_conf->get_val<uint64_t>("mon_max_pg_per_osd") *
        cct->_conf->get_val<double>("osd_max_pg_per_osd_hard_ratio"));
     RWLock::RLocker l(pg_map_lock);
     if (max_pgs_per_osd <= pg_map.size()) {