cluster_messenger(osd->cluster_messenger),
client_messenger(osd->client_messenger),
logger(osd->logger),
+ recoverystate_perf(osd->recoverystate_perf),
monc(osd->monc),
op_wq(osd->op_wq),
peering_wq(osd->peering_wq),
client_messenger(external_messenger),
monc(mc),
logger(NULL),
+ recoverystate_perf(NULL),
store(NULL),
clog(external_messenger->cct, client_messenger, &mc->monmap, LogClient::NO_FLAGS),
whoami(id),
delete authorize_handler_cluster_registry;
delete authorize_handler_service_registry;
delete class_handler;
+ g_ceph_context->get_perfcounters_collection()->remove(recoverystate_perf);
g_ceph_context->get_perfcounters_collection()->remove(logger);
+ delete recoverystate_perf;
delete logger;
delete store;
}
osdmap = get_map(superblock.current_epoch);
check_osdmap_features();
+ create_recoverystate_perf();
+
bind_epoch = osdmap->get_epoch();
// load up pgs (as they previously existed)
osd_plb.add_u64_counter(l_osd_mape_dup, "map_message_epoch_dups"); // dup osdmap epochs
osd_plb.add_u64_counter(l_osd_waiting_for_map,
"messages_delayed_for_map"); // dup osdmap epochs
- osd_plb.add_time_avg(l_osd_peering_latency, "peering_latency");
logger = osd_plb.create_perf_counters();
g_ceph_context->get_perfcounters_collection()->add(logger);
}
+void OSD::create_recoverystate_perf()
+{
+ dout(10) << "create_recoverystate_perf" << dendl;
+
+ PerfCountersBuilder rs_perf(g_ceph_context, "recoverystate_perf", rs_first, rs_last);
+
+ rs_perf.add_time_avg(rs_initial_latency, "initial_latency");
+ rs_perf.add_time_avg(rs_started_latency, "started_latency");
+ rs_perf.add_time_avg(rs_reset_latency, "reset_latency");
+ rs_perf.add_time_avg(rs_start_latency, "start_latency");
+ rs_perf.add_time_avg(rs_primary_latency, "primary_latency");
+ rs_perf.add_time_avg(rs_peering_latency, "peering_latency");
+ rs_perf.add_time_avg(rs_backfilling_latency, "backfilling_latency");
+ rs_perf.add_time_avg(rs_waitremotebackfillreserved_latency, "waitremotebackfillreserved_latency");
+ rs_perf.add_time_avg(rs_waitlocalbackfillreserved_latency, "waitlocalbackfillreserved_latency");
+ rs_perf.add_time_avg(rs_notbackfilling_latency, "notbackfilling_latency");
+ rs_perf.add_time_avg(rs_repnotrecovering_latency, "repnotrecovering_latency");
+ rs_perf.add_time_avg(rs_repwaitrecoveryreserved_latency, "repwaitrecoveryreserved_latency");
+ rs_perf.add_time_avg(rs_repwaitbackfillreserved_latency, "repwaitbackfillreserved_latency");
+ rs_perf.add_time_avg(rs_RepRecovering_latency, "RepRecovering_latency");
+ rs_perf.add_time_avg(rs_activating_latency, "activating_latency");
+ rs_perf.add_time_avg(rs_waitlocalrecoveryreserved_latency, "waitlocalrecoveryreserved_latency");
+ rs_perf.add_time_avg(rs_waitremoterecoveryreserved_latency, "waitremoterecoveryreserved_latency");
+ rs_perf.add_time_avg(rs_recovering_latency, "recovering_latency");
+ rs_perf.add_time_avg(rs_recovered_latency, "recovered_latency");
+ rs_perf.add_time_avg(rs_clean_latency, "clean_latency");
+ rs_perf.add_time_avg(rs_active_latency, "active_latency");
+ rs_perf.add_time_avg(rs_replicaactive_latency, "replicaactive_latency");
+ rs_perf.add_time_avg(rs_stray_latency, "stray_latency");
+ rs_perf.add_time_avg(rs_getinfo_latency, "getinfo_latency");
+ rs_perf.add_time_avg(rs_getlog_latency, "getlog_latency");
+ rs_perf.add_time_avg(rs_waitactingchange_latency, "waitactingchange_latency");
+ rs_perf.add_time_avg(rs_incomplete_latency, "incomplete_latency");
+ rs_perf.add_time_avg(rs_getmissing_latency, "getmissing_latency");
+ rs_perf.add_time_avg(rs_waitupthru_latency, "waitupthru_latency");
+
+ recoverystate_perf = rs_perf.create_perf_counters();
+ g_ceph_context->get_perfcounters_collection()->add(recoverystate_perf);
+}
+
void OSD::suicide(int exitcode)
{
if (g_conf->filestore_blackhole) {
void PG::RecoveryState::Initial::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_initial_latency, dur);
}
/*------Started-------*/
void PG::RecoveryState::Started::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_started_latency, dur);
}
/*--------Reset---------*/
void PG::RecoveryState::Reset::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_reset_latency, dur);
}
/*-------Start---------*/
void PG::RecoveryState::Start::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_start_latency, dur);
}
/*---------Primary--------*/
context< RecoveryMachine >().log_exit(state_name, enter_time);
PG *pg = context< RecoveryMachine >().pg;
pg->want_acting.clear();
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_primary_latency, dur);
}
/*---------Peering--------*/
pg->clear_probe_targets();
utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
- pg->osd->logger->tinc(l_osd_peering_latency, dur);
+ pg->osd->recoverystate_perf->tinc(rs_peering_latency, dur);
}
pg->backfill_reserved = false;
pg->backfill_reserving = false;
pg->state_clear(PG_STATE_BACKFILL);
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_backfilling_latency, dur);
}
/*--WaitRemoteBackfillReserved--*/
void PG::RecoveryState::WaitRemoteBackfillReserved::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_waitremotebackfillreserved_latency, dur);
}
boost::statechart::result
void PG::RecoveryState::WaitLocalBackfillReserved::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_waitlocalbackfillreserved_latency, dur);
}
/*----NotBackfilling------*/
void PG::RecoveryState::NotBackfilling::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_notbackfilling_latency, dur);
}
/*---RepNotRecovering----*/
void PG::RecoveryState::RepNotRecovering::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_repnotrecovering_latency, dur);
}
/*---RepWaitRecoveryReserved--*/
void PG::RecoveryState::RepWaitRecoveryReserved::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_repwaitrecoveryreserved_latency, dur);
}
/*-RepWaitBackfillReserved*/
void PG::RecoveryState::RepWaitBackfillReserved::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_repwaitbackfillreserved_latency, dur);
}
boost::statechart::result
context< RecoveryMachine >().log_exit(state_name, enter_time);
PG *pg = context< RecoveryMachine >().pg;
pg->osd->remote_reserver.cancel_reservation(pg->info.pgid);
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_RepRecovering_latency, dur);
}
/*------Activating--------*/
void PG::RecoveryState::Activating::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_activating_latency, dur);
}
PG::RecoveryState::WaitLocalRecoveryReserved::WaitLocalRecoveryReserved(my_context ctx)
void PG::RecoveryState::WaitLocalRecoveryReserved::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_waitlocalrecoveryreserved_latency, dur);
}
PG::RecoveryState::WaitRemoteRecoveryReserved::WaitRemoteRecoveryReserved(my_context ctx)
void PG::RecoveryState::WaitRemoteRecoveryReserved::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_waitremoterecoveryreserved_latency, dur);
}
PG::RecoveryState::Recovering::Recovering(my_context ctx)
void PG::RecoveryState::Recovering::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_recovering_latency, dur);
}
PG::RecoveryState::Recovered::Recovered(my_context ctx)
void PG::RecoveryState::Recovered::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_recovered_latency, dur);
}
PG::RecoveryState::Clean::Clean(my_context ctx)
context< RecoveryMachine >().log_exit(state_name, enter_time);
PG *pg = context< RecoveryMachine >().pg;
pg->state_clear(PG_STATE_CLEAN);
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_clean_latency, dur);
}
/*---------Active---------*/
pg->state_clear(PG_STATE_BACKFILL_WAIT);
pg->state_clear(PG_STATE_RECOVERY_WAIT);
pg->state_clear(PG_STATE_REPLAY);
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_active_latency, dur);
}
/*------ReplicaActive-----*/
context< RecoveryMachine >().log_exit(state_name, enter_time);
PG *pg = context< RecoveryMachine >().pg;
pg->osd->remote_reserver.cancel_reservation(pg->info.pgid);
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_replicaactive_latency, dur);
}
/*-------Stray---*/
void PG::RecoveryState::Stray::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_stray_latency, dur);
}
/*--------GetInfo---------*/
void PG::RecoveryState::GetInfo::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_getinfo_latency, dur);
}
/*------GetLog------------*/
void PG::RecoveryState::GetLog::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_getlog_latency, dur);
}
/*------WaitActingChange--------*/
void PG::RecoveryState::WaitActingChange::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_waitactingchange_latency, dur);
}
/*------Incomplete--------*/
PG *pg = context< RecoveryMachine >().pg;
pg->state_clear(PG_STATE_INCOMPLETE);
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_incomplete_latency, dur);
}
/*------GetMissing--------*/
void PG::RecoveryState::GetMissing::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_getmissing_latency, dur);
}
/*---WaitFlushedPeering---*/
void PG::RecoveryState::WaitUpThru::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
+ PG *pg = context< RecoveryMachine >().pg;
+ utime_t dur = ceph_clock_now(g_ceph_context) - enter_time;
+ pg->osd->recoverystate_perf->tinc(rs_waitupthru_latency, dur);
}
/*----RecoveryState::RecoveryMachine Methods-----*/