]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/test/osd/TestOSDMap.cc
update sources to v12.1.1
[ceph.git] / ceph / src / test / osd / TestOSDMap.cc
index 0d8eec7b561d854c0fa7eddd5176437075ee8793..8aa31e6161189d42d17e69ef39be271267000c43 100644 (file)
@@ -32,12 +32,15 @@ class OSDMapTest : public testing::Test {
 public:
   OSDMap osdmap;
   OSDMapMapping mapping;
+  const uint64_t my_ec_pool = 1;
+  const uint64_t my_rep_pool = 2;
+
 
   OSDMapTest() {}
 
   void set_up_map() {
     uuid_d fsid;
-    osdmap.build_simple(g_ceph_context, 0, fsid, num_osds, 6, 6);
+    osdmap.build_simple(g_ceph_context, 0, fsid, num_osds);
     OSDMap::Incremental pending_inc(osdmap.get_epoch() + 1);
     pending_inc.fsid = osdmap.get_fsid();
     entity_addr_t sample_addr;
@@ -57,7 +60,7 @@ public:
 
     // Create an EC ruleset and a pool using it
     int r = osdmap.crush->add_simple_rule(
-      "erasure", "default", "osd",
+      "erasure", "default", "osd", "",
       "indep", pg_pool_t::TYPE_ERASURE,
       &cerr);
 
@@ -65,7 +68,9 @@ public:
     new_pool_inc.new_pool_max = osdmap.get_pool_max();
     new_pool_inc.fsid = osdmap.get_fsid();
     pg_pool_t empty;
+    // make an ec pool
     uint64_t pool_id = ++new_pool_inc.new_pool_max;
+    assert(pool_id == my_ec_pool);
     pg_pool_t *p = new_pool_inc.get_new_pool(pool_id, &empty);
     p->size = 3;
     p->set_pg_num(64);
@@ -73,6 +78,17 @@ public:
     p->type = pg_pool_t::TYPE_ERASURE;
     p->crush_rule = r;
     new_pool_inc.new_pool_names[pool_id] = "ec";
+    // and a replicated pool
+    pool_id = ++new_pool_inc.new_pool_max;
+    assert(pool_id == my_rep_pool);
+    p = new_pool_inc.get_new_pool(pool_id, &empty);
+    p->size = 3;
+    p->set_pg_num(64);
+    p->set_pgp_num(64);
+    p->type = pg_pool_t::TYPE_REPLICATED;
+    p->crush_rule = 0;
+    p->set_flag(pg_pool_t::FLAG_HASHPSPOOL);
+    new_pool_inc.new_pool_names[pool_id] = "reppool";
     osdmap.apply_incremental(new_pool_inc);
   }
   unsigned int get_num_osds() { return num_osds; }
@@ -106,6 +122,9 @@ public:
       ASSERT_EQ(acting, acting2);
       ASSERT_EQ(acting_primary, acting_primary2);
     }
+    cout << "any: " << *any << std::endl;;
+    cout << "first: " << *first << std::endl;;
+    cout << "primary: " << *primary << std::endl;;
   }
 };
 
