void CDir::_tmap_fetched(bufferlist& bl, const string& want_dn, int r)
{
- LogClient &clog = cache->mds->clog;
+ LogChannelRef clog = cache->mds->clog;
dout(10) << "_tmap_fetched " << bl.length() << " bytes for " << *this
<< " want_dn=" << want_dn << dendl;
::decode(omap, p);
if (!p.end()) {
- clog.warn() << "tmap buffer of dir " << dirfrag() << " has "
+ clog->warn() << "tmap buffer of dir " << dirfrag() << " has "
<< bl.length() - p.get_off() << " extra bytes\n";
}
bl.clear();
void CDir::_omap_fetched(bufferlist& hdrbl, map<string, bufferlist>& omap,
const string& want_dn, int r)
{
- LogClient &clog = cache->mds->clog;
+ LogChannelRef clog = cache->mds->clog;
dout(10) << "_fetched header " << hdrbl.length() << " bytes "
<< omap.size() << " keys for " << *this
<< " want_dn=" << want_dn << dendl;
}
dout(0) << "_fetched missing object for " << *this << dendl;
- clog.error() << "dir " << dirfrag() << " object missing on disk; some files may be lost\n";
+ clog->error() << "dir " << dirfrag() << " object missing on disk; some files may be lost\n";
log_mark_dirty();
bufferlist::iterator p = hdrbl.begin();
::decode(got_fnode, p);
if (!p.end()) {
- clog.warn() << "header buffer of dir " << dirfrag() << " has "
+ clog->warn() << "header buffer of dir " << dirfrag() << " has "
<< hdrbl.length() - p.get_off() << " extra bytes\n";
}
}
string dirpath, inopath;
this->inode->make_path_string(dirpath);
in->make_path_string(inopath);
- clog.error() << "loaded dup inode " << inode_data.inode.ino
+ clog->error() << "loaded dup inode " << inode_data.inode.ino
<< " [" << first << "," << last << "] v" << inode_data.inode.version
<< " at " << dirpath << "/" << dname
<< ", but inode " << in->vino() << " v" << in->inode.version
/* for more info on scatterlocks, see comments by Locker::scatter_writebehind */
void CInode::finish_scatter_gather_update(int type)
{
- LogClient &clog = mdcache->mds->clog;
+ LogChannelRef clog = mdcache->mds->clog;
dout(10) << "finish_scatter_gather_update " << type << " on " << *this << dendl;
assert(is_auth());
if (pf->fragstat.nfiles < 0 ||
pf->fragstat.nsubdirs < 0) {
- clog.error() << "bad/negative dir size on "
+ clog->error() << "bad/negative dir size on "
<< dir->dirfrag() << " " << pf->fragstat << "\n";
assert(!"bad/negative fragstat" == g_conf->mds_verify_scatter);
break;
}
if (all) {
- clog.error() << "unmatched fragstat on " << ino() << ", inode has "
+ clog->error() << "unmatched fragstat on " << ino() << ", inode has "
<< pi->dirstat << ", dirfrags have " << dirstat << "\n";
assert(!"unmatched fragstat" == g_conf->mds_verify_scatter);
// trust the dirfrags for now
if (pi->dirstat.nfiles < 0 ||
pi->dirstat.nsubdirs < 0) {
- clog.error() << "bad/negative fragstat on " << ino()
+ clog->error() << "bad/negative fragstat on " << ino()
<< ", inode has " << pi->dirstat << "\n";
assert(!"bad/negative fragstat" == g_conf->mds_verify_scatter);
break;
}
if (all) {
- clog.error() << "unmatched rstat on " << ino() << ", inode has "
+ clog->error() << "unmatched rstat on " << ino() << ", inode has "
<< pi->rstat << ", dirfrags have " << rstat << "\n";
assert(!"unmatched rstat" == g_conf->mds_verify_scatter);
// trust the dirfrag for now
free.erase(id);
projected_free.erase(id);
} else {
- mds->clog.error() << "journal replay alloc " << id
+ mds->clog->error() << "journal replay alloc " << id
<< " not in free " << free << "\n";
}
projected_version = ++version;
free.subtract(ids);
projected_free.subtract(ids);
} else {
- mds->clog.error() << "journal replay alloc " << ids << ", only "
+ mds->clog->error() << "journal replay alloc " << ids << ", only "
<< is << " is in free " << free << "\n";
free.subtract(is);
projected_free.subtract(is);
if (pi->dirstat.size() < 0)
assert(!"negative dirstat size" == g_conf->mds_verify_scatter);
if (pi->dirstat.size() != pf->fragstat.size()) {
- mds->clog.error() << "unmatched fragstat size on single dirfrag "
+ mds->clog->error() << "unmatched fragstat size on single dirfrag "
<< parent->dirfrag() << ", inode has " << pi->dirstat
<< ", dirfrag has " << pf->fragstat << "\n";
if (parent->get_frag() == frag_t()) { // i.e., we are the only frag
if (pi->rstat.rbytes != pf->rstat.rbytes) {
- mds->clog.error() << "unmatched rstat rbytes on single dirfrag "
+ mds->clog->error() << "unmatched rstat rbytes on single dirfrag "
<< parent->dirfrag() << ", inode has " << pi->rstat
<< ", dirfrag has " << pf->rstat << "\n";
cap_imports.clear();
if (warn_str.peek() != EOF) {
- mds->clog.warn() << "failed to reconnect caps for missing inodes:" << "\n";
- mds->clog.warn(warn_str);
+ mds->clog->warn() << "failed to reconnect caps for missing inodes:" << "\n";
+ mds->clog->warn(warn_str);
}
}
++q)
warn_str << " client." << q->first << " snapid " << q->second << "\n";
}
- mds->clog.warn() << "open_snap_parents has:" << "\n";
- mds->clog.warn(warn_str);
+ mds->clog->warn() << "open_snap_parents has:" << "\n";
+ mds->clog->warn(warn_str);
}
assert(rejoin_waiters.empty());
assert(missing_snap_parents.empty());
standby_replaying(false),
messenger(m),
monc(mc),
- clog(m->cct, messenger, &mc->monmap, LogClient::NO_FLAGS),
+ log_client(m->cct, messenger, &mc->monmap, LogClient::NO_FLAGS),
op_tracker(cct, m->cct->_conf->mds_enable_op_tracker),
finisher(cct),
sessionmap(this), asok_hook(NULL) {
last_tid = 0;
+ clog = log_client.create_channel();
+
monc->set_messenger(messenger);
mdsmap = new MDSMap;
finisher.start();
// tell monc about log_client so it will know about mon session resets
- monc->set_log_client(&clog);
+ monc->set_log_client(&log_client);
int r = monc->authenticate();
if (r < 0) {
for (vector<string>::iterator i = warnings.begin();
i != warnings.end();
++i) {
- clog.warn() << *i;
+ clog->warn() << *i;
}
}
return;
else if (m->cmd[0] == "cpu_profiler") {
ostringstream ss;
cpu_profiler_handle_command(m->cmd, ss);
- clog.info() << ss.str();
+ clog->info() << ss.str();
}
else if (m->cmd[0] == "heap") {
if (!ceph_using_tcmalloc())
- clog.info() << "tcmalloc not enabled, can't use heap profiler commands\n";
+ clog->info() << "tcmalloc not enabled, can't use heap profiler commands\n";
else {
ostringstream ss;
vector<std::string> cmdargs;
cmdargs.insert(cmdargs.begin(), m->cmd.begin()+1, m->cmd.end());
ceph_heap_profiler_handle_command(cmdargs, ss);
- clog.info() << ss.str();
+ clog->info() << ss.str();
}
} else dout(0) << "unrecognized command! " << m->cmd << dendl;
m->put();
MDSMap *mdsmap;
Objecter *objecter;
Filer *filer; // for reading/writing to/from osds
- LogClient clog;
+ LogClient log_client;
+ LogChannelRef clog;
// sub systems
Server *server;
// blech
if (pi->client_ranges.size() && !pi->get_max_size()) {
- mds->clog.warn() << "bad client_range " << pi->client_ranges
+ mds->clog->warn() << "bad client_range " << pi->client_ranges
<< " on ino " << pi->ino << "\n";
}
utime_t age = now;
age -= session->last_cap_renew;
- mds->clog.info() << "closing stale session " << session->info.inst
+ mds->clog->info() << "closing stale session " << session->info.inst
<< " after " << age << "\n";
dout(10) << "autoclosing stale session " << session->info.inst << " last " << session->last_cap_renew << dendl;
kill_session(session, NULL);
if (!mds->is_reconnect()) {
// XXX maybe in the future we can do better than this?
dout(1) << " no longer in reconnect state, ignoring reconnect, sending close" << dendl;
- mds->clog.info() << "denied reconnect attempt (mds is "
+ mds->clog->info() << "denied reconnect attempt (mds is "
<< ceph_mds_state_name(mds->get_state())
<< ") from " << m->get_source_inst()
<< " after " << delay << " (allowed interval " << g_conf->mds_reconnect_timeout << ")\n";
if (session->is_closed()) {
dout(1) << " session is closed, ignoring reconnect, sending close" << dendl;
- mds->clog.info() << "denied reconnect attempt (mds is "
+ mds->clog->info() << "denied reconnect attempt (mds is "
<< ceph_mds_state_name(mds->get_state())
<< ") from " << m->get_source_inst() << " (session is closed)\n";
m->get_connection()->send_message(new MClientSession(CEPH_SESSION_CLOSE));
// notify client of success with an OPEN
m->get_connection()->send_message(new MClientSession(CEPH_SESSION_OPEN));
- mds->clog.debug() << "reconnect by " << session->info.inst << " after " << delay << "\n";
+ mds->clog->debug() << "reconnect by " << session->info.inst << " after " << delay << "\n";
// snaprealms
for (vector<ceph_mds_snaprealm_reconnect>::iterator p = m->realms.begin();
if (useino && useino != in->inode.ino) {
dout(0) << "WARNING: client specified " << useino << " and i allocated " << in->inode.ino << dendl;
- mds->clog.error() << mdr->client_request->get_source()
+ mds->clog->error() << mdr->client_request->get_source()
<< " specified ino " << useino
<< " but mds." << mds->whoami << " allocated " << in->inode.ino << "\n";
//assert(0); // just for now.
ss << "EMetaBlob.replay FIXME had dentry linked to wrong inode " << *dn
<< " " << *dn->get_linkage()->get_inode() << " should be " << p->inode.ino;
dout(0) << ss.str() << dendl;
- mds->clog.warn(ss);
+ mds->clog->warn(ss);
}
dir->unlink_inode(dn);
}
ss << "EMetaBlob.replay FIXME had dentry linked to wrong inode " << *dn
<< " " << *dn->get_linkage()->get_inode() << " should be " << p->inode.ino;
dout(0) << ss.str() << dendl;
- mds->clog.warn(ss);
+ mds->clog->warn(ss);
}
dir->unlink_inode(dn);
}
// [repair bad inotable updates]
if (inotablev > mds->inotable->get_version()) {
- mds->clog.error() << "journal replay inotablev mismatch "
+ mds->clog->error() << "journal replay inotablev mismatch "
<< mds->inotable->get_version() << " -> " << inotablev << "\n";
mds->inotable->force_replay_version(inotablev);
}
if (used_preallocated_ino) {
if (session->info.prealloc_inos.empty()) {
// HRM: badness in the journal
- mds->clog.warn() << " replayed op " << client_reqs << " on session for "
+ mds->clog->warn() << " replayed op " << client_reqs << " on session for "
<< client_name << " with empty prealloc_inos\n";
} else {
inodeno_t next = session->next_ino();
inodeno_t i = session->take_ino(used_preallocated_ino);
if (next != i)
- mds->clog.warn() << " replayed op " << client_reqs << " used ino " << i
+ mds->clog->warn() << " replayed op " << client_reqs << " used ino " << i
<< " but session next is " << next << "\n";
assert(i == used_preallocated_ino);
session->info.used_inos.clear();
}
assert(sessionmapv == mds->sessionmap.version);
} else {
- mds->clog.error() << "journal replay sessionmap v " << sessionmapv
+ mds->clog->error() << "journal replay sessionmap v " << sessionmapv
<< " -(1|2) > table " << mds->sessionmap.version << "\n";
assert(g_conf->mds_wipe_sessions);
mds->sessionmap.wipe();
dout(10) << " reset session " << session->info.inst << " (they reconnected)" << dendl;
}
} else {
- mds->clog.error() << "replayed stray Session close event for " << client_inst
+ mds->clog->error() << "replayed stray Session close event for " << client_inst
<< " from time " << stamp << ", ignoring";
}
}
++p) {
CDir *dir = mds->mdcache->get_dirfrag(p->first);
if (!dir) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " subtree root " << p->first << " not in cache";
++errors;
continue;
}
if (!mds->mdcache->is_subtree(dir)) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " subtree root " << p->first << " not a subtree in cache";
++errors;
continue;
}
if (dir->get_dir_auth().first != mds->whoami) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " subtree root " << p->first
<< " is not mine in cache (it's " << dir->get_dir_auth() << ")";
++errors;
for (vector<dirfrag_t>::iterator q = p->second.begin(); q != p->second.end(); ++q) {
CDir *b = mds->mdcache->get_dirfrag(*q);
if (!b) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " subtree " << p->first << " bound " << *q << " not in cache";
++errors;
continue;
}
if (bounds.count(b) == 0) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " subtree " << p->first << " bound " << *q << " not a bound in cache";
++errors;
continue;
bounds.erase(b);
}
for (set<CDir*>::iterator q = bounds.begin(); q != bounds.end(); ++q) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " subtree " << p->first << " has extra bound in cache " << (*q)->dirfrag();
++errors;
}
if (ambiguous_subtrees.count(p->first)) {
if (!mds->mdcache->have_ambiguous_import(p->first)) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " subtree " << p->first << " is ambiguous but is not in our cache";
++errors;
}
} else {
if (mds->mdcache->have_ambiguous_import(p->first)) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " subtree " << p->first << " is not ambiguous but is in our cache";
++errors;
}
if (dir->get_dir_auth().first != mds->whoami)
continue;
if (subtrees.count(dir->dirfrag()) == 0) {
- mds->clog.error() << " replayed ESubtreeMap at " << get_start_off()
+ mds->clog->error() << " replayed ESubtreeMap at " << get_start_off()
<< " does not include cache subtree " << dir->dirfrag();
++errors;
}
OSDService::OSDService(OSD *osd) :
osd(osd),
cct(osd->cct),
- whoami(osd->whoami), store(osd->store), clog(osd->clog),
+ whoami(osd->whoami), store(osd->store),
+ log_client(osd->log_client), clog(osd->clog),
pg_recovery_stats(osd->pg_recovery_stats),
infos_oid(OSD::make_infos_oid()),
cluster_messenger(osd->cluster_messenger),
}
last_msg = now;
if (cur_state == FULL)
- clog.error() << "OSD full dropping all updates " << (int)(ratio * 100) << "% full";
+ clog->error() << "OSD full dropping all updates " << (int)(ratio * 100) << "% full";
else
- clog.warn() << "OSD near full (" << (int)(ratio * 100) << "%)";
+ clog->warn() << "OSD near full (" << (int)(ratio * 100) << "%)";
}
bool OSDService::check_failsafe_full()
}
dout(7) << *pg << " misdirected op in " << m->get_map_epoch() << dendl;
- clog.warn() << m->get_source_inst() << " misdirected " << m->get_reqid()
+ clog->warn() << m->get_source_inst() << " misdirected " << m->get_reqid()
<< " pg " << m->get_pg()
<< " to osd." << whoami
<< " not " << pg->acting
logger(NULL),
recoverystate_perf(NULL),
store(store_),
- clog(cct, client_messenger, &mc->monmap, LogClient::NO_FLAGS),
+ log_client(cct, client_messenger, &mc->monmap, LogClient::NO_FLAGS),
+ clog(log_client.create_channel()),
whoami(id),
dev_path(dev), journal_path(jdev),
dispatch_running(false),
goto out;
// tell monc about log_client so it will know about mon session resets
- monc->set_log_client(&clog);
+ monc->set_log_client(&log_client);
osd_tp.start();
osd_op_tp.start();
for (vector<string>::iterator i = warnings.begin();
i != warnings.end();
++i) {
- clog.warn() << *i;
+ clog->warn() << *i;
}
}
return;
rs = ss.str();
odata.append(ds);
dout(0) << "do_command r=" << r << " " << rs << dendl;
- clog.info() << rs << "\n";
+ clog->info() << rs << "\n";
if (con) {
MCommandReply *reply = new MCommandReply(r, rs);
reply->set_tid(tid);
if (service.is_preparing_to_stop() || service.is_stopping()) {
service.got_stop_ack();
} else {
- clog.warn() << "map e" << osdmap->get_epoch()
+ clog->warn() << "map e" << osdmap->get_epoch()
<< " wrongly marked me down";
}
}
else if (!osdmap->get_addr(whoami).probably_equals(client_messenger->get_myaddr()))
- clog.error() << "map e" << osdmap->get_epoch()
+ clog->error() << "map e" << osdmap->get_epoch()
<< " had wrong client addr (" << osdmap->get_addr(whoami)
<< " != my " << client_messenger->get_myaddr() << ")";
else if (!osdmap->get_cluster_addr(whoami).probably_equals(cluster_messenger->get_myaddr()))
- clog.error() << "map e" << osdmap->get_epoch()
+ clog->error() << "map e" << osdmap->get_epoch()
<< " had wrong cluster addr (" << osdmap->get_cluster_addr(whoami)
<< " != my " << cluster_messenger->get_myaddr() << ")";
else if (!osdmap->get_hb_back_addr(whoami).probably_equals(hb_back_server_messenger->get_myaddr()))
- clog.error() << "map e" << osdmap->get_epoch()
+ clog->error() << "map e" << osdmap->get_epoch()
<< " had wrong hb back addr (" << osdmap->get_hb_back_addr(whoami)
<< " != my " << hb_back_server_messenger->get_myaddr() << ")";
else if (osdmap->get_hb_front_addr(whoami) != entity_addr_t() &&
!osdmap->get_hb_front_addr(whoami).probably_equals(hb_front_server_messenger->get_myaddr()))
- clog.error() << "map e" << osdmap->get_epoch()
+ clog->error() << "map e" << osdmap->get_epoch()
<< " had wrong hb front addr (" << osdmap->get_hb_front_addr(whoami)
<< " != my " << hb_front_server_messenger->get_myaddr() << ")";
}
if (!send_map->have_pg_pool(pgid.pool())) {
dout(7) << "dropping request; pool did not exist" << dendl;
- clog.warn() << m->get_source_inst() << " invalid " << m->get_reqid()
+ clog->warn() << m->get_source_inst() << " invalid " << m->get_reqid()
<< " pg " << m->get_pg()
<< " to osd." << whoami
<< " in e" << osdmap->get_epoch()
return;
} else if (send_map->get_pg_acting_role(pgid.pgid, whoami) < 0) {
dout(7) << "we are invalid target" << dendl;
- clog.warn() << m->get_source_inst() << " misdirected " << m->get_reqid()
+ clog->warn() << m->get_source_inst() << " misdirected " << m->get_reqid()
<< " pg " << m->get_pg()
<< " to osd." << whoami
<< " in e" << osdmap->get_epoch()
{
// some sanity checks
if (g_conf->osd_map_cache_size <= g_conf->osd_map_max_advance + 2) {
- clog.warn() << "osd_map_cache_size (" << g_conf->osd_map_cache_size << ")"
+ clog->warn() << "osd_map_cache_size (" << g_conf->osd_map_cache_size << ")"
<< " is not > osd_map_max_advance ("
<< g_conf->osd_map_max_advance << ")";
}
if (g_conf->osd_map_cache_size <= (int)g_conf->osd_pg_epoch_persisted_max_stale + 2) {
- clog.warn() << "osd_map_cache_size (" << g_conf->osd_map_cache_size << ")"
+ clog->warn() << "osd_map_cache_size (" << g_conf->osd_map_cache_size << ")"
<< " is not > osd_pg_epoch_persisted_max_stale ("
<< g_conf->osd_pg_epoch_persisted_max_stale << ")";
}
SharedPtrRegistry<spg_t, DeletingState> deleting_pgs;
const int whoami;
ObjectStore *&store;
- LogClient &clog;
+ LogClient &log_client;
+ LogChannelRef clog;
PGRecoveryStats &pg_recovery_stats;
hobject_t infos_oid;
private:
PerfCounters *recoverystate_perf;
ObjectStore *store;
- LogClient clog;
+ LogClient log_client;
+ LogChannelRef clog;
int whoami;
std::string dev_path, journal_path;
* behind.
*/
// backfill
- osd->clog.info() << info.pgid << " restarting backfill on osd." << peer
+ osd->clog->info() << info.pgid << " restarting backfill on osd." << peer
<< " from (" << pi.log_tail << "," << pi.last_update << "] " << pi.last_backfill
<< " to " << info.last_update;
assert(!r);
}
if (oss.str().length())
- osd->clog.error() << oss;
+ osd->clog->error() << oss;
// log any weirdness
log_weirdness();
void PG::log_weirdness()
{
if (pg_log.get_tail() != info.log_tail)
- osd->clog.error() << info.pgid
+ osd->clog->error() << info.pgid
<< " info mismatch, log.tail " << pg_log.get_tail()
<< " != info.log_tail " << info.log_tail
<< "\n";
if (pg_log.get_head() != info.last_update)
- osd->clog.error() << info.pgid
+ osd->clog->error() << info.pgid
<< " info mismatch, log.head " << pg_log.get_head()
<< " != info.last_update " << info.last_update
<< "\n";
if (!pg_log.get_log().empty()) {
// sloppy check
if ((pg_log.get_log().log.begin()->version <= pg_log.get_tail()))
- osd->clog.error() << info.pgid
+ osd->clog->error() << info.pgid
<< " log bound mismatch, info (" << pg_log.get_tail() << ","
<< pg_log.get_head() << "]"
<< " actual ["
}
if (pg_log.get_log().caller_ops.size() > pg_log.get_log().log.size()) {
- osd->clog.error() << info.pgid
+ osd->clog->error() << info.pgid
<< " caller_ops.size " << pg_log.get_log().caller_ops.size()
<< " > log size " << pg_log.get_log().log.size()
<< "\n";
i != rollback_obs.end();
++i) {
if (i->generation < trimmed_to.version) {
- osd->clog.error() << "osd." << osd->whoami
+ osd->clog->error() << "osd." << osd->whoami
<< " pg " << info.pgid
<< " found obsolete rollback obj "
<< *i << " generation < trimmed_to "
<< dendl;
assert(0);
}
- osd->clog.error() << "osd." << osd->whoami
+ osd->clog->error() << "osd." << osd->whoami
<< " found snap mapper error on pg "
<< info.pgid
<< " oid " << hoid << " snaps in mapper: "
<< oi_snaps
<< "...repaired";
} else {
- osd->clog.error() << "osd." << osd->whoami
+ osd->clog->error() << "osd." << osd->whoami
<< " found snap mapper error on pg "
<< info.pgid
<< " oid " << hoid << " snaps missing in mapper"
dout(2) << ss.str() << dendl;
if (!authoritative.empty() || !scrubber.inconsistent_snapcolls.empty()) {
- osd->clog.error(ss);
+ osd->clog->error(ss);
}
for (map<hobject_t, pg_shard_t>::iterator i = authoritative.begin();
<< scrubber.missing.size() << " missing, "
<< scrubber.inconsistent.size() << " inconsistent objects\n";
dout(2) << ss.str() << dendl;
- osd->clog.error(ss);
+ osd->clog->error(ss);
if (repair) {
state_clear(PG_STATE_CLEAN);
for (map<hobject_t, pair<ScrubMap::object, pg_shard_t> >::iterator i =
oss << ", " << scrubber.fixed << " fixed";
oss << "\n";
if (total_errors)
- osd->clog.error(oss);
+ osd->clog->error(oss);
else
- osd->clog.info(oss);
+ osd->clog->info(oss);
}
// finish up
dout(10) << " sending info+missing+log since " << query.since
<< dendl;
if (query.since != eversion_t() && query.since < pg_log.get_tail()) {
- osd->clog.error() << info.pgid << " got broken pg_query_t::LOG since " << query.since
+ osd->clog->error() << info.pgid << " got broken pg_query_t::LOG since " << query.since
<< " when my log.tail is " << pg_log.get_tail()
<< ", sending full log instead\n";
mlog->log = pg_log.get_log(); // primary should not have requested this!!
if (unfound > 0 &&
pg->all_unfound_are_queried_or_lost(pg->get_osdmap())) {
if (pg->cct->_conf->osd_auto_mark_unfound_lost) {
- pg->osd->clog.error() << pg->info.pgid << " has " << unfound
+ pg->osd->clog->error() << pg->info.pgid << " has " << unfound
<< " objects unfound and apparently lost, would automatically marking lost but NOT IMPLEMENTED\n";
//pg->mark_all_unfound_lost(*context< RecoveryMachine >().get_cur_transaction());
} else
- pg->osd->clog.error() << pg->info.pgid << " has " << unfound << " objects unfound and apparently lost\n";
+ pg->osd->clog->error() << pg->info.pgid << " has " << unfound << " objects unfound and apparently lost\n";
}
if (!pg->snap_trimq.empty() &&
if (m->get_object_locator() != oloc) {
dout(10) << " provided locator " << m->get_object_locator()
<< " != object's " << obc->obs.oi.soid << dendl;
- osd->clog.warn() << "bad locator " << m->get_object_locator()
+ osd->clog->warn() << "bad locator " << m->get_object_locator()
<< " on object " << oloc
<< " op " << *m << "\n";
}
r = pgbackend->objects_read_sync(
soid, last, len, &t);
if (!t.is_zero()) {
- osd->clog.error() << coll << " " << soid << " sparse-read found data in hole "
+ osd->clog->error() << coll << " " << soid << " sparse-read found data in hole "
<< last << "~" << len << "\n";
}
}
r = pgbackend->objects_read_sync(
soid, last, len, &t);
if (!t.is_zero()) {
- osd->clog.error() << coll << " " << soid << " sparse-read found data in hole "
+ osd->clog->error() << coll << " " << soid << " sparse-read found data in hole "
<< last << "~" << len << "\n";
}
}
map<snapid_t, interval_set<uint64_t> >::const_iterator coi;
coi = ssc->snapset.clone_overlap.find(ci.cloneid);
if (coi == ssc->snapset.clone_overlap.end()) {
- osd->clog.error() << "osd." << osd->whoami << ": inconsistent clone_overlap found for oid "
+ osd->clog->error() << "osd." << osd->whoami << ": inconsistent clone_overlap found for oid "
<< soid << " clone " << *clone_iter;
result = -EINVAL;
break;
map<snapid_t, uint64_t>::const_iterator si;
si = ssc->snapset.clone_size.find(ci.cloneid);
if (si == ssc->snapset.clone_size.end()) {
- osd->clog.error() << "osd." << osd->whoami << ": inconsistent clone_size found for oid "
+ osd->clog->error() << "osd." << osd->whoami << ": inconsistent clone_size found for oid "
<< soid << " clone " << *clone_iter;
result = -EINVAL;
break;
if (missing.num_missing() > 0) {
// this shouldn't happen!
- osd->clog.error() << info.pgid << " recovery ending with " << missing.num_missing()
+ osd->clog->error() << info.pgid << " recovery ending with " << missing.num_missing()
<< ": " << missing.missing << "\n";
return work_in_progress;
}
if (needs_recovery()) {
// this shouldn't happen!
// We already checked num_missing() so we must have missing replicas
- osd->clog.error() << info.pgid << " recovery ending with missing replicas\n";
+ osd->clog->error() << info.pgid << " recovery ending with missing replicas\n";
return work_in_progress;
}
}
}
if (uhoh)
- osd->clog.error() << info.pgid << " missing primary copy of " << soid << ", unfound\n";
+ osd->clog->error() << info.pgid << " missing primary copy of " << soid << ", unfound\n";
else
- osd->clog.error() << info.pgid << " missing primary copy of " << soid
+ osd->clog->error() << info.pgid << " missing primary copy of " << soid
<< ", will try copies on " << missing_loc.get_locations(soid)
<< "\n";
return 0;
}
if (info.stats.stats_invalid) {
- osd->clog.warn() << "pg " << info.pgid << " has invalid (post-split) stats; must scrub before tier agent can activate";
+ osd->clog->warn() << "pg " << info.pgid << " has invalid (post-split) stats; must scrub before tier agent can activate";
}
agent_choose_mode();
if (soid.snap == CEPH_SNAPDIR ||
soid.snap == CEPH_NOSNAP) {
if (p->second.attrs.count(SS_ATTR) == 0) {
- osd->clog.error() << mode << " " << info.pgid << " " << soid
+ osd->clog->error() << mode << " " << info.pgid << " " << soid
<< " no '" << SS_ATTR << "' attr";
++scrubber.shallow_errors;
continue;
// did we finish the last oid?
if (head != hobject_t() &&
!pool.info.allow_incomplete_clones()) {
- osd->clog.error() << mode << " " << info.pgid << " " << head
+ osd->clog->error() << mode << " " << info.pgid << " " << head
<< " missing clones";
++scrubber.shallow_errors;
}
// basic checks.
if (p->second.attrs.count(OI_ATTR) == 0) {
- osd->clog.error() << mode << " " << info.pgid << " " << soid
+ osd->clog->error() << mode << " " << info.pgid << " " << soid
<< " no '" << OI_ATTR << "' attr";
++scrubber.shallow_errors;
continue;
object_info_t oi(bv);
if (pgbackend->be_get_ondisk_size(oi.size) != p->second.size) {
- osd->clog.error() << mode << " " << info.pgid << " " << soid
+ osd->clog->error() << mode << " " << info.pgid << " " << soid
<< " on disk size (" << p->second.size
<< ") does not match object info size ("
<< oi.size << ") adjusted for ondisk to ("
}
}
if (!next_clone.is_min() && next_clone != soid) {
- osd->clog.error() << mode << " " << info.pgid << " " << soid
+ osd->clog->error() << mode << " " << info.pgid << " " << soid
<< " expected clone " << next_clone;
++scrubber.shallow_errors;
}
if (soid.snap == CEPH_NOSNAP || soid.snap == CEPH_SNAPDIR) {
if (soid.snap == CEPH_NOSNAP && !snapset.head_exists) {
- osd->clog.error() << mode << " " << info.pgid << " " << soid
+ osd->clog->error() << mode << " " << info.pgid << " " << soid
<< " snapset.head_exists=false, but head exists";
++scrubber.shallow_errors;
}
if (soid.snap == CEPH_SNAPDIR && snapset.head_exists) {
- osd->clog.error() << mode << " " << info.pgid << " " << soid
+ osd->clog->error() << mode << " " << info.pgid << " " << soid
<< " snapset.head_exists=true, but snapdir exists";
++scrubber.shallow_errors;
}
stat.num_object_clones++;
if (head == hobject_t()) {
- osd->clog.error() << mode << " " << info.pgid << " " << soid
+ osd->clog->error() << mode << " " << info.pgid << " " << soid
<< " found clone without head";
++scrubber.shallow_errors;
continue;
}
if (oi.size != snapset.clone_size[*curclone]) {
- osd->clog.error() << mode << " " << info.pgid << " " << soid
+ osd->clog->error() << mode << " " << info.pgid << " " << soid
<< " size " << oi.size << " != clone_size "
<< snapset.clone_size[*curclone];
++scrubber.shallow_errors;
if (!next_clone.is_min() &&
!pool.info.allow_incomplete_clones()) {
- osd->clog.error() << mode << " " << info.pgid
+ osd->clog->error() << mode << " " << info.pgid
<< " expected clone " << next_clone;
++scrubber.shallow_errors;
}
!info.stats.hitset_stats_invalid) ||
scrub_cstat.sum.num_whiteouts != info.stats.stats.sum.num_whiteouts ||
scrub_cstat.sum.num_bytes != info.stats.stats.sum.num_bytes) {
- osd->clog.error() << info.pgid << " " << mode
+ osd->clog->error() << info.pgid << " " << mode
<< " stat mismatch, got "
<< scrub_cstat.sum.num_objects << "/" << info.stats.stats.sum.num_objects << " objects, "
<< scrub_cstat.sum.num_object_clones << "/" << info.stats.stats.sum.num_object_clones << " clones, "
ceph_tid_t get_tid() { return osd->get_tid(); }
- LogClientTemp clog_error() { return osd->clog.error(); }
+ LogClientTemp clog_error() { return osd->clog->error(); }
/*
* Capture all object state associated with an in-progress read or write.