if (shutdown)
return;
duration.insert(make_pair(op->get_duration(), op));
- arrived.insert(make_pair(op->get_arrived(), op));
+ arrived.insert(make_pair(op->get_initiated(), op));
cleanup(now);
}
while (duration.size() > history_size) {
arrived.erase(make_pair(
- duration.begin()->second->get_arrived(),
+ duration.begin()->second->get_initiated(),
duration.begin()->second));
duration.erase(duration.begin());
}
utime_t too_old = now;
too_old -= complaint_time;
- utime_t oldest_secs = now - ops_in_flight.front()->get_arrived();
+ utime_t oldest_secs = now - ops_in_flight.front()->get_initiated();
dout(10) << "ops_in_flight.size: " << ops_in_flight.size()
<< "; oldest is " << oldest_secs
int slow = 0; // total slow
int warned = 0; // total logged
- while (!i.end() && (*i)->get_arrived() < too_old) {
+ while (!i.end() && (*i)->get_initiated() < too_old) {
slow++;
// exponential backoff of warning intervals
- if (((*i)->get_arrived() +
+ if (((*i)->get_initiated() +
(complaint_time * (*i)->warn_interval_multiplier)) < now) {
// will warn
if (warning_vector.empty())
if (warned > log_threshold)
break;
- utime_t age = now - (*i)->get_arrived();
+ utime_t age = now - (*i)->get_initiated();
stringstream ss;
- ss << "slow request " << age << " seconds old, received at " << (*i)->get_arrived()
+ ss << "slow request " << age << " seconds old, received at " << (*i)->get_initiated()
<< ": " << *((*i)->request) << " currently "
<< ((*i)->current.size() ? (*i)->current : (*i)->state_string());
warning_vector.push_back(ss.str());
uint32_t lb = 1 << (bin-1); // lower bound for this bin
int count = 0;
for (xlist<TrackedOp*>::iterator i = ops_in_flight.begin(); !i.end(); ++i) {
- utime_t age = now - (*i)->get_arrived();
+ utime_t age = now - (*i)->get_initiated();
uint32_t ms = (long)(age * 1000.0);
if (ms >= lb) {
count++;
stringstream name;
_dump_op_descriptor(name);
f->dump_string("description", name.str().c_str()); // this TrackedOp
- f->dump_stream("received_at") << get_arrived();
- f->dump_float("age", now - get_arrived());
+ f->dump_stream("initiated_at") << get_initiated();
+ f->dump_float("age", now - get_initiated());
f->dump_float("duration", get_duration());
{
f->open_array_section("type_data");
Message *request; /// the logical request we are tracking
OpTracker *tracker; /// the tracker we are associated with
+ utime_t initiated_at;
list<pair<utime_t, string> > events; /// list of events and their times
Mutex lock; /// to protect the events list
string current; /// the current state the event is in
uint32_t warn_interval_multiplier; // limits output of a given op warning
- TrackedOp(Message *req, OpTracker *_tracker) :
+ TrackedOp(Message *req, OpTracker *_tracker, const utime_t& initiated) :
xitem(this),
request(req),
tracker(_tracker),
+ initiated_at(initiated),
lock("TrackedOp::lock"),
seq(0),
warn_interval_multiplier(1)
public:
virtual ~TrackedOp() { assert(request); request->put(); }
- utime_t get_arrived() const {
- return request->get_recv_stamp();
+ const utime_t& get_initiated() const {
+ return initiated_at;
}
// This function maybe needs some work; assumes last event is completion time
double get_duration() const {
return events.size() ?
- (events.rbegin()->first - get_arrived()) :
+ (events.rbegin()->first - get_initiated()) :
0.0;
}
Message *get_req() const { return request; }