千家信息网

Ceph OSD处理客户端写操作处理流程是怎么样的

发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,这篇文章主要为大家展示了"Ceph OSD处理客户端写操作处理流程是怎么样的",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Ceph OSD处理客户端写操作
千家信息网最后更新 2025年02月24日Ceph OSD处理客户端写操作处理流程是怎么样的

这篇文章主要为大家展示了"Ceph OSD处理客户端写操作处理流程是怎么样的",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Ceph OSD处理客户端写操作处理流程是怎么样的"这篇文章吧。

1、OSD从client端收到请求的处理流程

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

|__OSD::dispatch_op_fast()

|__OSD::handle_op()

|__OSD::get_pg_or_queue_for_pg()

|__OSD::enqueue_op()

|__PG::queue_op()

|__OSD::op_wq.queue() 将client的请求写入到队列

主OSD处理从client端请求的处理流程

OSD::ShardOpWQ::_process()

|__OSD::dequeue_op()

|__ReplicatedPG::do_request()

|__ReplicatedPG::do_op()

|__ReplicatedPG::execute_ctx()

|__ReplicatedPG::preapare_transcation()

|__ReplicatedPG::do_osd_ops()

|__ReplicatedPG::issue_repop()

|__ReplicateBackend::submit_transaction()

|__ReplicateBackend::issue_op() 主OSD将写请求发送到从OSDs

|__ReplicatedPG::queue_transcations() 写主OSD FileJournal

|__ObjectStore::queue_transactions()

|__FileStore::queue_transactions()

|__JournalingObjectStore::_op_journal_transactions()

|__FileJournal::submit_entry() 将日志写入到FileJournal的writeq队列

|__ReplicatedPG::eval_repop()

主OSD的FileJournal写线程

FileJournal::write_thread_entry() 负责从writeq队列中获取待写入的日志

|__FileJournal::prepare_multi_write() 构成日志

|__FileJournal::do_write() 实际写日志

|__FIleJournal::queue_completions_thru()

|__completion_peek_front() 获取C_JournalAhead类实例

|__finisher->queue()

|__finisher_cond.Signal() 启动FileJournal的finisher线程处理C_JournalAhead类实例

主OSD的C_JournalAhead类处理

C_JournalAhead::finish()

|__FileStore::_journaled_ahead()

|__FileStore::queue_op()

|__FileStore::op_wq.queue() 将数据写入到FileStore写线程队列中

|__ondisk_finisher.queue(ondisk) 调用ReplicatedBackend->op_commit()回调函数

主OSD的FileStore写数据线程类处理

FileStore::op_wq

|__FileStore::op_wq._process()

|__FileStore::_do_op()

|__FileStore::_do_transactions()

|__FileStore::_do_transaction()

|__FileStore::_write() 落盘到FileStore中(写入指定的文件中)

|__FileStore::op_wq._process_finish()

|__FileStore::_finish_op()

|__op_finisher.queue() 调用ReplicatedPG::op_applied()回调函数

2、从OSD处理主OSD端发送过来的请求

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

|__OSD::dispatch_op_fast()

|__OSD::handle_replica_op()

|__OSD::get_pg_or_queue_for_pg()

|__OSD::enqueue_op()

|__PG::queue_op()

|__OSD::op_wq.queue() 将主OSD的请求写入到从OSD处理队列中

从OSD处理workqueue

OSD::ShardOpWQ::_process()

|__OSD::dequeue_op()

|__ReplicatedPG::do_request()

|__ReplicatedBackend::handle_message()

|__ReplicatedBackend::sub_op_modify()

|__ReplicatedBackend::sub_op_modify_impl()

|__注册commit回调函数类C_OSD_RepModifyCommit()

|__注册Apply回调函数类C_OSD_RepModifyApply()

|__ReplicatedPG::queue_transcations() 从OSD写FileJournal

|__ObjectStore::queue_transactions()

|__FileStore::queue_transactions()

|__JournalingObjectStore::_op_journal_transactions()

|__FileJournal::submit_entry() 将日志写入到FileJournal的writeq队列

|__ReplicatedPG::eval_repop()

从OSD的FileJournal写线程

FileJournal::write_thread_entry() 负责从writeq队列中获取待写入的日志

|__FileJournal::prepare_multi_write() 构成日志

|__FileJournal::do_write() 实际写日志

|__FIleJournal::queue_completions_thru()

|__completion_peek_front() 获取C_JournalAhead类实例

|__finisher->queue()

|__finisher_cond.Signal() 启动FileJournal的finisher线程处理C_JournalAhead类实例

