FastDFS storage 分析 (version:3.11)

来源:互联网 发布:淘宝hottoys在哪买 编辑:程序博客网 时间:2024/05/16 01:06

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进行心跳维护及数据同步。



继续。。。。。

原创粉丝点击