assert(inc.version == version+1);
version++;
- utime_t delta_t;
- delta_t = inc.stamp;
- delta_t -= stamp;
- stamp = inc.stamp;
-
pool_stat_t pg_sum_old = pg_sum;
mempool::pgmap::unordered_map<uint64_t, pool_stat_t> pg_pool_sum_old;
}
}
- // calculate a delta, and average over the last 2 deltas.
- pool_stat_t d = pg_sum;
- d.stats.sub(pg_sum_old.stats);
- pg_sum_deltas.push_back(make_pair(d, delta_t));
- stamp_delta += delta_t;
-
- pg_sum_delta.stats.add(d.stats);
- auto smooth_intervals =
- cct ? cct->_conf->get_val<uint64_t>("mon_stat_smooth_intervals") : 1;
- if (pg_sum_deltas.size() > smooth_intervals) {
- pg_sum_delta.stats.sub(pg_sum_deltas.front().first.stats);
- stamp_delta -= pg_sum_deltas.front().second;
- pg_sum_deltas.pop_front();
+ // skip calculating delta while sum was not synchronized
+ if (!stamp.is_zero() && !pg_sum_old.stats.sum.is_zero()) {
+ utime_t delta_t;
+ delta_t = inc.stamp;
+ delta_t -= stamp;
+ // calculate a delta, and average over the last 2 deltas.
+ pool_stat_t d = pg_sum;
+ d.stats.sub(pg_sum_old.stats);
+ pg_sum_deltas.push_back(make_pair(d, delta_t));
+ stamp_delta += delta_t;
+ pg_sum_delta.stats.add(d.stats);
+ auto smooth_intervals =
+ cct ? cct->_conf->get_val<uint64_t>("mon_stat_smooth_intervals") : 1;
+ if (pg_sum_deltas.size() > smooth_intervals) {
+ pg_sum_delta.stats.sub(pg_sum_deltas.front().first.stats);
+ stamp_delta -= pg_sum_deltas.front().second;
+ pg_sum_deltas.pop_front();
+ }
}
+ stamp = inc.stamp;
update_pool_deltas(cct, inc.stamp, pg_pool_sum_old);
*/
pool_stat_t d = current_pool_sum;
d.stats.sub(old_pool_sum.stats);
- delta_avg_list->push_back(make_pair(d,delta_t));
- *result_ts_delta += delta_t;
/* Aggregate current delta, and take out the last seen delta (if any) to
* average it out.
+ * Skip calculating delta while sum was not synchronized.
*/
- result_pool_delta->stats.add(d.stats);
+ if(!old_pool_sum.stats.sum.is_zero()) {
+ delta_avg_list->push_back(make_pair(d,delta_t));
+ *result_ts_delta += delta_t;
+ result_pool_delta->stats.add(d.stats);
+ }
size_t s = cct ? cct->_conf->get_val<uint64_t>("mon_stat_smooth_intervals") : 1;
if (delta_avg_list->size() > s) {
result_pool_delta->stats.sub(delta_avg_list->front().first.stats);