dout(10) << "finish_scatter_update " << fg << " journaling accounted scatterstat update v" << inode_version << dendl;
MDLog *mdlog = mdcache->mds->mdlog;
- auto mut(std::make_shared<MutationImpl>());
+ MutationRef mut(new MutationImpl());
mut->ls = mdlog->get_current_segment();
inode_t *pi = get_projected_inode();
}
}
- auto mut(std::make_shared<MutationImpl>());
+ MutationRef mut(new MutationImpl());
mut->ls = mds->mdlog->get_current_segment();
inode_t *pi = in->project_inode();
EUpdate *le = new EUpdate(mds->mdlog, "snap flush");
mds->mdlog->start_entry(le);
- auto mut(std::make_shared<MutationImpl>());
+ MutationRef mut = new MutationImpl();
mut->ls = mds->mdlog->get_current_segment();
// normal metadata updates that we can apply to the head as well.
inode_t *pi = in->project_inode(px);
pi->version = in->pre_dirty();
- auto mut(std::make_shared<MutationImpl>());
+ MutationRef mut(new MutationImpl());
mut->ls = mds->mdlog->get_current_segment();
_update_cap_fields(in, dirty, m, pi);
dout(10) << "scatter_writebehind " << in->inode.mtime << " on " << *lock << " on " << *in << dendl;
// journal
- auto mut(std::make_shared<MutationImpl>());
+ MutationRef mut(new MutationImpl());
mut->ls = mds->mdlog->get_current_segment();
// forcefully take a wrlock
SnapRealm *realm = dir->get_inode()->find_snaprealm();
dn->first = in->first = realm->get_newest_seq() + 1;
- auto mut(std::make_shared<MutationImpl>());
+ MutationRef mut(new MutationImpl());
// force some locks. hacky.
mds->locker->wrlock_force(&dir->inode->filelock, mut);
pi->truncate_from = 0;
pi->truncate_pending--;
- auto mut(std::make_shared<MutationImpl>());
+ MutationRef mut(new MutationImpl());
mut->ls = mds->mdlog->get_current_segment();
mut->add_projected_inode(in);
return;
}
- auto mut(std::make_shared<MutationImpl>());
+ MutationRef mut(new MutationImpl());
mut->ls = mds->mdlog->get_current_segment();
EUpdate *le = new EUpdate(mds->mdlog, "snaprealm_create");
mds->mdlog->start_entry(le);
return;
}
- it->second.mut = std::make_shared<MutationImpl>();
+ it->second.mut = new MutationImpl();
if (diri->is_auth())
it->second.mut->auth_pin(diri);
mds->locker->rdlock_take_set(rdlocks, it->second.mut);
if (!mds->mdcache->is_readonly() &&
dir->get_inode()->filelock.can_wrlock(-1) &&
dir->get_inode()->nestlock.can_wrlock(-1)) {
- it->second.mut = std::make_shared<MutationImpl>();
+ it->second.mut = new MutationImpl();
// force some locks. hacky.
mds->locker->wrlock_force(&dir->inode->filelock, it->second.mut);
mds->locker->wrlock_force(&dir->inode->nestlock, it->second.mut);
drop_pins();
}
+void MutationImpl::_dump_op_descriptor_unlocked(ostream& stream) const
+{
+ stream << "Mutation";
+}
// MDRequestImpl
class MClientRequest;
class MMDSSlaveRequest;
-struct MutationImpl {
+struct MutationImpl : public TrackedOp {
metareqid_t reqid;
__u32 attempt = 0; // which attempt for this request
LogSegment *ls = nullptr; // the log segment i'm committing to
list<pair<CDentry*,version_t> > dirty_cow_dentries;
// keep our default values synced with MDRequestParam's
- MutationImpl() = default;
- MutationImpl(metareqid_t ri, __u32 att=0, mds_rank_t slave_to=MDS_RANK_NONE)
- : reqid(ri), attempt(att),
+ MutationImpl() : TrackedOp(nullptr, utime_t()) {}
+ MutationImpl(OpTracker *tracker, utime_t initiated,
+ metareqid_t ri, __u32 att=0, mds_rank_t slave_to=MDS_RANK_NONE)
+ : TrackedOp(tracker, initiated),
+ reqid(ri), attempt(att),
slave_to_mds(slave_to) { }
virtual ~MutationImpl() {
assert(locking == NULL);
}
virtual void dump(Formatter *f) const {}
+ void _dump_op_descriptor_unlocked(ostream& stream) const override;
};
inline ostream& operator<<(ostream &out, const MutationImpl &mut)
* mostly information about locks held, so that we can drop them all
* the request is finished or forwarded. see request_*().
*/
-struct MDRequestImpl : public MutationImpl, public TrackedOp {
+struct MDRequestImpl : public MutationImpl {
Session *session;
elist<MDRequestImpl*>::item item_session_request; // if not on list, op is aborted.
triggering_slave_req(NULL), slave_to(MDS_RANK_NONE), internal_op(-1) {}
};
MDRequestImpl(const Params& params, OpTracker *tracker) :
- MutationImpl(params.reqid, params.attempt, params.slave_to),
- TrackedOp(tracker, params.initiated),
+ MutationImpl(tracker, params.initiated,
+ params.reqid, params.attempt, params.slave_to),
session(NULL), item_session_request(this),
client_request(params.client_req), straydn(NULL), snapid(CEPH_NOSNAP),
tracei(NULL), tracedn(NULL), alloc_ino(0), used_prealloc_ino(0),
mdcache->add_rollback(rollback.reqid, master); // need to finish this update before resolve finishes
assert(mdr || mds->is_resolve());
- auto mut(std::make_shared<MutationImpl>(rollback.reqid));
+ MutationRef mut(new MutationImpl(nullptr, utime_t(), rollback.reqid));
mut->ls = mds->mdlog->get_current_segment();
CInode *in = mdcache->get_inode(rollback.ino);
// need to finish this update before sending resolve to claim the subtree
mdcache->add_rollback(rollback.reqid, master);
- auto mut(std::make_shared<MutationImpl>(rollback.reqid));
+ MutationRef mut(new MutationImpl(nullptr, utime_t(), rollback.reqid));
mut->ls = mds->mdlog->get_current_segment();
CDentry *srcdn = NULL;