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

溫馨提示×

溫馨提示×

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

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

ceph中LogSegment類有什么用

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

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

LogSegment類說明:

class LogSegment {

     const log_segment_seq_t seq;          記錄LogSegment序號

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

     int num_events;                                   記錄event的數量

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

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

     elist<CInode*> dirty_inodes;                              記錄有變化的CInode

     elist<CInode*> dirty_parent_inodes, dirty_dirfrag_dir, dirty_dirfrag_nest, dirty_dirfrag_dirfragtree

     elist<CInode*> open_files;

     ...

};

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

LogSegment類的方法:

LogSegment::try_to_expire(mds, gather_bld, op_prio)

|__遍歷new_dirfrags/dirty_dirfrags數組

     |__將數組中的內容插入到commit數組

|__遍歷dirty_dentries數組

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

|__遍歷dirty_inodes數組

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

|__遍歷commit數組

     |__若commit數組成員can_auth_pin()

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

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

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

|__遍歷uncommitted_masters數組

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

|__遍歷uncommitted_fragments數組

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

|__遍歷dirty_dirfrag_dir數組

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

|__遍歷dirty_dirfrag_dirfragtree數組

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

|__遍歷dirty_dirfrag_nest數組

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

|__遍歷open_files數組

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

          |__若LogEvent為空

               |__創建一個新的EOpen類對象

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

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

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

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

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

     |__若le不為空

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

|__遍歷dirty_parent_inodes數組

     |__若數組中元素can_auth_pin()

          |__CInode::store_backtrace()

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

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

|__遍歷slave_updates數組

     |__更新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數組

     |__從數組中得到MDSTableClient類對象

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

|__遍歷tablev數組

     |__從數組中得到MDSTableServer類對象

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

          |__MDSTableServer::save()                                                  保存MDSTableServer

|__遍歷truncating_inodes數組

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

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

以上是“ceph中LogSegment類有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

塔河县| 咸阳市| 祁东县| 寿光市| 北碚区| 盈江县| 安远县| 乌拉特中旗| 卓尼县| 揭阳市| 闽侯县| 新营市| 岳西县| 三原县| 台湾省| 河南省| 盐边县| 左云县| 北宁市| 灵璧县| 宁乡县| 宜宾市| 凤凰县| 郧西县| 丹寨县| 吴川市| 开封县| 抚顺市| 邢台市| 乌什县| 安丘市| 汨罗市| 句容市| 承德县| 临高县| 蓝山县| 台东县| 信丰县| 青海省| 兴国县| 柞水县|