kfs代码研究(二、meta server处理流程)

来源:互联网 发布:java多泛型转换 编辑:程序博客网 时间:2024/06/06 15:45
 

二、meta server处理流程
Metaserver_main.cc:
这个就是metaserver的main函数所在的文件,main函数在读取输入参数和配置文件并且初始化日志模块后,就进入了kfs_startup函数,这个函数就是meta server的启动过程,位置在startup.cc中。
kfs_startup:
1、首先调用setup_initial_tree重新建立metatree或者从检查点文件恢复metatree。
2、接着调用replayer.playAllLogs播放检查点后所有的日志,恢复metatree。
3、调用metatree.recomputeDirSize计算所有目录的大小。
4、调用ChangeIncarnationNumber增加chunk的版本号(没搞懂具体作用是什么)。
5、调用emptyDumpsterDir清空垃圾文件目录中的文件。
6、调用initialize_request_handlers初始化命令处理函数
kfs_startup函数调用结束后调用gNetDispatch.Start启动网络处理模块

NetDispatch.cc:
NetDispatch::Start:
1、调用mClientManager->StartAcceptor,mChunkServerFactory->StartAcceptor分别启动客户端和chuck server的监听。
2、调用globalNetManager().MainLoop进入网络管理模块主循环
NetDispatch::Dispatch:
在每个客户端或者chunk server请求处理完毕以后会调用此函数(在process_request函数中调用)

ClientSM.cc:
meta server收到客户端请求后会调用ClientSM::HandleRequest来处理请求
ClientSM::HandleRequest:
1、如果是读网络数据事件(EVENT_NET_READ)调用ClientSM::HandleClientCmd处理客户端命令,ClientSM::HandleClientCmd又调用ParseCommand(在request.cc中实现)解析具体的命令和执行对应的动作
2、如果是命令处理完事件(EVENT_CMD_DONE)调用ClientSM::SendResponse对客户端做应答。
3、如果是写网络数据事件(EVENT_NET_WROTE)调用ClientSM::SubmitOp提交对应操作。

ChuckServer.cc:
meta server收到chuck server的请求后会调用ChunkServer::HandleRequest处理chuckserver的命令
ChunkServer::HandleRequest:
1、如果是读网络数据事件(EVENT_NET_READ)调用ChunkServer::HandleMsg处理chuckserver的消息
2、如果是命令处理完事件(EVENT_CMD_DONE)调用ChunkServer::SendResponse给chuckserver应答
3、如果是写网络数据事件则不作操作