From a4fb7b1f443ea325ddbffb77788d5547c2d26ff6 Mon Sep 17 00:00:00 2001 From: Nitzan Mordechai Date: Tue, 13 Jun 2023 09:39:38 +0000 Subject: [PATCH] test: add encode decode test for pg_pool_t Adding some unit test for pg_pool_t to make sure encode\decode\encode doesn't failed to produce the same pg_pool_t struct Fixes: https://tracker.ceph.com/issues/59291 Signed-off-by: Nitzan Mordechai --- src/test/osd/types.cc | 105 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/src/test/osd/types.cc b/src/test/osd/types.cc index 2dc870411bb62..8cd5b7fa3837a 100644 --- a/src/test/osd/types.cc +++ b/src/test/osd/types.cc @@ -27,6 +27,111 @@ using namespace std; +void compare_pg_pool_t(const pg_pool_t l, const pg_pool_t r) +{ + ASSERT_EQ(l.type, r.type); + ASSERT_EQ(l.size, r.size); + ASSERT_EQ(l.crush_rule, r.crush_rule); + ASSERT_EQ(l.object_hash, r.object_hash); + ASSERT_EQ(l.last_change, r.last_change); + ASSERT_EQ(l.snap_seq, r.snap_seq); + ASSERT_EQ(l.snap_epoch, r.snap_epoch); + //ASSERT_EQ(l.snaps, r.snaps); + ASSERT_EQ(l.removed_snaps, r.removed_snaps); + ASSERT_EQ(l.auid, r.auid); + ASSERT_EQ(l.flags, r.flags); + ASSERT_EQ(l.min_size, r.min_size); + ASSERT_EQ(l.quota_max_bytes, r.quota_max_bytes); + ASSERT_EQ(l.quota_max_objects, r.quota_max_objects); + ASSERT_EQ(l.tiers, r.tiers); + ASSERT_EQ(l.tier_of, r.tier_of); + ASSERT_EQ(l.read_tier, r.read_tier); + ASSERT_EQ(l.write_tier, r.write_tier); + ASSERT_EQ(l.properties, r.properties); + //ASSERT_EQ(l.hit_set_params, r.hit_set_params); + //ASSERT_EQ(l.hit_set_period, r.hit_set_period); + //ASSERT_EQ(l.hit_set_count, r.hit_set_count); + ASSERT_EQ(l.stripe_width, r.stripe_width); + ASSERT_EQ(l.target_max_bytes, r.target_max_bytes); + ASSERT_EQ(l.target_max_objects, r.target_max_objects); + ASSERT_EQ(l.cache_target_dirty_ratio_micro, r.cache_target_dirty_ratio_micro); + ASSERT_EQ(l.cache_target_full_ratio_micro, r.cache_target_full_ratio_micro); + ASSERT_EQ(l.cache_min_flush_age, r.cache_min_flush_age); + ASSERT_EQ(l.cache_min_evict_age, r.cache_min_evict_age); + ASSERT_EQ(l.erasure_code_profile, r.erasure_code_profile); + ASSERT_EQ(l.last_force_op_resend_preluminous, r.last_force_op_resend_preluminous); + ASSERT_EQ(l.min_read_recency_for_promote, r.min_read_recency_for_promote); + ASSERT_EQ(l.expected_num_objects, r.expected_num_objects); + ASSERT_EQ(l.cache_target_dirty_high_ratio_micro, r.cache_target_dirty_high_ratio_micro); + ASSERT_EQ(l.min_write_recency_for_promote, r.min_write_recency_for_promote); + ASSERT_EQ(l.use_gmt_hitset, r.use_gmt_hitset); + ASSERT_EQ(l.fast_read, r.fast_read); + ASSERT_EQ(l.hit_set_grade_decay_rate, r.hit_set_grade_decay_rate); + ASSERT_EQ(l.hit_set_search_last_n, r.hit_set_search_last_n); + //ASSERT_EQ(l.opts, r.opts); + ASSERT_EQ(l.last_force_op_resend_prenautilus, r.last_force_op_resend_prenautilus); + ASSERT_EQ(l.application_metadata, r.application_metadata); + ASSERT_EQ(l.create_time, r.create_time); + ASSERT_EQ(l.get_pg_num_target(), r.get_pg_num_target()); + ASSERT_EQ(l.get_pgp_num_target(), r.get_pgp_num_target()); + ASSERT_EQ(l.get_pg_num_pending(), r.get_pg_num_pending()); + ASSERT_EQ(l.last_force_op_resend, r.last_force_op_resend); + ASSERT_EQ(l.pg_autoscale_mode, r.pg_autoscale_mode); + ASSERT_EQ(l.last_pg_merge_meta.source_pgid, r.last_pg_merge_meta.source_pgid); + ASSERT_EQ(l.peering_crush_bucket_count, r.peering_crush_bucket_count); + ASSERT_EQ(l.peering_crush_bucket_target, r.peering_crush_bucket_target); + ASSERT_EQ(l.peering_crush_bucket_barrier, r.peering_crush_bucket_barrier); + ASSERT_EQ(l.peering_crush_mandatory_member, r.peering_crush_mandatory_member); + ASSERT_EQ(l.peering_crush_bucket_count , r.peering_crush_bucket_count); + ASSERT_EQ(l.peering_crush_bucket_target , r.peering_crush_bucket_target); + ASSERT_EQ(l.peering_crush_bucket_barrier , r.peering_crush_bucket_barrier); + ASSERT_EQ(l.peering_crush_mandatory_member , r.peering_crush_mandatory_member); +} + +TEST(pg_pool_t, encodeDecode) +{ + uint64_t features = CEPH_FEATURE_CRUSH_TUNABLES5 | + CEPH_FEATURE_INCARNATION_2 | + CEPH_FEATURE_PGPOOL3 | + CEPH_FEATURE_OSDENC | + CEPH_FEATURE_OSD_POOLRESEND | + CEPH_FEATURE_NEW_OSDOP_ENCODING | + CEPH_FEATUREMASK_SERVER_LUMINOUS | + CEPH_FEATUREMASK_SERVER_MIMIC | + CEPH_FEATUREMASK_SERVER_NAUTILUS; + { + pg_pool_t p; + std::list pools; + + p.generate_test_instances(pools); + for(auto p1 : pools){ + bufferlist bl; + p1->encode(bl, features); + bl.hexdump(std::cout); + auto pbl = bl.cbegin(); + pg_pool_t p2; + p2.decode(pbl); + compare_pg_pool_t(*p1, p2); + } + } + + { + // test reef + pg_pool_t p; + std::list pools; + p.generate_test_instances(pools); + for(auto p1 : pools){ + bufferlist bl; + p1->encode(bl, features|CEPH_FEATUREMASK_SERVER_REEF); + bl.hexdump(std::cout); + auto pbl = bl.cbegin(); + pg_pool_t p2; + p2.decode(pbl); + compare_pg_pool_t(*p1, p2); + } + } +} + TEST(hobject, prefixes0) { uint32_t mask = 0xE947FA20; -- 2.47.3