From: Sage Weil Date: Fri, 26 Jun 2009 04:24:02 +0000 (-0700) Subject: osd: fix _scrub head_exists test X-Git-Tag: v0.10~126 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c84a9cda183aaaf045e888b7d9db0f0d1be65a5d;p=ceph.git osd: fix _scrub head_exists test --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 4451b9b640fe..9a6497c5e258 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1703,17 +1703,21 @@ int ReplicatedPG::prepare_transaction(OpContext *ctx) bufferlist bv(sizeof(*poi)); ::encode(*poi, bv); ctx->op_t.setattr(info.pgid.to_coll(), soid, OI_ATTR, bv); - ctx->op_t.setattr(info.pgid.to_coll(), soid, SS_ATTR, bss); - + + dout(10) << " final snapset " << ctx->obs->ssc->snapset + << " in " << soid << dendl; + ctx->op_t.setattr(info.pgid.to_coll(), soid, SS_ATTR, bss); if (!head_existed) { // if we logically recreated the head, remove old _snapdir object sobject_t snapoid(soid.oid, CEPH_SNAPDIR); ctx->op_t.remove(info.pgid.to_coll(), snapoid); + dout(10) << " removing old " << snapoid << dendl; } - } else if (ctx->obs->ssc->snapset.clones.size()) { // save snapset on _snap sobject_t snapoid(soid.oid, CEPH_SNAPDIR); + dout(10) << " final snapset " << ctx->obs->ssc->snapset + << " in " << snapoid << dendl; ctx->op_t.touch(info.pgid.to_coll(), snapoid); ctx->op_t.setattr(info.pgid.to_coll(), snapoid, SS_ATTR, bss); } @@ -3614,8 +3618,8 @@ int ReplicatedPG::_scrub(ScrubMap& scrubmap, int& errors, int& fixed) //assert(data.length() == p->size); if (soid.snap == CEPH_NOSNAP) { - if (snapset.head_exists) { - dout(0) << mode << " snapset.head_exists=false, but " << soid << " exists" << dendl; + if (!snapset.head_exists) { + dout(0) << mode << " snapset.head_exists=false, but " << soid << " exists" << dendl; errors++; continue; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 9fa06355d861..0a9a58e206cc 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1000,10 +1000,11 @@ WRITE_CLASS_ENCODER(object_info_t) inline ostream& operator<<(ostream& out, const object_info_t& oi) { out << oi.soid << "(" << oi.version << " " << oi.last_reqid; - if (oi.wrlock_by.tid) + if (oi.soid.snap == CEPH_NOSNAP) out << " wrlock_by=" << oi.wrlock_by; - if (oi.soid.snap != CEPH_NOSNAP) - out << " " << oi.snaps << ")"; + else + out << " " << oi.snaps; + out << ")"; return out; }