From: Sage Weil Date: Sat, 22 Feb 2014 17:32:08 +0000 (-0800) Subject: mon/PGMap: cache min_last_epoch_clean X-Git-Tag: v0.79~141^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=208959a0dcacba40116730702021090a24865eb3;p=ceph.git mon/PGMap: cache min_last_epoch_clean We call this a lot. Only recalculate when we decode or when we apply an incremental. Adjust unit test accordingly. Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index b03144144a6f..21348dea2079 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -640,7 +640,7 @@ version_t OSDMonitor::get_trim_to() { if (mon->pgmon()->is_readable() && mon->pgmon()->pg_map.creating_pgs.empty()) { - epoch_t floor = mon->pgmon()->pg_map.calc_min_last_epoch_clean(); + epoch_t floor = mon->pgmon()->pg_map.get_min_last_epoch_clean(); dout(10) << " min_last_epoch_clean " << floor << dendl; if (g_conf->mon_osd_force_trim_to > 0 && g_conf->mon_osd_force_trim_to < (int)get_last_committed()) { diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index fbed206613d5..72a60d9ac249 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -282,6 +282,8 @@ void PGMap::apply_incremental(CephContext *cct, const Incremental& inc) last_osdmap_epoch = inc.osdmap_epoch; if (inc.pg_scan) last_pg_scan = inc.pg_scan; + + min_last_epoch_clean = 0; // invalidate } void PGMap::redo_full_sets() @@ -334,6 +336,8 @@ void PGMap::calc_stats() stat_osd_add(p->second); redo_full_sets(); + + calc_min_last_epoch_clean(); } void PGMap::update_pg(pg_t pgid, bufferlist& bl) diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index f4e8df5f0ffc..9edb19a93d6c 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -105,6 +105,7 @@ public: ceph::unordered_map pg_pool_sum; pool_stat_t pg_sum; osd_stat_t osd_sum; + mutable epoch_t min_last_epoch_clean; utime_t stamp; @@ -152,6 +153,9 @@ public: const utime_t ts, const uint64_t pool, const pool_stat_t& old_pool_sum); + + epoch_t calc_min_last_epoch_clean() const; + public: set creating_pgs; // lru: front = new additions, back = recently pinged @@ -169,7 +173,8 @@ public: last_osdmap_epoch(0), last_pg_scan(0), full_ratio(0), nearfull_ratio(0), num_pg(0), - num_osd(0) + num_osd(0), + min_last_epoch_clean(0) {} void set_full_ratios(float full, float nearfull) { @@ -285,7 +290,11 @@ public: void print_summary(Formatter *f, ostream *out) const; void print_oneline_summary(ostream *out) const; - epoch_t calc_min_last_epoch_clean() const; + epoch_t get_min_last_epoch_clean() const { + if (!min_last_epoch_clean) + min_last_epoch_clean = calc_min_last_epoch_clean(); + return min_last_epoch_clean; + } static void generate_test_instances(list& o); }; diff --git a/src/test/mon/PGMap.cc b/src/test/mon/PGMap.cc index f7fbe7e2043a..9f7a6b2d0b1f 100644 --- a/src/test/mon/PGMap.cc +++ b/src/test/mon/PGMap.cc @@ -30,54 +30,54 @@ TEST(pgmap, min_last_epoch_clean) inc.version = 1; inc.update_stat(0, 123, os); pg_map.apply_incremental(g_ceph_context, inc); - ASSERT_EQ(123u, pg_map.calc_min_last_epoch_clean()); + ASSERT_EQ(123u, pg_map.get_min_last_epoch_clean()); inc = PGMap::Incremental(); inc.version = 2; inc.update_stat(1, 222, os); pg_map.apply_incremental(g_ceph_context, inc); - ASSERT_EQ(123u, pg_map.calc_min_last_epoch_clean()); + ASSERT_EQ(123u, pg_map.get_min_last_epoch_clean()); inc = PGMap::Incremental(); inc.version = 3; inc.update_stat(0, 222, os); pg_map.apply_incremental(g_ceph_context, inc); - ASSERT_EQ(222u, pg_map.calc_min_last_epoch_clean()); + ASSERT_EQ(222u, pg_map.get_min_last_epoch_clean()); inc = PGMap::Incremental(); inc.version = 4; inc.update_stat(0, 333, os); inc.update_stat(1, 333, os); pg_map.apply_incremental(g_ceph_context, inc); - ASSERT_EQ(333u, pg_map.calc_min_last_epoch_clean()); + ASSERT_EQ(333u, pg_map.get_min_last_epoch_clean()); ps.last_epoch_clean = 222; inc = PGMap::Incremental(); inc.version = 5; inc.pg_stat_updates[pg_t(1,1)] = ps; pg_map.apply_incremental(g_ceph_context, inc); - ASSERT_EQ(222u, pg_map.calc_min_last_epoch_clean()); + ASSERT_EQ(222u, pg_map.get_min_last_epoch_clean()); ps.last_epoch_clean = 223; inc = PGMap::Incremental(); inc.version = 6; inc.pg_stat_updates[pg_t(1,1)] = ps; pg_map.apply_incremental(g_ceph_context, inc); - ASSERT_EQ(223u, pg_map.calc_min_last_epoch_clean()); + ASSERT_EQ(223u, pg_map.get_min_last_epoch_clean()); ps.last_epoch_clean = 224; inc = PGMap::Incremental(); inc.version = 7; inc.pg_stat_updates[pg_t(2,2)] = ps; pg_map.apply_incremental(g_ceph_context, inc); - ASSERT_EQ(223u, pg_map.calc_min_last_epoch_clean()); + ASSERT_EQ(223u, pg_map.get_min_last_epoch_clean()); ps.last_epoch_clean = 225; inc = PGMap::Incremental(); inc.version = 8; inc.pg_stat_updates[pg_t(1,1)] = ps; pg_map.apply_incremental(g_ceph_context, inc); - ASSERT_EQ(224u, pg_map.calc_min_last_epoch_clean()); + ASSERT_EQ(224u, pg_map.get_min_last_epoch_clean()); }