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类有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. python中类有什么用
  2. ceph-immmutable-object-cache有什么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ceph

上一篇:EMetaBlob类有什么用

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》