-// static logger
-Mutex client_logger_lock("client_logger_lock");
-PerfCounters *client_counters = 0;
-
-
void client_flush_set_callback(void *p, ObjectCacher::ObjectSet *oset)
{
Client *client = (Client*)p;
// cons/des
Client::Client(Messenger *m, MonClient *mc)
- : Dispatcher(m->cct), cct(m->cct), timer(m->cct, client_lock),
+ : Dispatcher(m->cct), cct(m->cct), logger(NULL), timer(m->cct, client_lock),
ino_invalidate_cb(NULL),
client_lock("Client::client_lock")
{
if (osdmap) { delete osdmap; osdmap = 0; }
if (mdsmap) { delete mdsmap; mdsmap = 0; }
+ delete logger;
}
monclient->sub_want("mdsmap", 0, 0);
monclient->sub_want("osdmap", 0, CEPH_SUBSCRIBE_ONETIME);
- // do logger crap only once per process.
- static bool did_init = false;
- if (!did_init) {
- did_init = true;
-
- // logger?
- client_logger_lock.Lock();
- PerfCountersBuilder plb(cct, "client", l_c_first, l_c_last);
- if (client_counters == 0) {
- plb.add_fl_avg(l_c_reply, "reply");
- plb.add_fl_avg(l_c_lat, "lat");
- plb.add_fl_avg(l_c_wrlat, "wrlat");
- plb.add_fl_avg(l_c_owrlat, "owrlat");
- plb.add_fl_avg(l_c_ordlat, "ordlat");
-
- client_counters = plb.create_perf_counters();
- }
- client_logger_lock.Unlock();
- }
+ // logger
+ PerfCountersBuilder plb(cct, "client", l_c_first, l_c_last);
+ plb.add_fl_avg(l_c_reply, "reply");
+ plb.add_fl_avg(l_c_lat, "lat");
+ plb.add_fl_avg(l_c_wrlat, "wrlat");
+ plb.add_fl_avg(l_c_owrlat, "owrlat");
+ plb.add_fl_avg(l_c_ordlat, "ordlat");
+ logger = plb.create_perf_counters();
+ cct->get_perfcounters_collection()->add(logger);
return r;
}
client_lock.Unlock();
monclient->shutdown();
messenger->shutdown();
+
+ cct->get_perfcounters_collection()->remove(logger);
+ delete logger;
+ logger = NULL;
}
utime_t lat = ceph_clock_now(cct);
lat -= request->sent_stamp;
ldout(cct, 20) << "lat " << lat << dendl;
- client_counters->finc(l_c_lat,(double)lat);
- client_counters->finc(l_c_reply,(double)lat);
+ logger->finc(l_c_lat,(double)lat);
+ logger->finc(l_c_reply,(double)lat);
request->put();
// time
utime_t lat = ceph_clock_now(cct);
lat -= start;
- client_counters->finc(l_c_wrlat,(double)lat);
+ logger->finc(l_c_wrlat,(double)lat);
// assume success for now. FIXME.
uint64_t totalwritten = size;
lat -= start;
dout(0) << " trace " << tfile << " loop " << (i+1) << "/" << iarg1 << " done in " << (double)lat << " seconds" << dendl;
- if (client_counters
+ if (client->logger
&& i > 0
&& i < iarg1-1
) {
- //client_counters->finc("trsum", (double)lat);
- //client_counters->inc("trnum");
+ //client->logger->finc("trsum", (double)lat);
+ //client->logger->inc("trnum");
}
}
dout(1) << "done " << dendl;
utime_t lat = ceph_clock_now(g_ceph_context);
lat -= start;
- if (client_counters) {
+ if (client->logger) {
if (write)
- client_counters->fset(l_c_owrlat, lat);
+ client->logger->fset(l_c_owrlat, lat);
else
- client_counters->fset(l_c_ordlat, lat);
+ client->logger->fset(l_c_ordlat, lat);
}
}