enum {
l_throttle_first = 532430,
+ l_throttle_val,
+ l_throttle_max,
l_throttle_get,
l_throttle_get_sum,
l_throttle_get_fail,
assert(m >= 0);
PerfCountersBuilder b(cct, string("throttle-") + name, l_throttle_first, l_throttle_last);
+ b.add_u64_counter(l_throttle_val, "val");
+ b.add_u64_counter(l_throttle_max, "max");
b.add_u64_counter(l_throttle_get, "get");
b.add_u64_counter(l_throttle_get_sum, "get_sum");
b.add_u64_counter(l_throttle_get_fail, "get_fail");
logger = b.create_perf_counters();
cct->get_perfcounters_collection()->add(logger);
+ logger->set(l_throttle_max, max);
}
Throttle::~Throttle()
delete logger;
}
+void Throttle::_reset_max(int64_t m)
+{
+ if (m < max && !cond.empty())
+ cond.front()->SignalOne();
+ max = m;
+ logger->set(l_throttle_max, max);
+}
+
bool Throttle::_wait(int64_t c)
{
utime_t start;
assert(c >= 0);
Mutex::Locker l(lock);
ldout(cct, 5) << "take " << c << dendl;
+ count += c;
logger->inc(l_throttle_take);
logger->inc(l_throttle_take_sum, c);
- count += c;
+ logger->set(l_throttle_val, count);
return count;
}
_reset_max(m);
}
bool waited = _wait(c);
+ count += c;
logger->inc(l_throttle_get);
logger->inc(l_throttle_get_sum, c);
- count += c;
+ logger->set(l_throttle_val, count);
return waited;
}
count += c;
logger->inc(l_throttle_get);
logger->inc(l_throttle_get_sum, c);
+ logger->set(l_throttle_val, count);
return true;
}
}
assert(count >= 0); //if count goes negative, we failed somewhere!
logger->inc(l_throttle_put);
logger->inc(l_throttle_put_sum, c);
+ logger->set(l_throttle_val, count);
}
return count;
}