2019独角兽企业重金招聘Python工程师标准>>>

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且将该消息发送给客户端;

转载于:https://my.oschina.net/linuxhunter/blog/647319

Ceph OSD处理客户端写操作处理流程相关推荐

  1. Ceph MDS 处理客户端删除目录操作源码分析

    存储系统:ceph-14.2.22 Server::handle_client_unlink [ 文件路径 ] ceph/src/mds/Server.cc 当客户端发送删除文件请求到mds服务端时, ...

  2. 解决ceph osd写满导致osd无法启动的问题

    背景 最近一个无人看管的ceph集群出现了osd被写满的情况,osd磁盘使用量99.99%,然后osd自己down了,重启也启动不起来. 可能是因为之前有人调过full的限制值,所以才完全写满了,由于 ...

  3. 【ceph】ceph osd blacklist cep黑名单|MDS问题分析

    目录 blacklist 是什么 blacklist相关操作 Ceph MDS问题分析 CephFS client evict子命令使用 概述 命令格式 1. 查看所有client/session 2 ...

  4. Ceph BlueStore 和双写问题

    论开源分布式存储,Ceph大名鼎鼎.用同一个存储池融合提供块存储.对象存储.集群文件系统.在国内有近年使用量迅速攀升,Ceph Day峰会也搬到北京来开了. 大型公司内部研发云虚拟化平台,常使用开源方 ...

  5. ceph osd 由于“No space left on device” 异常down,通过扩容文件系统或者显式运行osd进程解决

    文章目录 ceph版本: 环境配置: 异常问题: 问题解决: 总结 ceph版本: ceph 12.2.1 环境配置: tier_pool 16个分区大小800G 的osd容量 3副本 data_po ...

  6. 二, 大数据基础架构Hadoop-HDFS入门和基本操作(基本组成, Shell操作, API操作, 读写流程) hf

    一, HDFS概述 1.1 HDFS的产生背景和定义 随着数据量越来越大,我们需要把文件分布存储到多台计算机上,分布式文件管理系统作为一种管理多台机器上文件的系统应运而生, HDFS是其中的一种. H ...

  7. Spring Cloud 微服务项目操作实战流程(完结)

    Spring Cloud入门项目操作实战流程 Day01~02 〇.Service - 业务服务结构 商品服务 item service,端口 8001 用户服务 user service,端口 81 ...

  8. linux操作系统启动流程与kickstart文件制作

    文章目录 一.Linux操作系统启动流程 1.1.简单回顾linux系统组成以及内核作用 1.2.简单了解一下磁盘构成以及相关基础知识 二.CentOS 启动流程(只适用于MBR类型的PC架构主机) ...

  9. 【ceph】ceph OSD状态及常用命令

    OSD进程的启动停止:https://blog.csdn.net/bandaoyu/article/details/119894927 1. OSD概念 OSD:Object Storage Devi ...

  10. ceph常用命令及其使用、ceph集群定位常用命令说明【如ceph osd set norebalance】、ceph官方文档查询地址

    文章目录 ceph集群的监控 查看OSD版本 检查集群的健康情况 监控集群的时间 查看集群的空间利用率 查看集群的状态 查看集群的实时状态 获取秘钥列表 查看ceph特征 查看osd存储引擎 获得所有 ...

最新文章

  1. c语言一行黑白相间的瓷砖,C语言编程练习15:贴瓷砖
  2. NuGet学习笔记(1)——初识NuGet及快速安装使用
  3. mysql explain理解
  4. CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13+博客系统WordPress3.3.2
  5. Python内存管理以及垃圾回收机制
  6. 【华为大咖分享】6.华为专家揭秘研发效能提升之道(后附PPT下载地址)
  7. 代码有温度 科技需向善
  8. java单例模式使用及注意事项
  9. FZU 2128 最长子串
  10. hdu Collect More Jewels
  11. 逻辑教育大厂必备IOS面试突击班
  12. 简述具有五层协议的网络体系结构各层的主要功能。
  13. 读书笔记,《刻意练习》,第三章,心理表征
  14. 2.8 mm / 4 mm / 6 mm / 8 mm 焦距的镜头分别能监控多大范围?
  15. 重庆师范大学计算机技术排名,2017年重庆师范大学专业排名
  16. php怎么格式化json,phpJSON数据格式化(美化)的方法
  17. LayaAir IDE 项目发布3.0 详解(含命令行发布)
  18. 【题解】慈溪中学-8.12-T3
  19. 股市中的内盘、外盘、跌幅、震幅、现手、总手、换手是什么意思?
  20. .NET Reactor简单使用教程

热门文章

  1. dataframe scala 修改值_如何填补Pandas中的缺失值(机器学习入门篇)
  2. 来面试,偷懒不答题,直接忽略
  3. LINUX编译Android FFmpeg:fatal error: errno.h: No such file or directory
  4. 原来编译通过,现在编译不通过,怎么回事?
  5. 使用Freetype发现的问题记录
  6. 纽微特成立起因:申某账务有鬼,张某不干活怎么不说
  7. jpeglib画质的代码分析
  8. 管理感悟:能表格不文字
  9. linux内存测试工具memtest,linux内存测试工具memtester使用
  10. java数组函数_Java数组