@@ -160,7 +179,8 @@ TEST_F(OSDMapTest, Features) {
 TEST_F(OSDMapTest, MapPG) {
   set_up_map();
 
-  pg_t rawpg(0, 0, -1);
+  std::cerr << " osdmap.pool_max==" << osdmap.get_pool_max() << std::endl;
+  pg_t rawpg(0, my_rep_pool, -1);
   pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
   vector<int> up_osds, acting_osds;
   int up_primary, acting_primary;
@@ -173,14 +193,13 @@ TEST_F(OSDMapTest, MapPG) {
   ASSERT_EQ(old_up_osds, up_osds);
   ASSERT_EQ(old_acting_osds, acting_osds);
 
-  ASSERT_EQ(osdmap.get_pg_pool(0)->get_size(), up_osds.size());
+  ASSERT_EQ(osdmap.get_pg_pool(my_rep_pool)->get_size(), up_osds.size());
 }
 
 TEST_F(OSDMapTest, MapFunctionsMatch) {
   // TODO: make sure pg_to_up_acting_osds and pg_to_acting_osds match
   set_up_map();
-
-  pg_t rawpg(0, 0, -1);
+  pg_t rawpg(0, my_rep_pool, -1);
   pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
   vector<int> up_osds, acting_osds;
   int up_primary, acting_primary;
@@ -208,7 +227,7 @@ TEST_F(OSDMapTest, MapFunctionsMatch) {
 TEST_F(OSDMapTest, PrimaryIsFirst) {
   set_up_map();
 
-  pg_t rawpg(0, 0, -1);
+  pg_t rawpg(0, my_rep_pool, -1);
   pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
   vector<int> up_osds, acting_osds;
   int up_primary, acting_primary;
@@ -222,7 +241,7 @@ TEST_F(OSDMapTest, PrimaryIsFirst) {
 TEST_F(OSDMapTest, PGTempRespected) {
   set_up_map();
 
-  pg_t rawpg(0, 0, -1);
+  pg_t rawpg(0, my_rep_pool, -1);
   pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
   vector<int> up_osds, acting_osds;
   int up_primary, acting_primary;
@@ -250,7 +269,7 @@ TEST_F(OSDMapTest, PGTempRespected) {
 TEST_F(OSDMapTest, PrimaryTempRespected) {
   set_up_map();
 
-  pg_t rawpg(0, 0, -1);
+  pg_t rawpg(0, my_rep_pool, -1);
   pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
   vector<int> up_osds;
   vector<int> acting_osds;
@@ -274,7 +293,7 @@ TEST_F(OSDMapTest, CleanTemps) {
 
   OSDMap::Incremental pgtemp_map(osdmap.get_epoch() + 1);
   OSDMap::Incremental pending_inc(osdmap.get_epoch() + 2);
-  pg_t pga = osdmap.raw_pg_to_pg(pg_t(0, 0));
+  pg_t pga = osdmap.raw_pg_to_pg(pg_t(0, my_rep_pool));
   {
     vector<int> up_osds, acting_osds;
     int up_primary, acting_primary;
@@ -284,7 +303,7 @@ TEST_F(OSDMapTest, CleanTemps) {
       up_osds.begin(), up_osds.end());
     pgtemp_map.new_primary_temp[pga] = up_primary;
   }
-  pg_t pgb = osdmap.raw_pg_to_pg(pg_t(1, 0));
+  pg_t pgb = osdmap.raw_pg_to_pg(pg_t(1, my_rep_pool));
   {
     vector<int> up_osds, acting_osds;
     int up_primary, acting_primary;
@@ -310,7 +329,7 @@ TEST_F(OSDMapTest, CleanTemps) {
 TEST_F(OSDMapTest, KeepsNecessaryTemps) {
   set_up_map();
 
-  pg_t rawpg(0, 0, -1);
+  pg_t rawpg(0, my_rep_pool, -1);
   pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
   vector<int> up_osds, acting_osds;
   int up_primary, acting_primary;
@@ -360,12 +379,14 @@ TEST_F(OSDMapTest, PrimaryAffinity) {
        p != osdmap.get_pools().end();
        ++p) {
     int pool = p->first;
-    cout << "pool " << pool << std::endl;
+    int expect_primary = 10000 / n;
+    cout << "pool " << pool << " size " << (int)p->second.size
+        << " expect_primary " << expect_primary << std::endl;
     {
       vector<int> any(n, 0);
       vector<int> first(n, 0);
       vector<int> primary(n, 0);
-      test_mappings(0, 10000, &any, &first, &primary);
+      test_mappings(pool, 10000, &any, &first, &primary);
       for (int i=0; i<n; ++i) {
        ASSERT_LT(0, any[i]);
        ASSERT_LT(0, first[i]);
@@ -401,6 +422,8 @@ TEST_F(OSDMapTest, PrimaryAffinity) {
       vector<int> first(n, 0);
       vector<int> primary(n, 0);
       test_mappings(pool, 10000, &any, &first, &primary);
+      int expect = (10000 / (n-2)) / 2; // half weight
+      cout << "expect " << expect << std::endl;
       for (int i=0; i<n; ++i) {
        ASSERT_LT(0, any[i]);
        if (i >= 2) {
@@ -412,8 +435,8 @@ TEST_F(OSDMapTest, PrimaryAffinity) {
          }
          ASSERT_EQ(0, primary[i]);
        } else {
-         ASSERT_LT(10000/6/4, primary[0]);
-         ASSERT_GT(10000/6/4*3, primary[0]);
+         ASSERT_LT(expect *2/3, primary[0]);
+         ASSERT_GT(expect *4/3, primary[0]);
        }
       }
     }