// allocate an id..
if (!mdr->more()->stid) {
- mds->snapclient->prepare_create_realm(in->ino(), &mdr->more()->stid,
+ mds->snapclient->prepare_create_realm(in->ino(), &mdr->more()->stid, &mdr->more()->snapidbl,
new C_MDS_RetryRequest(this, mdr));
return;
}
pi->version = in->pre_dirty();
pi->rstat.rsnaprealms++;
+ bufferlist::iterator p = mdr->more()->snapidbl.begin();
+ snapid_t seq;
+ ::decode(seq, p);
+
SnapRealm t(this, in);
- t.created = mdr->more()->stid;
+ t.created = seq;
bufferlist snapbl;
::encode(t, snapbl);
mds->snapclient->commit(mdr->more()->stid, mut->ls);
// create
+ bufferlist::iterator p = mdr->more()->snapidbl.begin();
+ snapid_t seq;
+ ::decode(seq, p);
+
in->open_snaprealm();
- in->snaprealm->seq = in->snaprealm->created = mdr->more()->stid;
+ in->snaprealm->seq = in->snaprealm->created = seq;
do_realm_split_notify(in);
// prepare
if (!mdr->more()->stid) {
mds->snapclient->prepare_destroy(diri->ino(), snapid,
- &mdr->more()->stid,
+ &mdr->more()->stid, &mdr->more()->snapidbl,
new C_MDS_RetryRequest(mds->mdcache, mdr));
return;
}
version_t stid = mdr->more()->stid;
- dout(10) << " stid is " << stid << dendl;
+ bufferlist::iterator p = mdr->more()->snapidbl.begin();
+ snapid_t seq;
+ ::decode(seq, p);
+ dout(10) << " stid is " << stid << ", seq is " << seq << dendl;
// journal
inode_t *pi = diri->project_inode();
snapid_t old_ld = diri->snaprealm->last_destroyed;
SnapInfo old_info = diri->snaprealm->snaps[snapid];
diri->snaprealm->snaps.erase(snapid);
- diri->snaprealm->seq = stid;
- diri->snaprealm->last_destroyed = stid;
+ diri->snaprealm->seq = seq;
+ diri->snaprealm->last_destroyed = seq;
diri->encode_snap_blob(snapbl);
diri->snaprealm->snaps[snapid] = old_info;
diri->snaprealm->seq = old_seq;
{
dout(10) << "_rmsnap_finish " << *mdr << " " << snapid << dendl;
snapid_t stid = mdr->more()->stid;
+ bufferlist::iterator p = mdr->more()->snapidbl.begin();
+ snapid_t seq;
+ ::decode(seq, p);
diri->pop_and_dirty_projected_inode(mdr->ls);
mdr->apply();
// remove snap
diri->snaprealm->snaps.erase(snapid);
- diri->snaprealm->last_destroyed = stid;
- diri->snaprealm->seq = stid;
+ diri->snaprealm->last_destroyed = seq;
+ diri->snaprealm->seq = seq;
dout(10) << "snaprealm now " << *diri->snaprealm << dendl;
mdcache->do_realm_invalidate_and_update_notify(diri, CEPH_SNAP_OP_DESTROY);
_prepare(bl, pstid, pbl, onfinish);
}
- void prepare_create_realm(inodeno_t ino, version_t *pstid, Context *onfinish) {
+ void prepare_create_realm(inodeno_t ino, version_t *pstid, bufferlist *pbl, Context *onfinish) {
bufferlist bl;
__u32 op = TABLE_OP_CREATE;
::encode(op, bl);
::encode(ino, bl);
- _prepare(bl, pstid, 0, onfinish);
+ _prepare(bl, pstid, pbl, onfinish);
}
- void prepare_destroy(inodeno_t ino, snapid_t snapid, version_t *pstid, Context *onfinish) {
+ void prepare_destroy(inodeno_t ino, snapid_t snapid, version_t *pstid, bufferlist *pbl, Context *onfinish) {
bufferlist bl;
__u32 op = TABLE_OP_DESTROY;
::encode(op, bl);
::encode(ino, bl);
::encode(snapid, bl);
- _prepare(bl, pstid, 0, onfinish);
+ _prepare(bl, pstid, pbl, onfinish);
}
};
info.snapid = ++last_snap;
pending_create[version] = info;
dout(10) << "prepare v" << version << " create " << info << dendl;
- bl.clear();
- ::encode(info.snapid, bl);
} else {
pending_noop.insert(version);
dout(10) << "prepare v" << version << " noop" << dendl;
}
+ bl.clear();
+ ::encode(last_snap, bl);
}
break;