class MMDSSlaveRequest;
struct MutationImpl {
+ ceph::weak_ptr<MutationImpl> self_ref;
metareqid_t reqid;
__u32 attempt; // which attempt for this request
LogSegment *ls; // the log segment i'm committing to
list<pair<CDentry*,version_t> > dirty_cow_dentries;
MutationImpl()
- : attempt(0),
+ : self_ref(),
+ attempt(0),
ls(0),
slave_to_mds(-1),
locking(NULL),
locking_target_mds(-1),
done_locking(false), committing(false), aborted(false), killed(false) { }
MutationImpl(metareqid_t ri, __u32 att=0, int slave_to=-1)
- : reqid(ri), attempt(att),
+ : self_ref(),
+ reqid(ri), attempt(att),
ls(0),
slave_to_mds(slave_to),
locking(NULL),
virtual void print(ostream &out) {
out << "mutation(" << this << ")";
}
+
+ void set_self_ref(ceph::shared_ptr<MutationImpl>& ref) {
+ self_ref = ref;
+ }
};
inline ostream& operator<<(ostream& out, MutationImpl &mut)
* the request is finished or forwarded. see request_*().
*/
struct MDRequestImpl : public MutationImpl {
- ceph::weak_ptr<MDRequestImpl> self_ref;
Session *session;
elist<MDRequestImpl*>::item item_session_request; // if not on list, op is aborted.
// ---------------------------------------------------
MDRequestImpl() :
- self_ref(),
session(0), item_session_request(this),
client_request(0), straydn(NULL), snapid(CEPH_NOSNAP), tracei(0), tracedn(0),
alloc_ino(0), used_prealloc_ino(0), snap_caps(0), did_early_reply(false),
in[0] = in[1] = 0;
}
MDRequestImpl(metareqid_t ri, __u32 attempt, MClientRequest *req) :
- self_ref(),
MutationImpl(ri, attempt),
session(0), item_session_request(this),
client_request(req), straydn(NULL), snapid(CEPH_NOSNAP), tracei(0), tracedn(0),
in[0] = in[1] = 0;
}
MDRequestImpl(metareqid_t ri, __u32 attempt, int by) :
- self_ref(),
MutationImpl(ri, attempt, by),
session(0), item_session_request(this),
client_request(0), straydn(NULL), snapid(CEPH_NOSNAP), tracei(0), tracedn(0),
void print(ostream &out);
void set_self_ref(ceph::shared_ptr<MDRequestImpl>& ref) {
- self_ref = ref;
+ self_ref = ceph::static_pointer_cast<MutationImpl,MDRequestImpl>(ref);
}
};