summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-07-17 21:52:50 -0700
committerSage Weil <sage@inktank.com>2013-07-19 10:31:48 -0700
commit2e09b6e0bc1e5cf0aee5e14d7359fba991a80e74 (patch)
tree1988977ba9da249ddb2aec0ce36a438dd2f38e17
parentb4db58865f537601a89753a37b494f8ccb1e1b6f (diff)
downloadceph-2e09b6e0bc1e5cf0aee5e14d7359fba991a80e74.tar.gz
osd: add floor() method to pg/osd stat structs
We often want to maintain a nonnegative value. We generalize this to floors other than zero only because it makes the function call make intuitive sense; I don't think it is at all useful. Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osd/osd_types.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h
index 66394c60a0c..3a6db4d8315 100644
--- a/src/osd/osd_types.h
+++ b/src/osd/osd_types.h
@@ -888,6 +888,28 @@ struct object_stat_sum_t {
num_keys_recovered(0)
{}
+ void floor(int64_t f) {
+#define FLOOR(x) if (x < f) x = f
+ FLOOR(num_bytes);
+ FLOOR(num_objects);
+ FLOOR(num_object_clones);
+ FLOOR(num_object_copies);
+ FLOOR(num_objects_missing_on_primary);
+ FLOOR(num_objects_degraded);
+ FLOOR(num_objects_unfound);
+ FLOOR(num_rd);
+ FLOOR(num_rd_kb);
+ FLOOR(num_wr);
+ FLOOR(num_wr_kb);
+ FLOOR(num_scrub_errors);
+ FLOOR(num_shallow_scrub_errors);
+ FLOOR(num_deep_scrub_errors);
+ FLOOR(num_objects_recovered);
+ FLOOR(num_bytes_recovered);
+ FLOOR(num_keys_recovered);
+#undef FLOOR
+ }
+
void clear() {
memset(this, 0, sizeof(*this));
}
@@ -940,6 +962,12 @@ struct object_stat_collection_t {
cat_sum.clear();
}
+ void floor(int64_t f) {
+ sum.floor(f);
+ for (map<string,object_stat_sum_t>::iterator p = cat_sum.begin(); p != cat_sum.end(); ++p)
+ p->second.floor(f);
+ }
+
void add(const object_stat_sum_t& o, const string& cat) {
sum.add(o);
if (cat.length())
@@ -1031,6 +1059,14 @@ struct pg_stat_t {
return make_pair(reported_epoch, reported_seq);
}
+ void floor(int64_t f) {
+ stats.floor(f);
+ if (log_size < f)
+ log_size = f;
+ if (ondisk_log_size < f)
+ ondisk_log_size = f;
+ }
+
void add(const pg_stat_t& o) {
stats.add(o.stats);
log_size += o.log_size;
@@ -1060,6 +1096,14 @@ struct pool_stat_t {
pool_stat_t() : log_size(0), ondisk_log_size(0)
{ }
+ void floor(int64_t f) {
+ stats.floor(f);
+ if (log_size < f)
+ log_size = f;
+ if (ondisk_log_size < f)
+ ondisk_log_size = f;
+ }
+
void add(const pg_stat_t& o) {
stats.add(o.stats);
log_size += o.log_size;