ctx->snapc.snaps = op->get_snaps();
}
if ((op->get_flags() & CEPH_OSD_FLAG_ORDERSNAP) &&
- ctx->snapc.seq < obc->obs.ssc->snapset.seq) {
+ ctx->snapc.seq < obc->ssc->snapset.seq) {
dout(10) << " ORDERSNAP flag set and snapc seq " << ctx->snapc.seq
- << " < snapset seq " << obc->obs.ssc->snapset.seq
+ << " < snapset seq " << obc->ssc->snapset.seq
<< " on " << soid << dendl;
delete ctx;
put_object_context(obc);
dout(10) << "do_op " << soid << " " << ctx->ops
<< " ov " << obc->obs.oi.version << " av " << ctx->at_version
<< " snapc " << ctx->snapc
- << " snapset " << obc->obs.ssc->snapset
+ << " snapset " << obc->ssc->snapset
<< dendl;
} else {
dout(10) << "do_op " << soid << " " << ctx->ops
vector<snapid_t>& snaps = coi.snaps;
// get snap set context
- if (!obc->obs.ssc)
- obc->obs.ssc = get_snapset_context(coid.oid, false);
- SnapSetContext *ssc = obc->obs.ssc;
+ if (!obc->ssc)
+ obc->ssc = get_snapset_context(coid.oid, false);
+ SnapSetContext *ssc = obc->ssc;
assert(ssc);
SnapSet& snapset = ssc->snapset;
bufferlist& odata)
{
int result = 0;
- SnapSetContext *ssc = ctx->obs->ssc;
+ SnapSetContext *ssc = ctx->obc->ssc;
object_info_t& oi = ctx->obs->oi;
const sobject_t& soid = oi.soid;
inline void ReplicatedPG::_delete_head(OpContext *ctx)
{
- SnapSetContext *ssc = ctx->obs->ssc;
+ SnapSetContext *ssc = ctx->obc->ssc;
object_info_t& oi = ctx->obs->oi;
const sobject_t& soid = oi.soid;
ObjectStore::Transaction& t = ctx->op_t;
void ReplicatedPG::_rollback_to(OpContext *ctx, ceph_osd_op& op)
{
- SnapSetContext *ssc = ctx->obs->ssc;
+ SnapSetContext *ssc = ctx->obc->ssc;
object_info_t& oi = ctx->obs->oi;
const sobject_t& soid = oi.soid;
ObjectStore::Transaction& t = ctx->op_t;
void ReplicatedPG::make_writeable(OpContext *ctx)
{
- SnapSetContext *ssc = ctx->obs->ssc;
+ SnapSetContext *ssc = ctx->obc->ssc;
object_info_t& oi = ctx->obs->oi;
const sobject_t& soid = oi.soid;
SnapContext& snapc = ctx->snapc;
poi->version = ctx->at_version;
bufferlist bss;
- ::encode(ctx->obs->ssc->snapset, bss);
- assert(ctx->obs->exists == ctx->obs->ssc->snapset.head_exists);
+ ::encode(ctx->obc->ssc->snapset, bss);
+ assert(ctx->obs->exists == ctx->obc->ssc->snapset.head_exists);
// append to log
int logopcode = Log::Entry::MODIFY;
::encode(*poi, bv);
ctx->op_t.setattr(coll, soid, OI_ATTR, bv);
- dout(10) << " final snapset " << ctx->obs->ssc->snapset
+ dout(10) << " final snapset " << ctx->obc->ssc->snapset
<< " in " << soid << dendl;
ctx->op_t.setattr(coll, soid, SS_ATTR, bss);
if (!head_existed) {
assert(ctx->snapset_obc->registered);
}
}
- } else if (ctx->obs->ssc->snapset.clones.size()) {
+ } else if (ctx->obc->ssc->snapset.clones.size()) {
// save snapset on _snap
sobject_t snapoid(soid.oid, CEPH_SNAPDIR);
- dout(10) << " final snapset " << ctx->obs->ssc->snapset
+ dout(10) << " final snapset " << ctx->obc->ssc->snapset
<< " in " << snapoid << dendl;
ctx->at_version.version++;
ctx->log.push_back(Log::Entry(Log::Entry::MODIFY, snapoid, ctx->at_version, old_version,
wr->old_exists = old_exists;
wr->old_size = old_size;
wr->old_version = old_version;
- wr->snapset = repop->obc->obs.ssc->snapset;
+ wr->snapset = repop->obc->ssc->snapset;
wr->snapc = repop->ctx->snapc;
wr->set_data(repop->ctx->op->get_data()); // _copy_ bufferlist
} else {
}
register_object_context(obc);
- if (can_create && !obc->obs.ssc)
- obc->obs.ssc = get_snapset_context(soid.oid, true);
+ if (can_create && !obc->ssc)
+ obc->ssc = get_snapset_context(soid.oid, true);
if (r >= 0) {
obc->obs.oi.decode(bv);
dout(10) << "find_object_context " << oid << " @" << snapid << dendl;
*pobc = obc;
- if (can_create && !obc->obs.ssc)
- obc->obs.ssc = get_snapset_context(oid, true);
+ if (can_create && !obc->ssc)
+ obc->ssc = get_snapset_context(oid, true);
return 0;
}
<< " want " << snapid << " > snapset seq " << ssc->snapset.seq
<< " -- HIT " << obc->obs
<< dendl;
- if (!obc->obs.ssc)
- obc->obs.ssc = ssc;
+ if (!obc->ssc)
+ obc->ssc = ssc;
else {
- assert(ssc == obc->obs.ssc);
+ assert(ssc == obc->ssc);
put_snapset_context(ssc);
}
*pobc = obc;
--obc->ref;
if (obc->ref == 0) {
- if (obc->obs.ssc)
- put_snapset_context(obc->obs.ssc);
+ if (obc->ssc)
+ put_snapset_context(obc->ssc);
if (obc->registered)
object_contexts.erase(obc->obs.oi.soid);
oi.lost = false; // I guess?
oi.version = op->old_version;
oi.size = op->old_size;
- ObjectState obs(oi, op->old_exists, NULL);
+ ObjectState obs(oi, op->old_exists);
rm->ctx = new OpContext(op, op->reqid, op->ops, &obs, this);
SnapSetContext ssc(op->poid.oid);
ssc.snapset = op->snapset;
- rm->ctx->obs->ssc = &ssc;
+ rm->ctx->obc->ssc = &ssc;
prepare_transaction(rm->ctx);
log_op(rm->ctx->log, op->pg_trim_to, rm->ctx->local_t);
obc->obs.oi.decode(oibl);
// suck in snapset context?
- SnapSetContext *ssc = obc->obs.ssc;
+ SnapSetContext *ssc = obc->ssc;
if (ssbl.length()) {
bufferlist::iterator sp = ssbl.begin();
ssc->snapset.decode(sp);
struct ObjectState {
object_info_t oi;
bool exists;
- SnapSetContext *ssc; // may be null
- ObjectState(const object_info_t &oi_, bool exists_, SnapSetContext *ssc_)
- : oi(oi_), exists(exists_), ssc(ssc_) {}
+ ObjectState(const object_info_t &oi_, bool exists_)
+ : oi(oi_), exists(exists_) {}
};
bool registered;
ObjectState obs;
+ SnapSetContext *ssc; // may be null
+
Mutex lock;
Cond cond;
int unstable_writes, readers, writers_waiting, readers_waiting;
lock("ReplicatedPG::ObjectContext::lock"),
unstable_writes(0), readers(0), writers_waiting(0), readers_waiting(0) {}*/
ObjectContext(const object_info_t &oi_, bool exists_, SnapSetContext *ssc_)
- : ref(0), registered(false), obs(oi_, exists_, ssc_),
+ : ref(0), registered(false), obs(oi_, exists_), ssc(ssc_),
lock("ReplicatedPG::ObjectContext::lock"),
unstable_writes(0), readers(0), writers_waiting(0), readers_waiting(0) {}
obc->registered = true;
object_contexts[obc->obs.oi.soid] = obc;
}
- if (obc->obs.ssc)
- register_snapset_context(obc->obs.ssc);
+ if (obc->ssc)
+ register_snapset_context(obc->ssc);
}
void put_object_context(ObjectContext *obc);
int find_object_context(const object_t& oid, const object_locator_t& oloc,