OSD.cc 快速参考卡片
🚀 核心入口函数
| 函数 | 行号 | 功能 |
|---|---|---|
OSD::OSD() |
2741 | OSD 构造函数 |
OSD::pre_init() |
2941 | 预初始化 |
OSD::init() |
4050 | 完整初始化(24步) |
OSD::shutdown() |
5084 | 关闭流程 |
OSD::ms_dispatch() |
8158 | 消息分发入口 |
📨 消息处理
| 消息类型 | 处理函数 | 行号 | 说明 |
|---|---|---|---|
MOSDOp |
handle_op() |
~8500 | 客户端 I/O 操作 |
MOSDPGLog |
handle_pg_log() |
~9000 | PG 日志同步 |
MOSDPGNotify |
handle_pg_notify() |
~9100 | PG 通知 |
MOSDPGCreate2 |
handle_pg_create() |
~5500 | PG 创建 |
MCommand |
handle_command() |
8007 | 管理命令 |
🗂️ PG 管理
| 函数 | 行号 | 功能 |
|---|---|---|
OSD::load_pgs() |
~5500 | 从存储加载 PG |
OSD::create_pg() |
~5600 | 创建新 PG |
OSD::lookup_pg() |
~5700 | 查找 PG |
OSDService::queue_for_pg_delete() |
2238 | PG 删除 |
🔄 恢复和回填
| 函数 | 行号 | 功能 |
|---|---|---|
OSDService::queue_recovery_context() |
2004 | 恢复上下文入队 |
OSDService::_queue_for_recovery() |
2358 | 恢复操作入队 |
OSDService::kick_recovery_queue() |
~2400 | 触发恢复队列 |
🧹 Scrub
| 函数 | 行号 | 功能 |
|---|---|---|
OSDService::queue_for_scrub() |
2149 | Scrub 入队 |
OSD::scrub_purged_snaps() |
8041 | 清理快照映射 |
⏰ 定时器
| 函数 | 行号 | 功能 |
|---|---|---|
OSD::tick() |
6951 | 持有锁的 tick |
OSD::tick_without_osd_lock() |
7006 | 不持有锁的 tick |
💓 心跳
| 函数 | 行号 | 功能 |
|---|---|---|
OSD::_add_heartbeat_peer() |
6098 | 添加心跳对等节点 |
OSD::maybe_update_heartbeat_peers() |
6159 | 更新心跳对等节点 |
OSD::heartbeat_check() |
~6800 | 心跳检查 |
OSD::heartbeat_dispatch() |
8136 | 心跳消息分发 |
🗺️ OSDMap 管理
| 函数 | 行号 | 功能 |
|---|---|---|
OSDService::activate_map() |
646 | 激活新 Map |
OSDService::get_nextmap_reserved() |
663 | 保留 Map |
OSDService::await_reserved_maps() |
705 | 等待 Map 释放 |
OSDService::publish_map() |
~650 | 发布 Map |
🎯 操作调度
| 函数 | 行号 | 功能 |
|---|---|---|
OSDService::enqueue_back() |
1969 | 操作入队(尾部) |
OSDService::enqueue_front() |
1979 | 操作入队(头部) |
🔧 工具函数
| 函数 | 行号 | 功能 |
|---|---|---|
OSD::write_superblock() |
2418 | 写入 Superblock |
OSD::mkfs() |
2448 | 创建文件系统 |
OSD::get_osd_compat_set() |
263 | 获取兼容性特性 |
📊 关键数据结构
| 类型 | 位置 | 说明 |
|---|---|---|
OSDService |
OSD.h | 服务层,提供共享服务 |
OSDShard |
OSD.h | 分片,管理 PG 和调度器 |
ShardedOpWQ |
OSD.h | 分片工作队列 |
HeartbeatInfo |
OSD.h | 心跳信息 |
🔑 关键代码段
初始化流程(24步)
1 | 行 4050-4583: OSD::init() |
消息处理流程
1 | 行 8158: ms_dispatch() 入口 |
PG 操作流程
1 | 客户端操作 → ms_dispatch() |
📍 重要行号速查
- 文件头部注释: 行 17-29
- OSD 构造函数: 行 2741
- OSD 初始化: 行 4050
- 消息分发: 行 8158
- 定时器 tick: 行 6951, 7006
- 心跳检查: 行 ~6800
- PG 创建: 行 ~5500
- 恢复调度: 行 2004, 2358
🎓 学习路径
- 第一天:阅读
OSD::init()(行 4050-4583) - 第二天:阅读
OSD::ms_dispatch()(行 8158+) 和消息路由 - 第三天:阅读 PG 管理相关函数
- 第四天:阅读恢复和回填机制
- 第五天:阅读心跳和定时器
💡 调试技巧
设置断点:
OSD::init()- 观察初始化流程OSD::ms_dispatch()- 观察消息分发OSD::tick()- 观察定时任务
日志输出:
- 使用
dout()宏查看调试信息 - 关注
derr错误输出
- 使用
符号查找:
- 使用 IDE 的 “Go to Definition”
- 使用 grep 查找函数调用
提示:配合 OSD.h 一起阅读,理解类定义和接口
正在加载留言…