您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關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相關類有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。