#define dout_prefix *_dout << "mds." << mds->get_nodeid() << " RecoveryQueue::" << __func__ << " "
class C_MDC_Recover : public MDSIOContextBase {
+public:
+ C_MDC_Recover(RecoveryQueue *rq_, CInode *i) :
+ MDSIOContextBase(false), rq(rq_), in(i) {
+ ceph_assert(rq != NULL);
+ }
+ void print(ostream& out) const override {
+ out << "file_recover(" << in->ino() << ")";
+ }
+
+ uint64_t size = 0;
+ utime_t mtime;
protected:
- RecoveryQueue *rq;
- CInode *in;
void finish(int r) override {
rq->_recovered(in, r, size, mtime);
}
return rq->mds;
}
-public:
- uint64_t size;
- utime_t mtime;
-
- C_MDC_Recover(RecoveryQueue *rq_, CInode *i) :
- MDSIOContextBase(false), rq(rq_), in(i), size(0) {
- ceph_assert(rq != NULL);
- }
- void print(ostream& out) const override {
- out << "file_recover(" << in->ino() << ")";
- }
+ RecoveryQueue *rq;
+ CInode *in;
};
-
RecoveryQueue::RecoveryQueue(MDSRank *mds_) :
file_recover_queue(member_offset(CInode, item_dirty_dirfrag_dir)),
file_recover_queue_front(member_offset(CInode, item_dirty_dirfrag_nest)),
- mds(mds_), logger(NULL), filer(mds_->objecter, mds_->finisher)
+ mds(mds_), filer(mds_->objecter, mds_->finisher)
{ }
-
/**
* Progress the queue. Call this after enqueuing something or on
* completion of something.
class RecoveryQueue {
public:
+ explicit RecoveryQueue(MDSRank *mds_);
+
void enqueue(CInode *in);
void advance();
void prioritize(CInode *in); ///< do this inode now/soon
- explicit RecoveryQueue(MDSRank *mds_);
void set_logger(PerfCounters *p) {logger=p;}
private:
+ friend class C_MDC_Recover;
+
void _start(CInode *in); ///< start recovering this file
void _recovered(CInode *in, int r, uint64_t size, utime_t mtime);
std::map<CInode*, bool> file_recovering; // inode -> need_restart
MDSRank *mds;
- PerfCounters *logger;
+ PerfCounters *logger = nullptr;
Filer filer;
-
- friend class C_MDC_Recover;
};
#endif // RECOVERY_QUEUE_H