真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ceph中LogSegment類有什么用

這篇文章主要為大家展示了“ceph中LogSegment類有什么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“ceph中LogSegment類有什么用”這篇文章吧。

10年積累的網(wǎng)站制作、做網(wǎng)站經驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站策劃后付款的網(wǎng)站建設流程,更有云和免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

LogSegment類說明:

class LogSegment {

     const log_segment_seq_t seq;          記錄LogSegment序號

     uint64_t offset, end;                            記錄偏移位置和結束位置

     int num_events;                                   記錄event的數(shù)量

     elist dirty_dirfrags, new_dirfrags;          記錄有變化的CDir結構

     elist dirty_dentries;                         記錄有變化的CDentry結構

     elist dirty_inodes;                              記錄有變化的CInode

     elist dirty_parent_inodes, dirty_dirfrag_dir, dirty_dirfrag_nest, dirty_dirfrag_dirfragtree

     elist open_files;

     ...

};

LogSegment用來記錄實際變化的CDir/CDentry/CInode的信息,LogSegment是整個MDLog最底層的數(shù)據(jù)結構

LogSegment類的方法:

LogSegment::try_to_expire(mds, gather_bld, op_prio)

|__遍歷new_dirfrags/dirty_dirfrags數(shù)組

     |__將數(shù)組中的內容插入到commit數(shù)組

|__遍歷dirty_dentries數(shù)組

     |__將數(shù)組中成員的CDentry::get_dir()插入到commit數(shù)組

|__遍歷dirty_inodes數(shù)組

     |__將數(shù)組中成員的CInode::get_parent_dn()::get_dir()插入到commit數(shù)組

|__遍歷commit數(shù)組

     |__若commit數(shù)組成員can_auth_pin()

          |__CDir::commit()                              提交針對CDir的修改

     |__若commit數(shù)組成員!can_auth_pin()

          |__CDir::add_waiter(CDir::WAIT_UNFREEZE)          添加到等待隊列中

|__遍歷uncommitted_masters數(shù)組

     |__mds->mdcache->wait_for_uncommitted_master()          等待客戶端回復commit

|__遍歷uncommitted_fragments數(shù)組

     |__mds->mdcache->wait_for_uncommitted_fragment()          等待未收到commit的fragment

|__遍歷dirty_dirfrag_dir數(shù)組

     |__mds->locker->scatter_nudge()                                   等待dirlock flush

|__遍歷dirty_dirfrag_dirfragtree數(shù)組

     |__mds->locker->scatter_nudge()                                   等待dirfragtreelock flush

|__遍歷dirty_dirfrag_nest數(shù)組

     |__mds->locker->scatter_nudge()                                   等待nest flush

|__遍歷open_files數(shù)組

     |__數(shù)組中的CInode是授權的并且有訪問權限的

          |__若LogEvent為空

               |__創(chuàng)建一個新的EOpen類對象

               |__mds->mdlog->start_entry(EOpen)          將新的EOpen類對象寫入到mdlog

          |__le->add_clean_inode()                         將inode添加到LogEvent的clean inode數(shù)組中

          |__ls->open_files.push_back()                            插入到LogSegment的open_files數(shù)組

     |__數(shù)組中的CInode是授權的但沒有訪問權限

          |__in->item_open_file.remove_myself()               從item_open_file數(shù)組中刪除此CInode

     |__若le不為空

          |__mds->mdlog->submit_entry(le)                    提交LogEvent到MDLog中

|__遍歷dirty_parent_inodes數(shù)組

     |__若數(shù)組中元素can_auth_pin()

          |__CInode::store_backtrace()

     |__若數(shù)組中元素不能can_auth_pin()

          |__CInode::add_waiter(CInode::WAIT_UNFREEZE)          等待unfreeze

|__遍歷slave_updates數(shù)組

     |__更新MDSlaveUpdate::waiter = gather_bld.new_sub()          等待slave update

|__檢查inotablev是否大于mds->inotable->get_committed_version()

     |__mds->inotable->save()                                                       保存inotable

|__檢查sessionmapv是否大于mds->sessionmap.get_committed()

     |__mds->sessionmap.save()                                                       保存sessionmap

|__mds->sessionmap.save_if_dirty()                                                保存sessionmap

|__遍歷pending_commit_tids數(shù)組

     |__從數(shù)組中得到MDSTableClient類對象

     |__MDSTableClient::wait_for_ack()                                        等待未應答的commit

|__遍歷tablev數(shù)組

     |__從數(shù)組中得到MDSTableServer類對象

     |__若tablev數(shù)組中的version值大于MDSTableServer::get_committed_version()

          |__MDSTableServer::save()                                                  保存MDSTableServer

|__遍歷truncating_inodes數(shù)組

     |__CInode::add_waiter(CInode::WAIT_TRUNC)                         等待TRUNC

|__mds->mdlog->flush()                                                                 刷新mdlog

以上是“ceph中LogSegment類有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁標題:ceph中LogSegment類有什么用
本文來源:http://weahome.cn/article/ihicpg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部