FastDFS storage 分析 (version:3.11)

storage的整体结构和tracker很相似,因为storage涉及到写文件,因此多了几个主要的任务;主要是IO的读写任务:dio_thread_entrance;


storage 处理消息的流程:  处理连接请求: storage_accept_loop 发送事件给---->storage_recv_notify_read(FDFS_STORAGE_STAGE_NIO_INIT)---->storage_nio_init(stage--> FDFS_STORAGE_STAGE_NIO_RECV)----->client_sock_read: 


在client_sock_read中处理消息事务或接收文件:


如上传文件客户端先发送STORAGE_PROTO_CMD_UPLOAD_FILE; 此时pClientInfo->total_offset还是0;所以由storage_deal_task来处理事务消息;---->storage_upload_file: 在storage_upload_file中处理消息并且用扩展文件名,时间, 文件大小等来生成storage上的文件---->填写文件信息----->把相应信息插入到IO的任务队列------>发送时间给IO处理任务,IO任务调用storage_upload_file填写的文件处理函数dio_write_file将文件内容写入磁盘;


客户端在发送STORAGE_PROTO_CMD_UPLOAD_FILE后,会调用sendfile系统接口发送文件; 此时client_sock_read调用storage_dio_queue_push将文件写任务给IO任务来处理文件写入磁盘;


storage 和tracker通信的线程是tracker_report_thread_entrance; 有几个tracker, 在storage中就创建几个线程和tracker进行通信, 这个线程的主要作用是storage的加入一个组, 和tracker进行心跳维护及数据同步。



继续。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值