]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/client/MetaSession.h
update ceph source to reef 18.2.1
[ceph.git] / ceph / src / client / MetaSession.h
index 94881c370cac3d78488df5bf69beeeeb04ecd576..301306263e66ee7093e8279f2563ed4cb588b601 100644 (file)
@@ -19,12 +19,13 @@ struct MetaRequest;
 struct MetaSession {
   mds_rank_t mds_num;
   ConnectionRef con;
-  version_t seq;
-  uint64_t cap_gen;
+  version_t seq = 0;
+  uint64_t cap_gen = 0;
   utime_t cap_ttl, last_cap_renew_request;
-  uint64_t cap_renew_seq;
+  uint64_t cap_renew_seq = 0;
   entity_addrvec_t addrs;
   feature_bitset_t mds_features;
+  feature_bitset_t mds_metric_flags;
 
   enum {
     STATE_NEW, // Unused
@@ -33,21 +34,24 @@ struct MetaSession {
     STATE_CLOSING,
     STATE_CLOSED,
     STATE_STALE,
-  } state;
+    STATE_REJECTED,
+  } state = STATE_OPENING;
 
   enum {
     RECLAIM_NULL,
     RECLAIMING,
     RECLAIM_OK,
     RECLAIM_FAIL,
-  } reclaim_state;
+  } reclaim_state = RECLAIM_NULL;
 
-  int mds_state;
-  bool readonly;
+  int mds_state = MDSMap::STATE_NULL;
+  bool readonly = false;
 
-  list<Context*> waiting_for_open;
+  std::list<Context*> waiting_for_open;
 
   xlist<Cap*> caps;
+  // dirty_list keeps all the dirty inodes before flushing in current session.
+  xlist<Inode*> dirty_list;
   xlist<Inode*> flushing_caps;
   xlist<MetaRequest*> requests;
   xlist<MetaRequest*> unsafe_requests;
@@ -55,20 +59,26 @@ struct MetaSession {
 
   ceph::ref_t<MClientCapRelease> release;
 
-  MetaSession(mds_rank_t mds_num, ConnectionRef con,
-             const entity_addrvec_t& addrs)
-    : mds_num(mds_num), con(con),
-      seq(0), cap_gen(0), cap_renew_seq(0), addrs(addrs),
-      state(STATE_OPENING), reclaim_state(RECLAIM_NULL),
-      mds_state(MDSMap::STATE_NULL), readonly(false)
-  {}
+  MetaSession(mds_rank_t mds_num, ConnectionRef con, const entity_addrvec_t& addrs)
+    : mds_num(mds_num), con(con), addrs(addrs) {
+  }
+  ~MetaSession() {
+    ceph_assert(caps.empty());
+    ceph_assert(dirty_list.empty());
+    ceph_assert(flushing_caps.empty());
+    ceph_assert(requests.empty());
+    ceph_assert(unsafe_requests.empty());
+  }
+
+  xlist<Inode*> &get_dirty_list() { return dirty_list; }
 
   const char *get_state_name() const;
 
-  void dump(Formatter *f) const;
+  void dump(Formatter *f, bool cap_dump=false) const;
 
   void enqueue_cap_release(inodeno_t ino, uint64_t cap_id, ceph_seq_t iseq,
       ceph_seq_t mseq, epoch_t osd_barrier);
 };
 
+using MetaSessionRef = std::shared_ptr<MetaSession>;
 #endif