]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/mds/Server.h
update sources to 12.2.7
[ceph.git] / ceph / src / mds / Server.h
index 7d1aaeab7452dea61096897a93e2c86895f98da2..c169ea62a3c0ec0bcbc8c813a1f474d0658afb45 100644 (file)
@@ -15,6 +15,8 @@
 #ifndef CEPH_MDS_SERVER_H
 #define CEPH_MDS_SERVER_H
 
+#include <boost/utility/string_view.hpp>
+
 #include "MDSRank.h"
 #include "Mutation.h"
 
@@ -31,39 +33,39 @@ class MDLog;
 
 enum {
   l_mdss_first = 1000,
+  l_mdss_dispatch_client_request,
+  l_mdss_dispatch_slave_request,
   l_mdss_handle_client_request,
-  l_mdss_handle_slave_request,
   l_mdss_handle_client_session,
-  l_mdss_dispatch_client_request,
+  l_mdss_handle_slave_request,
+  l_mdss_req_create,
+  l_mdss_req_getattr,
+  l_mdss_req_getfilelock,
+  l_mdss_req_link,
+  l_mdss_req_lookup,
   l_mdss_req_lookuphash,
   l_mdss_req_lookupino,
-  l_mdss_req_lookupparent,
   l_mdss_req_lookupname,
-  l_mdss_req_lookup,
+  l_mdss_req_lookupparent,
   l_mdss_req_lookupsnap,
-  l_mdss_req_getattr,
+  l_mdss_req_lssnap,
+  l_mdss_req_mkdir,
+  l_mdss_req_mknod,
+  l_mdss_req_mksnap,
+  l_mdss_req_open,
+  l_mdss_req_readdir,
+  l_mdss_req_rename,
+  l_mdss_req_renamesnap,
+  l_mdss_req_rmdir,
+  l_mdss_req_rmsnap,
+  l_mdss_req_rmxattr,
   l_mdss_req_setattr,
-  l_mdss_req_setlayout,
   l_mdss_req_setdirlayout,
-  l_mdss_req_setxattr,
-  l_mdss_req_rmxattr,
-  l_mdss_req_readdir,
   l_mdss_req_setfilelock,
-  l_mdss_req_getfilelock,
-  l_mdss_req_create,
-  l_mdss_req_open,
-  l_mdss_req_mknod,
-  l_mdss_req_link,
-  l_mdss_req_unlink,
-  l_mdss_req_rmdir,
-  l_mdss_req_rename,
-  l_mdss_req_mkdir,
+  l_mdss_req_setlayout,
+  l_mdss_req_setxattr,
   l_mdss_req_symlink,
-  l_mdss_req_lssnap,
-  l_mdss_req_mksnap,
-  l_mdss_req_rmsnap,
-  l_mdss_req_renamesnap,
-  l_mdss_dispatch_slave_request,
+  l_mdss_req_unlink,
   l_mdss_last,
 };
 
@@ -80,6 +82,8 @@ private:
   // State for while in reconnect
   MDSInternalContext *reconnect_done;
   int failed_reconnects;
+  bool reconnect_evicting;  // true if I am waiting for evictions to complete
+                            // before proceeding to reconnect_gather_finish
 
   friend class MDSContinuation;
   friend class ServerContext;
@@ -108,20 +112,19 @@ public:
   bool waiting_for_reconnect(client_t c) const;
   void dump_reconnect_status(Formatter *f) const;
 
-  Session *get_session(Message *m);
   void handle_client_session(class MClientSession *m);
   void _session_logged(Session *session, uint64_t state_seq, 
                       bool open, version_t pv, interval_set<inodeno_t>& inos,version_t piv);
   version_t prepare_force_open_sessions(map<client_t,entity_inst_t> &cm,
-                                       map<client_t,uint64_t>& sseqmap);
-  void finish_force_open_sessions(map<client_t,entity_inst_t> &cm,
-                                 map<client_t,uint64_t>& sseqmap,
+                                       map<client_t,pair<Session*,uint64_t> >& smap);
+  void finish_force_open_sessions(const map<client_t,pair<Session*,uint64_t> >& smap,
                                  bool dec_import=true);
   void flush_client_sessions(set<client_t>& client_set, MDSGatherBuilder& gather);
   void finish_flush_session(Session *session, version_t seq);
   void terminate_sessions();
   void find_idle_sessions();
   void kill_session(Session *session, Context *on_safe);
+  size_t apply_blacklist(const std::set<entity_addr_t> &blacklist);
   void journal_close_session(Session *session, int state, Context *on_safe);
   void reconnect_clients(MDSInternalContext *reconnect_done_);
   void handle_client_reconnect(class MClientReconnect *m);
@@ -130,7 +133,7 @@ public:
   void reconnect_tick();
   void recover_filelocks(CInode *in, bufferlist locks, int64_t client);
 
-  void recall_client_state(float ratio);
+  void recall_client_state(void);
   void force_clients_readonly();
 
   // -- requests --
@@ -162,9 +165,9 @@ public:
   bool check_fragment_space(MDRequestRef& mdr, CDir *in);
   bool check_access(MDRequestRef& mdr, CInode *in, unsigned mask);
   bool _check_access(Session *session, CInode *in, unsigned mask, int caller_uid, int caller_gid, int setattr_uid, int setattr_gid);
-  CDir *validate_dentry_dir(MDRequestRef& mdr, CInode *diri, const string& dname);
+  CDir *validate_dentry_dir(MDRequestRef& mdr, CInode *diri, boost::string_view dname);
   CDir *traverse_to_auth_dir(MDRequestRef& mdr, vector<CDentry*> &trace, filepath refpath);
-  CDentry *prepare_null_dentry(MDRequestRef& mdr, CDir *dir, const string& dname, bool okexist=false);
+  CDentry *prepare_null_dentry(MDRequestRef& mdr, CDir *dir, boost::string_view dname, bool okexist=false);
   CDentry *prepare_stray_dentry(MDRequestRef& mdr, CInode *in);
   CInode* prepare_new_inode(MDRequestRef& mdr, CDir *dir, inodeno_t useino, unsigned mode,
                            file_layout_t *layout=NULL);
@@ -260,7 +263,7 @@ public:
   bool _rmdir_prepare_witness(MDRequestRef& mdr, mds_rank_t who, vector<CDentry*>& trace, CDentry *straydn);
   void handle_slave_rmdir_prep(MDRequestRef& mdr);
   void _logged_slave_rmdir(MDRequestRef& mdr, CDentry *srcdn, CDentry *straydn);
-  void _commit_slave_rmdir(MDRequestRef& mdr, int r);
+  void _commit_slave_rmdir(MDRequestRef& mdr, int r, CDentry *straydn);
   void handle_slave_rmdir_prep_ack(MDRequestRef& mdr, MMDSSlaveRequest *ack);
   void do_rmdir_rollback(bufferlist &rbl, mds_rank_t master, MDRequestRef& mdr);
   void _rmdir_rollback_finish(MDRequestRef& mdr, metareqid_t reqid, CDentry *dn, CDentry *straydn);