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

 

二、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、如果是写网络数据事件则不作操作


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值