From 4df4465c12dcf1dc84d125077c4f3e0db95db64f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 7 Feb 2012 09:30:02 -0800 Subject: [PATCH] osd: is_zero() method for stat structs Signed-off-by: Sage Weil --- src/osd/osd_types.h | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index d0ed168f01bcd..65bcb55c1563b 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -675,6 +675,11 @@ struct object_stat_sum_t { num_object_copies = nrep * num_objects; } + bool is_zero() const { + object_stat_sum_t zero; + return memcmp(this, &zero, sizeof(zero)) == 0; + } + void add(const object_stat_sum_t& o); void sub(const object_stat_sum_t& o); @@ -705,6 +710,10 @@ struct object_stat_collection_t { void decode(bufferlist::iterator& bl); static void generate_test_instances(list& o); + bool is_zero() const { + return (cat_sum.empty() && sum.is_zero()); + } + void clear() { sum.clear(); cat_sum.clear(); @@ -727,8 +736,12 @@ struct object_stat_collection_t { sum.sub(o.sum); for (map::const_iterator p = o.cat_sum.begin(); p != o.cat_sum.end(); - ++p) - cat_sum[p->first].sub(p->second); + ++p) { + object_stat_sum_t& s = cat_sum[p->first]; + s.sub(p->second); + if (s.is_zero()) + cat_sum.erase(p->first); + } } }; WRITE_CLASS_ENCODER(object_stat_collection_t) @@ -807,6 +820,12 @@ struct pool_stat_t { ondisk_log_size -= o.ondisk_log_size; } + bool is_zero() const { + return (stats.is_zero() && + log_size == 0 && + ondisk_log_size == 0); + } + void dump(Formatter *f) const; void encode(bufferlist &bl) const; void decode(bufferlist::iterator &bl); -- 2.39.5