From: Sage Weil Date: Tue, 23 Jul 2019 22:45:08 +0000 (-0500) Subject: osd: report per-pool omap support via store_statfs_t X-Git-Tag: v15.1.0~1915^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d6ff61ed1f6e2fe67a64684cbf88f3f36ed26351;p=ceph-ci.git osd: report per-pool omap support via store_statfs_t Signed-off-by: Sage Weil --- diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 31b26fd3434..fdab111b344 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -840,6 +840,7 @@ void PGMapDigest::dump_cluster_stats(stringstream *ss, f->dump_float("total_used_raw_ratio", osd_sum.statfs.get_used_raw_ratio()); f->dump_unsigned("num_osds", osd_sum.num_osds); f->dump_unsigned("num_per_pool_osds", osd_sum.num_per_pool_osds); + f->dump_unsigned("num_per_pool_omap_osds", osd_sum.num_per_pool_omap_osds); f->close_section(); f->open_object_section("stats_by_class"); for (auto& i : osd_sum_by_class) { diff --git a/src/os/ObjectStore.h b/src/os/ObjectStore.h index 9cb82891a40..b21ecd307e8 100644 --- a/src/os/ObjectStore.h +++ b/src/os/ObjectStore.h @@ -337,7 +337,8 @@ public: virtual int statfs(struct store_statfs_t *buf, osd_alert_list_t* alerts = nullptr) = 0; - virtual int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) = 0; + virtual int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *per_pool_omap) = 0; virtual void collect_metadata(std::map *pm) { } diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index b8589452e6c..1b0f248434d 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -8301,7 +8301,8 @@ int BlueStore::statfs(struct store_statfs_t *buf, return 0; } -int BlueStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) +int BlueStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *out_per_pool_omap) { dout(20) << __func__ << " pool " << pool_id<< dendl; @@ -8320,6 +8321,7 @@ int BlueStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) _key_encode_u64(pool_id, &key_prefix); buf->omap_allocated = db->estimate_prefix_size(PREFIX_PERPOOL_OMAP, key_prefix); + *out_per_pool_omap = per_pool_omap; dout(10) << __func__ << *buf << dendl; return 0; diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 395252252a1..69278dd5d9d 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2373,7 +2373,8 @@ public: public: int statfs(struct store_statfs_t *buf, osd_alert_list_t* alerts = nullptr) override; - int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) override; + int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *per_pool_omap) override; void collect_metadata(map *pm) override; diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index ac7c6157075..d25a8d93204 100644 --- a/src/os/filestore/FileStore.cc +++ b/src/os/filestore/FileStore.cc @@ -790,7 +790,8 @@ int FileStore::statfs(struct store_statfs_t *buf0, osd_alert_list_t* alerts) return 0; } -int FileStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) +int FileStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *per_pool_omap) { return -ENOTSUP; } diff --git a/src/os/filestore/FileStore.h b/src/os/filestore/FileStore.h index e09b9e042e9..9f04d61500e 100644 --- a/src/os/filestore/FileStore.h +++ b/src/os/filestore/FileStore.h @@ -523,7 +523,8 @@ public: int statfs(struct store_statfs_t *buf, osd_alert_list_t* alerts = nullptr) override; - int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) override; + int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *per_pool_omap) override; int _do_transactions( vector &tls, uint64_t op_seq, diff --git a/src/os/kstore/KStore.cc b/src/os/kstore/KStore.cc index eab11add1a2..6c7c382bbc5 100644 --- a/src/os/kstore/KStore.cc +++ b/src/os/kstore/KStore.cc @@ -1115,7 +1115,8 @@ ObjectStore::CollectionHandle KStore::create_new_collection(const coll_t& cid) return c; } -int KStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) +int KStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *per_pool_omap) { return -ENOTSUP; } diff --git a/src/os/kstore/KStore.h b/src/os/kstore/KStore.h index 227227fb9be..c62520ea308 100644 --- a/src/os/kstore/KStore.h +++ b/src/os/kstore/KStore.h @@ -441,7 +441,8 @@ public: } int statfs(struct store_statfs_t *buf, osd_alert_list_t* alerts = nullptr) override; - int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) override; + int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *per_pool_omap) override; CollectionHandle open_collection(const coll_t& c) override; CollectionHandle create_new_collection(const coll_t& c) override; diff --git a/src/os/memstore/MemStore.cc b/src/os/memstore/MemStore.cc index e4ff9803185..a4d1e981495 100644 --- a/src/os/memstore/MemStore.cc +++ b/src/os/memstore/MemStore.cc @@ -234,7 +234,8 @@ int MemStore::statfs(struct store_statfs_t *st, osd_alert_list_t* alerts) return 0; } -int MemStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) +int MemStore::pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *per_pool_omap) { return -ENOTSUP; } diff --git a/src/os/memstore/MemStore.h b/src/os/memstore/MemStore.h index 3d3616316e8..ec7cf53b501 100644 --- a/src/os/memstore/MemStore.h +++ b/src/os/memstore/MemStore.h @@ -295,7 +295,8 @@ public: int statfs(struct store_statfs_t *buf, osd_alert_list_t* alerts = nullptr) override; - int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf) override; + int pool_statfs(uint64_t pool_id, struct store_statfs_t *buf, + bool *per_pool_omap) override; bool exists(CollectionHandle &c, const ghobject_t& oid) override; int stat(CollectionHandle &c, const ghobject_t& oid, diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 6d4acc24a42..c3724d529a9 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -7420,8 +7420,9 @@ MPGStats* OSD::collect_pg_stats() } store_statfs_t st; bool per_pool_stats = false; + bool per_pool_omap_stats = false; for (auto p : pool_set) { - int r = store->pool_statfs(p, &st); + int r = store->pool_statfs(p, &st, &per_pool_omap_stats); if (r == -ENOTSUP) { break; } else { @@ -7434,6 +7435,7 @@ MPGStats* OSD::collect_pg_stats() // indicate whether we are reporting per-pool stats m->osd_stat.num_osds = 1; m->osd_stat.num_per_pool_osds = per_pool_stats ? 1 : 0; + m->osd_stat.num_per_pool_omap_osds = per_pool_omap_stats ? 1 : 0; return m; } diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index 7ace015352f..b7be1ad451a 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -1369,7 +1369,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_TRUE(statfs.available > 0u && statfs.available < g_conf()->bluestore_block_size); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ( 0u, statfs_pool.allocated); ASSERT_EQ( 0u, statfs_pool.data_stored); @@ -1400,7 +1401,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(0, statfs.data_compressed_allocated); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(5, statfs_pool.data_stored); ASSERT_EQ(0x10000, statfs_pool.allocated); @@ -1409,7 +1411,7 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(0, statfs_pool.data_compressed_allocated); // accessing unknown pool - r = store->pool_statfs(poolid + 1, &statfs_pool); + r = store->pool_statfs(poolid + 1, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(0, statfs_pool.data_stored); ASSERT_EQ(0, statfs_pool.allocated); @@ -1444,7 +1446,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(statfs.data_compressed_allocated, 0x10000); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(0x30005, statfs_pool.data_stored); ASSERT_EQ(0x30000, statfs_pool.allocated); @@ -1476,7 +1479,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(statfs.data_compressed_allocated, 0x10000); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(0x30005 - 3 - 9, statfs_pool.data_stored); ASSERT_EQ(0x30000, statfs_pool.allocated); @@ -1511,7 +1515,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(statfs.data_compressed_allocated, 0x10000); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(0x30001 - 9 + 0x1000, statfs_pool.data_stored); ASSERT_EQ(0x40000, statfs_pool.allocated); @@ -1547,7 +1552,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(0, statfs.data_compressed_allocated); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(0x30000 + 0x1001, statfs_pool.data_stored); ASSERT_EQ(0x40000, statfs_pool.allocated); @@ -1577,7 +1583,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(0u, statfs.data_compressed_allocated); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(0u, statfs_pool.allocated); ASSERT_EQ(0u, statfs_pool.data_stored); @@ -1613,7 +1620,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(0x10000, statfs.data_compressed_allocated); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(0x40000 - 2, statfs_pool.data_stored); ASSERT_EQ(0x30000, statfs_pool.allocated); @@ -1633,7 +1641,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(r, 0); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ObjectStore::Transaction t; @@ -1651,7 +1660,7 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(statfs2.data_compressed_allocated, statfs.data_compressed_allocated); struct store_statfs_t statfs2_pool; - r = store->pool_statfs(poolid, &statfs2_pool); + r = store->pool_statfs(poolid, &statfs2_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_GT(statfs2_pool.data_stored, statfs_pool.data_stored); ASSERT_EQ(statfs2_pool.allocated, statfs_pool.allocated); @@ -1676,7 +1685,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { { struct store_statfs_t statfs1_pool; - int r = store->pool_statfs(poolid, &statfs1_pool); + bool per_pool_omap; + int r = store->pool_statfs(poolid, &statfs1_pool, &per_pool_omap); ASSERT_EQ(r, 0); cerr << "Creating second collection " << cid2 << std::endl; @@ -1693,7 +1703,7 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(r, 0); struct store_statfs_t statfs2_pool; - r = store->pool_statfs(poolid2, &statfs2_pool); + r = store->pool_statfs(poolid2, &statfs2_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(5, statfs2_pool.data_stored); ASSERT_EQ(0x10000, statfs2_pool.allocated); @@ -1702,7 +1712,7 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(0, statfs2_pool.data_compressed_allocated); struct store_statfs_t statfs1_pool_again; - r = store->pool_statfs(poolid, &statfs1_pool_again); + r = store->pool_statfs(poolid, &statfs1_pool_again, &per_pool_omap); ASSERT_EQ(r, 0); // adjust 'available' since it has changed statfs1_pool_again.available = statfs1_pool.available; @@ -1732,7 +1742,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { auto ch3 = store->create_new_collection(cid3); { struct store_statfs_t statfs1_pool; - int r = store->pool_statfs(poolid, &statfs1_pool); + bool per_pool_omap; + int r = store->pool_statfs(poolid, &statfs1_pool, &per_pool_omap); ASSERT_EQ(r, 0); cerr << "Creating third collection " << cid3 << std::endl; @@ -1749,7 +1760,7 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(r, 0); struct store_statfs_t statfs3_pool; - r = store->pool_statfs(poolid3, &statfs3_pool); + r = store->pool_statfs(poolid3, &statfs3_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(5, statfs3_pool.data_stored); ASSERT_EQ(0x10000, statfs3_pool.allocated); @@ -1758,7 +1769,7 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(0, statfs3_pool.data_compressed_allocated); struct store_statfs_t statfs1_pool_again; - r = store->pool_statfs(poolid, &statfs1_pool_again); + r = store->pool_statfs(poolid, &statfs1_pool_again, &per_pool_omap); ASSERT_EQ(r, 0); // adjust 'available' since it has changed statfs1_pool_again.available = statfs1_pool.available; @@ -1780,7 +1791,7 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ(r, 0); struct store_statfs_t statfs3_pool_again; - r = store->pool_statfs(poolid3, &statfs3_pool_again); + r = store->pool_statfs(poolid3, &statfs3_pool_again, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ(statfs3_pool_again, statfs3_pool); @@ -1820,7 +1831,8 @@ TEST_P(StoreTestSpecificAUSize, BluestoreStatFSTest) { ASSERT_EQ( 0u, statfs.data_compressed_allocated); struct store_statfs_t statfs_pool; - r = store->pool_statfs(poolid, &statfs_pool); + bool per_pool_omap; + r = store->pool_statfs(poolid, &statfs_pool, &per_pool_omap); ASSERT_EQ(r, 0); ASSERT_EQ( 0u, statfs_pool.allocated); ASSERT_EQ( 0u, statfs_pool.data_stored);