storage服务功能实现分析之四

上传文件——客户端fdfs_test.c中:依据upload_type为FDFS_UPLOAD_BY_FILE或buff或callback决定调用方式
1、tracker_query_storage_store_list_without_group     获取storage服务器列表
2、tracker_query_storage_store/tracker_connect_server 确定storage服务器并建立连接
3、storage_upload_by_filename/storage_upload_by_filebuff/storage_upload_by_callback  上传文件
4、storage_upload_slave_by_filename/storage_upload_slave_by_filebuff/storage_upload_slave_by_callback  通过TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE获取当前storage服务器,并使用STORAGE_PROTO_CMD_UPLOAD_SLAVE_FILE上传备份文件。老实说没有用过这个功能,这个功能有什么意义还不太明白。

步骤3中调用的文件上传处理:
storage_upload_by_filename_ex(STORAGE_PROTO_CMD_UPLOAD_FILE)->storage_do_upload_file->tcpsenddata_nb()/tcpsendfile/fdfs_recv_response
当中会使用sendfile零拷贝发送完整文件,包括FILE_1G_SIZE以上的大文件

storage服务端处理:
storage_deal_task(STORAGE_PROTO_CMD_UPLOAD_FILE)->storage_upload_file->storage_write_to_file   调用posix接口写入本地文件
写文件完成后启动同步流程:
storage_upload_file_done_callback(写完文件后才开始同步)->storage_service_upload_file_done->storage_client_create_link_wrapper->storage_client_create_link->tcpsenddata_nb(STORAGE_PROTO_CMD_CREATE_LINK) 记录返回的remote_filename
storage同步服务端:storage_deal_task(STORAGE_PROTO_CMD_CREATE_LINK)->storage_create_link->storage_dio_queue_push(deal_func参数)->storage_do_create_link->storage_create_link_core->storage_trunk_create_link->trunk_client_trunk_alloc_space
写文件需要在一个文件上传写完之后开始同步。

下载文件
客户端:C客户端直接调用,PHP客户端通过fastdfs_storage_download_file_to_callback调用

storage_download_file_ex->storage_do_download_file_ex->tcpsenddata_nb(STORAGE_PROTO_CMD_DOWNLOAD_FILE)


storage服务端处理:storage_deal_task(STORAGE_PROTO_CMD_DOWNLOAD_FILE)->

1、storage_server_download_file->trunk_file_stat_ex->trunk_file_stat_func->trunk_file_stat_func_ex 获取文件元数据
2、判断IS_TRUNK_FILE_BY_ID获取完整文件名
3、读取本地文件storage_read_from_file->storage_dio_queue_push(deal_func = dio_read_file)  通过任务队列方式提交本地文件posix接口读处理
4、storage_download_file_done_callback  下载后的善后处理,归还占用的任务资源,套接字等,通知相关应用
读文件都是本地读取,没有所谓的trunk问题,应该是在客户端查询tracker服务器后就知悉了文件分布。至于本地文件有就有、没有就没有,storage服务器上只需要处理单纯的文件IO请求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值