]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/mds/MDBalancer.h
update sources to 12.2.7
[ceph.git] / ceph / src / mds / MDBalancer.h
index d23185b22f898e1ffe278178813bfc62b5683991..aeb78e414ce1aef8e68d6e3db40392341e41f59f 100644 (file)
@@ -38,14 +38,7 @@ class MDBalancer {
   friend class C_Bal_SendHeartbeat;
 public:
   MDBalancer(MDSRank *m, Messenger *msgr, MonClient *monc) : 
-    mds(m),
-    messenger(msgr),
-    mon_client(monc),
-    beat_epoch(0),
-    last_epoch_under(0), my_load(0.0), target_load(0.0)
-    { }
-
-  mds_load_t get_load(utime_t);
+    mds(m), messenger(msgr), mon_client(monc) { }
 
   int proc_message(Message *m);
 
@@ -58,9 +51,10 @@ public:
 
   void subtract_export(CDir *ex, utime_t now);
   void add_import(CDir *im, utime_t now);
+  void adjust_pop_for_rename(CDir *pdir, CDir *dir, utime_t now, bool inc);
 
-  void hit_inode(utime_t now, CInode *in, int type, int who=-1);
-  void hit_dir(utime_t now, CDir *dir, int type, int who=-1, double amount=1.0);
+  void hit_inode(const utime_t& now, CInode *in, int type, int who=-1);
+  void hit_dir(const utime_t& now, CDir *dir, int type, int who=-1, double amount=1.0);
 
   void queue_split(const CDir *dir, bool fast);
   void queue_merge(CDir *dir);
@@ -75,6 +69,8 @@ public:
 
   void handle_mds_failure(mds_rank_t who);
 
+  int dump_loads(Formatter *f);
+
 private:
   typedef struct {
     std::map<mds_rank_t, double> targets;
@@ -89,7 +85,7 @@ private:
 
   void handle_export_pins(void);
 
-  void export_empties();
+  mds_load_t get_load(utime_t now);
   int localize_balancer();
   void send_heartbeat();
   void handle_heartbeat(MHeartbeat *m);
@@ -122,9 +118,8 @@ private:
   MDSRank *mds;
   Messenger *messenger;
   MonClient *mon_client;
-  int beat_epoch;
+  int beat_epoch = 0;
 
-  int last_epoch_under;
   string bal_code;
   string bal_version;
 
@@ -132,6 +127,9 @@ private:
   utime_t last_sample;
   utime_t rebalance_time; //ensure a consistent view of load for rebalance
 
+  utime_t last_get_load;
+  uint64_t last_num_requests = 0;
+
   // Dirfrags which are marked to be passed on to MDCache::[split|merge]_dir
   // just as soon as a delayed context comes back and triggers it.
   // These sets just prevent us from spawning extra timer contexts for
@@ -142,9 +140,11 @@ private:
   map<mds_rank_t, mds_load_t>  mds_load;
   map<mds_rank_t, double>       mds_meta_load;
   map<mds_rank_t, map<mds_rank_t, float> > mds_import_map;
+  map<mds_rank_t, int> mds_last_epoch_under_map;
 
   // per-epoch state
-  double          my_load, target_load;
+  double my_load = 0;
+  double target_load = 0;
 };
 
 #endif