]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdmap: use pg[p]_num accessors
authorSage Weil <sage@inktank.com>
Sat, 19 May 2012 20:24:47 +0000 (13:24 -0700)
committerSage Weil <sage@inktank.com>
Sat, 19 May 2012 20:24:47 +0000 (13:24 -0700)
This lets us ensure that calc_pg_masks() is called when pg[p]_num is set or
modified.

Fixes: #2448
Backport: dho
Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/OSDMonitor.cc
src/osd/OSD.cc
src/osd/OSDMap.cc
src/osd/osd_types.h

index 81d147a9f358ef5f2065a553b338eaaf9d3f4e2d..e9ef7ceb7342588b75c2687e5d7062bf43b6cd2f 100644 (file)
@@ -1685,10 +1685,8 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_rule,
   else
     pending_inc.new_pools[pool].crush_ruleset = g_conf->osd_pool_default_crush_rule;
   pending_inc.new_pools[pool].object_hash = CEPH_STR_HASH_RJENKINS;
-  pending_inc.new_pools[pool].pg_num = (pg_num ? pg_num :
-                                        g_conf->osd_pool_default_pg_num);
-  pending_inc.new_pools[pool].pgp_num = (pgp_num ? pgp_num :
-                                         g_conf->osd_pool_default_pgp_num);
+  pending_inc.new_pools[pool].set_pg_num(pg_num ? pg_num : g_conf->osd_pool_default_pg_num);
+  pending_inc.new_pools[pool].set_pgp_num(pgp_num ? pgp_num : g_conf->osd_pool_default_pgp_num);
   pending_inc.new_pools[pool].last_change = pending_inc.epoch;
   pending_inc.new_pools[pool].auid = auid;
   pending_inc.new_pool_names[pool] = name;
@@ -2295,7 +2293,7 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
              } else {
                if (pending_inc.new_pools.count(pool) == 0)
                  pending_inc.new_pools[pool] = *p;
-               pending_inc.new_pools[pool].pg_num = n;
+               pending_inc.new_pools[pool].set_pg_num(n);
                pending_inc.new_pools[pool].last_change = pending_inc.epoch;
                ss << "set pool " << pool << " pg_num to " << n;
                getline(ss, rs);
@@ -2311,7 +2309,7 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
              } else {
                if (pending_inc.new_pools.count(pool) == 0)
                  pending_inc.new_pools[pool] = *p;
-               pending_inc.new_pools[pool].pgp_num = n;
+               pending_inc.new_pools[pool].set_pgp_num(n);
                pending_inc.new_pools[pool].last_change = pending_inc.epoch;
                ss << "set pool " << pool << " pgp_num to " << n;
                getline(ss, rs);
index 48d8db53e53e4c9a2fa4eb685ce7300d91c695df..cc81d251ccb6ea13d5405b5ccab892f593c3924b 100644 (file)
@@ -3521,9 +3521,10 @@ void OSD::advance_map(ObjectStore::Transaction& t, C_Contexts *tfin)
     pool->auid = pi->auid;
 
     // split?
-    if (pool->info.pg_num != pi->pg_num) {
-      dout(1) << " pool " << p->first << " pg_num " << pool->info.pg_num << " -> " << pi->pg_num << dendl;
-      pool_resize[p->first] = pool->info.pg_num;
+    if (pool->info.get_pg_num() != pi->get_pg_num()) {
+      dout(1) << " pool " << p->first << " pg_num " << pool->info.get_pg_num()
+             << " -> " << pi->get_pg_num() << dendl;
+      pool_resize[p->first] = pool->info.get_pg_num();
       changed = true;
     }
     
@@ -3579,7 +3580,7 @@ void OSD::advance_map(ObjectStore::Transaction& t, C_Contexts *tfin)
        pg_t pgid = it->first;
        PG *pg = it->second;
        set<pg_t> children;
-       if (pgid.is_split(p->second, pg->pool->info.pg_num, &children)) {
+       if (pgid.is_split(p->second, pg->pool->info.get_pg_num(), &children)) {
          do_split(pg, children, t, tfin);
        }
       }
index 0b5b45917ff4a2c054d549682f17c49cbfad060d..401d5eda58775da1d4f7a00b2f16f790b5b18b20 100644 (file)
@@ -1451,8 +1451,8 @@ void OSDMap::build_simple(CephContext *cct, epoch_t e, uuid_d &fsid,
     pools[pool].size = cct->_conf->osd_pool_default_size;
     pools[pool].crush_ruleset = p->first;
     pools[pool].object_hash = CEPH_STR_HASH_RJENKINS;
-    pools[pool].pg_num = poolbase << pg_bits;
-    pools[pool].pgp_num = poolbase << pgp_bits;
+    pools[pool].set_pg_num(poolbase << pg_bits);
+    pools[pool].set_pgp_num(poolbase << pgp_bits);
     pools[pool].last_change = epoch;
     if (p->first == CEPH_DATA_RULE)
       pools[pool].crash_replay_interval = cct->_conf->osd_default_data_pool_replay_window;
@@ -1565,8 +1565,8 @@ void OSDMap::build_simple_from_conf(CephContext *cct, epoch_t e, uuid_d &fsid,
     pools[pool].size = cct->_conf->osd_pool_default_size;
     pools[pool].crush_ruleset = p->first;
     pools[pool].object_hash = CEPH_STR_HASH_RJENKINS;
-    pools[pool].pg_num = (maxosd + 1) << pg_bits;
-    pools[pool].pgp_num = (maxosd + 1) << pgp_bits;
+    pools[pool].set_pg_num((maxosd + 1) << pg_bits);
+    pools[pool].set_pgp_num((maxosd + 1) << pgp_bits);
     pools[pool].last_change = epoch;
     if (p->first == CEPH_DATA_RULE)
       pools[pool].crash_replay_interval = cct->_conf->osd_default_data_pool_replay_window;
index 58c6a552b38e7c4a93c7bb4058fc108b1a7824e4..625c8675912a80e6f70514363bbb7b998096a5b0 100644 (file)
@@ -597,7 +597,9 @@ struct pg_pool_t {
   __u8 size;                /// number of osds in each pg
   __u8 crush_ruleset;       /// crush placement rule set
   __u8 object_hash;         /// hash mapping object name to ps
+private:
   __u32 pg_num, pgp_num;    /// number of pgs
+public:
   epoch_t last_change;      /// most recent epoch changed, exclusing snapshot changes
   snapid_t snap_seq;        /// seq for per-pool snapshot
   epoch_t snap_epoch;       /// osdmap epoch of last snap
@@ -657,6 +659,15 @@ struct pg_pool_t {
   unsigned get_pg_num_mask() const { return pg_num_mask; }
   unsigned get_pgp_num_mask() const { return pgp_num_mask; }
 
+  void set_pg_num(int p) {
+    pg_num = p;
+    calc_pg_masks();
+  }
+  void set_pgp_num(int p) {
+    pgp_num = p;
+    calc_pg_masks();
+  }
+
   static int calc_bits_of(int t);
   void calc_pg_masks();