storage初始化注册:其对于tracker做客户端处理
1、storage进程main->storage_func_init->storage_func_init->tracker_get_my_server_id->tracker_get_storage_id->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_SERVER_ID)/fdfs_recv_response
2、storage进程main->storage_func_init->fdfs_get_storage_ids_from_tracker_group->fdfs_get_storage_ids_from_tracker_server->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_FETCH_STORAGE_IDS)/fdfs_recv_response
3、storage进程main->tracker_report_thread_start->tracker_report_thread_entrance->tracker_get_storage_max_status->tracker_get_storage_status->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)定时触发
storage进程main->storage_func_init->storage_check_and_make_data_dirs->storage_disk_recovery_restore->recovery_get_src_storage_server->tracker_get_storage_max_status->tracker_get_storage_status->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)初始化获取
tracker作服务端处理:
1、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_GET_SERVER_ID)->tracker_deal_get_storage_id->fdfs_get_storage_id_by_ip
2、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_FETCH_STORAGE_IDS)->tracker_deal_fetch_storage_ids
3、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)->tracker_deal_server_get_storage_status->
获取到的数据放入fast_task_info结构的data字段中,静荷数据前有TrackerHeader头,静荷数据依次拷贝,服务处理最后调用send_add_event完成发送
storage之间相互同步:
tracker_report_thread_start->tracker_report_thread_entrance->tracker_heart_beat->tracker_check_response->
A、storage相互间开始同步:trunk_sync_thread_start_all->trunk_sync_data->tcpsenddata_nb(STORAGE_PROTO_CMD_TRUNK_SYNC_BINLOG)/响应
B、向tracker通报变化:tracker_merge_servers->tracker_sync_diff_servers->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_REPLICA_CHG)
服务端处理:
storage_deal_task(STORAGE_PROTO_CMD_TRUNK_SYNC_BINLOG)->storage_server_trunk_sync_binlog->trunk_binlog_write_buffer->trunk_binlog_fsync 写入trunk_binlog_fd文件并fsync强制落盘
tracker变化处理:tracker_deal_storage_replica_chg->tracker_mem_sync_storages 只向Group中相应storage_id记录IP和状态变化
storage与client交互,client做客户端
1、PHP_METHOD(FastDFS, storage_upload_by_filename1)->storage_upload_by_filename1_ex(STORAGE_PROTO_CMD_UPLOAD_FILE)->storage_upload_by_filename_ex->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
1、storage进程main->storage_func_init->storage_func_init->tracker_get_my_server_id->tracker_get_storage_id->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_SERVER_ID)/fdfs_recv_response
2、storage进程main->storage_func_init->fdfs_get_storage_ids_from_tracker_group->fdfs_get_storage_ids_from_tracker_server->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_FETCH_STORAGE_IDS)/fdfs_recv_response
3、storage进程main->tracker_report_thread_start->tracker_report_thread_entrance->tracker_get_storage_max_status->tracker_get_storage_status->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)定时触发
storage进程main->storage_func_init->storage_check_and_make_data_dirs->storage_disk_recovery_restore->recovery_get_src_storage_server->tracker_get_storage_max_status->tracker_get_storage_status->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)初始化获取
tracker作服务端处理:
1、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_GET_SERVER_ID)->tracker_deal_get_storage_id->fdfs_get_storage_id_by_ip
2、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_FETCH_STORAGE_IDS)->tracker_deal_fetch_storage_ids
3、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)->tracker_deal_server_get_storage_status->
获取到的数据放入fast_task_info结构的data字段中,静荷数据前有TrackerHeader头,静荷数据依次拷贝,服务处理最后调用send_add_event完成发送
storage之间相互同步:
tracker_report_thread_start->tracker_report_thread_entrance->tracker_heart_beat->tracker_check_response->
A、storage相互间开始同步:trunk_sync_thread_start_all->trunk_sync_data->tcpsenddata_nb(STORAGE_PROTO_CMD_TRUNK_SYNC_BINLOG)/响应
B、向tracker通报变化:tracker_merge_servers->tracker_sync_diff_servers->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_REPLICA_CHG)
服务端处理:
storage_deal_task(STORAGE_PROTO_CMD_TRUNK_SYNC_BINLOG)->storage_server_trunk_sync_binlog->trunk_binlog_write_buffer->trunk_binlog_fsync 写入trunk_binlog_fd文件并fsync强制落盘
tracker变化处理:tracker_deal_storage_replica_chg->tracker_mem_sync_storages 只向Group中相应storage_id记录IP和状态变化
storage与client交互,client做客户端
1、PHP_METHOD(FastDFS, storage_upload_by_filename1)->storage_upload_by_filename1_ex(STORAGE_PROTO_CMD_UPLOAD_FILE)->storage_upload_by_filename_ex->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