91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mutation相關類有哪些

發布時間:2021-12-18 16:58:26 來源:億速云 閱讀:132 作者:小新 欄目:云計算

這篇文章給大家分享的是有關Mutation相關類有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

MutationImpl類說明:

struct MutationImpl {
     metareqid_t           reqid;
     __u32                     attempt;
     LogSegment          *ls;                    提交的log片段
     utime_t                   mds_stamp;     mds本地時間戳
     utime_t                   op_stamp;        客戶端提供的時間戳
     mds_rank_t            slave_to_mds;     若slave_to_mds>0則說明此Mutation是slave發起的
     set<MDSCacheOjbect *> pins;          mds cache pins
     set<CInode*>         stickydirs;            
     map<MDSCacheObject*, mds_rank_t> remote_auth_pins;     遠端的auth pins
     set<MDSCacheObject*> auth_pins;                                         本地的auth pins
     list<CInode*> projected_inodes;
     list<CDir*> projected_fnodes;
     list<ScatterLock*> updated_locks;
     list<CInode*> dirty_cow_inodes;
     list<pair<CDentry*, version_t>> dirty_cow_dentries;
};

MutationImpl類方法:

MutationImpl::get_client()

|__若reqid.name.is_client()不為空

     |__說明請求是從client發出的,返回client信息,即:client_t(reqid.name.num())

|__返回-1

MutationImpl::apply()

|__遍歷并清空projected_inodes數組且每個數組成員執行pop_and_dirty_projected_inode(ls)函數

|__遍歷并清空projected_fnodes數組且每個數組成員執行pop_and_dirty_projected_fnode(ls)函數

|__遍歷dirty_cow_inodes數組

     |__數組中每個成員執行_mark_dirty(ls)

|__遍歷dirty_cow_dentries數組

     |__數組中每個成員執行_mark_dirty(ls)

|__遍歷updated_locks數組

     |__數組中每個成員執行mark_dirty()

MutationImpl::cleanup()

|__遍歷auth_pins數組

     |__數組中每個成員執行auth_unpin()

|__清空auth_pins數組

|__遍歷pins數組

     |__數組中每個成員執行put()

|__清空pins數組

MDRequestImpl主要記錄來自client的請求、slave的請求以及內部的操作internal_op。

struct MDRequestImpl: public MutationImpl, public TrackedOp {
   Session *session;                    記錄session信息
   elist<MDRequestImpl*>::item item_session_request;    請求項
   MClientRequest *client_request;            客戶端請求
   vector<CDentry*> dn[2];                保存兩套dentry
   CInode *in[2];                    保存兩套inode
   CDentry *straydn;                    記錄stray的dentry
   snapid_t snapid;                    記錄snap ID信息
   indoeno_t alloc_ino, used_prealloc_ino;        分配的inode號
   interval_set<inodeno_t> prealloc_inos;        預分配的inode號
   int snap_caps;                    snap capability
   int getattr_caps;                    執行getattr的權限
   bool did_early_reply;                    
   bool o_trunc;                        請求是一個O_TRUNC事件
   bool has_completed;                    請求已經完成
   bufferlist reply_extra_bl;                在回復中包含的額外的內容
   map<vinodeno_t, ceph_seq_t> cap_releases;        
   MMDSSlaveRequest *slave_request;            slave的請求
   int internal_op;                    內部操作
   Context *internal_op_finish;                內部操作的回調函數
   void *internal_op_private;                內部操作的私有對象
   int retry;                        記錄rety的次數
   bool waited_for_osdmap;                是否需要等待更新的osmap
   struct More {
     int slave_error;
     set<mds_rank_t> slaves;                發起slave請求的集合
     set<mds_rank_t> waiting_on_slave;            等待slavereq reply的peer
     set<mds_rank_t> witnessed;    
     CInode *rename_inode;                保存freeze的inode信息
     bool is_freeze_authpin;                保存是否執行了freeze authpin操作
     bool is_remote_frozen_authpin;            保存是否執行了remote frozen authpin操作
     bool is_ambiguous_auth;                保存是否執行了ambiguous auth操作
   }_more;
 };

MDRequestImpl類方法:
MDRequestImpl::~MDRequestImpl()
|__若client_request不為空
  |__執行client_request->put()方法,嘗試釋放client_request
|__若slave_request不為空
  |__執行slave_request->put()方法,嘗試釋放slave_request
|__刪除_more類對象

MDRequestImpl::freeze_auth_pin(inode)
|__設置_more中的rename_inode為inode
|__設置_more中的is_freeze_authpin為true
|__調用auth_pin(inode)
|__執行inode的freeze_auth_pin()

MDRequestImpl::unfreeze_auth_pin(clear_inode)
|__從_more中的rename_inode得到freeze的inode
|__若inode當前是is_frozen_auth_pin()
  |__執行inode的unfreeze_auth_pin()來解除freeze
|__若inode當前不是is_frozen_auth_pin()
  |__執行inode的unfreeze_inode()
|__設置_more中的is_freeze_autpin為false
|__若clear_inode==true
  |__設置_more中的rename_inode為null

MDRequestImpl::set_remote_frozen_auth_pin(inode)
|__設置_more中的rename_inode為inode
|__設置_more中的is_remote_frozen_authpin為true

MDRequestImpl::set_ambiguous_auth(inode)
|__執行inode的set_ambiguous_auth()函數
|__設置_more中的rename_inode為inode
|__設置_more中的is_ambiguous_auth為true

MDRequestImpl::clear_ambiguous_auth()
|__從_more中的rename_inode得到ambiguous的inode
|__執行inode的clear_ambiguous_auth()函數
|__設置_more中的is_ambiguous_auth為false

MDRequestImpl::can_auth_pin(object)
|__若object能auth pin或者object在auth_pin或remote auth pin中或者_more中的is_freeze_authpin為true或者_more中的rename_inode==object
  |__返回true
|__返回false

MDRequestImpl::drop_local_auth_pins()
|__若_more不為空
  |__調用unfreeze_auth_pin(true)來清除freeze的auth pin
|__調用MutationImpl::drop_local_auth_pins()    來清除本地的auth pins 

MDRequestImpl::set_filepath(fp)
|__設置_more中的filepath2為fp

MDRequestImpl::set_filepath3(fp)
|__設置_more中的filepath3為fp

MDRequestImpl::get_filepath()
|__若client_request不為空
  |__返回client_request->get_filepath()
|__返回_more中的filepath2

MDRequestImpl::get_filepath3()
|__若client_request不為空
  |__返回client_request->get_filepath3()
|__返回_more中的filepath3
 

感謝各位的閱讀!關于“Mutation相關類有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万全县| 天峻县| 左云县| 福州市| 宁都县| 平遥县| 阿瓦提县| 龙里县| 建湖县| 霍林郭勒市| 宁夏| 军事| 大悟县| 静海县| 突泉县| 威海市| 鹤峰县| 三穗县| 东乌| 江华| 泽库县| 香格里拉县| 宁陵县| 潍坊市| 扬中市| 石景山区| 霸州市| 清涧县| 开江县| 乐昌市| 安吉县| 昌黎县| 天门市| 临潭县| 枣庄市| 石泉县| 佳木斯市| 南华县| 莱州市| 汉源县| 高尔夫|