千家信息网

ceph中LogSegment类有什么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"ceph中LogSegment类有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"ceph中LogSegment类有什么用"
千家信息网最后更新 2026年11月01日ceph中LogSegment类有什么用

这篇文章主要为大家展示了"ceph中LogSegment类有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"ceph中LogSegment类有什么用"这篇文章吧。

LogSegment类说明:

class LogSegment {

const log_segment_seq_t seq; 记录LogSegment序号

uint64_t offset, end; 记录偏移位置和结束位置

int num_events; 记录event的数量

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最底层的数据结构

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

数组 内容 对象 成员 变化 篇文章 结构 位置 元素 权限 学习 帮助 检查 信息 实际 客户 客户端 序号 数据 数据结构 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 广东猪兼强互联网科技有限公司 网络科技有限互联网 广州凡科互联网科技 深圳天众互联网科技公司 碳银互联网科技有限公司 天下捷融互联网科技 火传媒上海互联网科技 互联网金融和金融科技 联恩商钥互联网科技有限公司 科技大学互联网专业好不好 欧洲十大科技互联网公司 字节跳动和互联网科技 辽宁互联网新科技 互联网公司黑科技创始人 科技赋能视角下互联网保险发展 2021互联网科技公司排名 互联网营销推广黑科技 南京一网一红互联网科技有限公司 吉林省码上互联网科技电话 朗新科技与工业互联网 卓越科技(互联网 ) 左右互联网络科技 互联网对科技的发展 千方科技属于互联网企业吗 互联网科技创新的路径 互联网科技圈年度人物 本届互联网大会上的黑科技 青岛易易互联网科技 宁波允成互联网科技有限公司
0