从OSD的C_JournalAhead类处理

C_JournalAhead::finish()

|__FileStore::_journaled_ahead()

|__FileStore::queue_op()

|__FileStore::op_wq.queue() 将数据写入到FileStore写线程队列中

|__ondisk_finisher.queue(ondisk) 调用ReplicatedBackend->op_commit()回调函数

从OSD的日志写完成后的处理

C_OSD_RepModifyCommit()

|__finish()

|__ReplicatedBackend::sub_op_modify_commit()

|__生成MOSDRepOpReply消息 CEPH_OSD_FLAG_ONDISK

|__ReplicatedPG::send_message_osd_cluster() 将从OSD回复信息发给主OSD

|__OSD::send_message_osd_cluster()

从OSD的FileStore写数据线程类处理

FileStore::op_wq

|__FileStore::op_wq._process()

|__FileStore::_do_op()

|__FileStore::_do_transactions()

|__FileStore::_do_transaction()

|__FileStore::_write() 落盘到FileStore中(写入指定的文件中)

|__FileStore::op_wq._process_finish()

|__FileStore::_finish_op()

|__op_finisher.queue() 调用ReplicatedPG::op_applied()回调函数

从OSD的落盘完成后的处理

C_OSD_RepModifyApply()

|__finish()

|__ReplicatedBackend::sub_op_modify_applied()

|__生成MOSDRepOpReply消息 CEPH_OSD_FLAG_ACK

|__ReplicatedPG::send_message_osd_cluster() 将从OSD回复信息发给主OSD

|__OSD::send_message_osd_cluster()

3、主OSD处理从OSD发送Reply处理流程

从OSD处理主OSD端发送过来的请求

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

|__OSD::dispatch_op_fast()

|__OSD::handle_replica_op()

|__OSD::get_pg_or_queue_for_pg()

|__OSD::enqueue_op()

|__PG::queue_op()

|__OSD::op_wq.queue() 将从OSD的reply写入到主OSD处理队列中

主OSD处理从OSD端发送过来的reply

OSD::ShardOpWQ::_process()

|__OSD::dequeue_op()

|__ReplicatedPG::do_request()

|__ReplicatedBackend::handle_message()

|__ReplicatedBackend::sub_op_modify_reply()

|__ip_op.waiting_for_commit.erase()

|__ip_op.waiting_for_applied.erase()

|__对于ip_op.waiting_for_commit为空,则调用ip_op.on_commit->complete(0),即:调用on_all_commit回调函数处理。on_all_commit回调函数在ReplicatedPG.cc::execute_ctx()函数中注册,用来对所有副本在写FileJournal完成后的处理。on_all_commit()函数设置all_committed=true,之后调用eval_repop()函数;

|__对于ip_op.waiting_for_applied为空,则调用ip_op.on_applied->complete(0),即:调用on_all_applied回调函数处理。on_all_applied回调函数在ReplicatedPG.cc::execute_ctx()函数中注册,用来对所有副本都落盘完成后的处理。on_all_applied()函数设置all_applied=true,之后调用eval_repop()函数。在eval_repop()函数中若all_applied=true,则创建一个MOSDOpReply消息并且设置消息的flags=CEPH_OSD_FLAG_ACK且将该消息发送给客户端;

以上是"Ceph OSD处理客户端写操作处理流程是怎么样的"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

处理 函数 日志 队列 线程 流程 消息 客户 客户端 实例 数据 内容 篇文章 信息 副本 实际 文件 学习 帮助 生成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 SQL数据库创建触发器代码 互联网科技股票有哪些 我国现阶段网络安全问题 网络安全威胁可分为哪两类 多站点 共享数据库 幼儿园家长网络安全学习心得体会 手机可以使用数据库吗 连接服务器要多少钱 深圳观铭互联网科技有限公司 广电网络技术专家排名 2020年网络安全日答案 学习通大学生网络安全教育答案 国产服务器概念龙头排名 东莞市荣骏网络技术有限公司 网络安全一机双网通讯稿 上海有力互联网科技有限公司 安全许可证服务器 数据库约束表达式0到9 广州大数据库安全 王者荣耀六周年服务器扩容补偿 阜南软件开发专业 晋城软件开发市场价 数据库中分组的sql语句 阿里云服务器数据安全吗 安全教育服务器开小差 软件开发工作晚上上班白天休息 关于网络安全的知识有什么 网络安全的宣传词 欧品科技道闸系统数据库密码多少 二手服务器cpu收购
0