fastdfs函数tracker_query_storage_update1分析
来源:互联网 发布:如何建立网络销售平台 编辑:程序博客网 时间:2024/06/04 18:33
粘贴第一个函数
tracker_query_storage_update1(pTrackerServer, &storageServer, file_id);
函数解析:函数名:tracker_query_storage_update1,参数:in(pTrackerServer),in(file_id) ,out(storageServer)。
函数意义:传入:pTrackerServer,和file_id,返回storageServer
粘贴第二个函数
int tracker_query_storage_update1(ConnectionInfo *pTrackerServer,ConnectionInfo *pStorageServer,const char *file_id){ `FDFS_SPLIT_GROUP_NAME_AND_FILENAME`(file_id) return tracker_query_storage_update(pTrackerServer, pStorageServer, group_name, filename);}
函数意义:将函数tracker_query_storage_update1传进来的file_id进行剥离。
剥离函数:
#define FDFS_SPLIT_GROUP_NAME_AND_FILENAME(file_id) \ char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128]; \ char *group_name; \ char *filename; \ char *pSeperator; \ \ snprintf(new_file_id, sizeof(new_file_id), "%s", file_id); \ pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR); \ if (pSeperator == NULL) \ { \ return EINVAL; \ } \ \ *pSeperator = '\0'; \ group_name = new_file_id; \ filename = pSeperator + 1; \
将file_id剥离出:group_name,例如:group1
剥离出:filename,例如:/M00/00/01/wKgBIFVjCM*.jpg
粘贴函数
#define tracker_query_storage_update(pTrackerServer, pStorageServer, group_name, filename) tracker_do_query_storage(pTrackerServer, pStorageServer, RACKER_PROTO_CMD_SERVICE_QUERY_UPDATE,group_name, filename)
函数解析:
/**
* query storage server to update (delete file or set meta data)
* params:
* pTrackerServer: tracker server
* pStorageServer: return storage server
* group_name: the group name of storage server
* ilename: filename on storage server
* return: 0 success, !=0 fail, return the error code
**/
int tracker_do_query_storage(ConnectionInfo *pTrackerServer, ConnectionInfo *pStorageServer, const byte cmd, const char *group_name, const char *filename){ TrackerHeader *pHeader;//定义头部结构体 ConnectionInfo *conn; bool new_connection;//是否为新的连接 char out_buff[sizeof(TrackerHeader) + FDFS_GROUP_NAME_MAX_LEN + 128]; char in_buff[sizeof(TrackerHeader) + TRACKER_QUERY_STORAGE_FETCH_BODY_LEN]; char *pInBuff; int64_t in_bytes; int result; int filename_len; CHECK_CONNECTION(pTrackerServer, conn, result, new_connection);//检查连接是否正常,不正常,建立新连接 memset(pStorageServer, 0, sizeof(ConnectionInfo)); pStorageServer->sock = -1; memset(out_buff, 0, sizeof(out_buff)); pHeader = (TrackerHeader *)out_buff; snprintf(out_buff + sizeof(TrackerHeader), sizeof(out_buff) - sizeof(TrackerHeader), "%s", group_name); filename_len = snprintf(out_buff + sizeof(TrackerHeader) + FDFS_GROUP_NAME_MAX_LEN,sizeof(out_buff) - sizeof(TrackerHeader) - FDFS_GROUP_NAME_MAX_LEN, "%s", filename);//拷贝filename 到out_buff,返回拷贝的字节数。//以下是构建头部数据[long2buff](http://blog.csdn.net/akakakak250/article/details/45672019) long2buff(FDFS_GROUP_NAME_MAX_LEN + filename_len, pHeader->pkg_len); pHeader->cmd = cmd; if ((result=tcpsenddata_nb(conn->sock, out_buff, \ sizeof(TrackerHeader) + FDFS_GROUP_NAME_MAX_LEN + filename_len, g_fdfs_network_timeout)) != 0)//成功返回0 { logError("file: "__FILE__", line: %d, " \ "send data to tracker server %s:%d fail, " "errno: %d, error info: %s", __LINE__, \ pTrackerServer->ip_addr, \ pTrackerServer->port, \ result, STRERROR(result)); } else { pInBuff = in_buff; result = fdfs_recv_response(conn, \ &pInBuff, sizeof(in_buff), &in_bytes); }//in_byte,返回字节数。fdfs_recv_response,里面有两个函数,一个是获取头,和数据 if (new_connection) { tracker_disconnect_server_ex(conn, result != 0); } if (result != 0) { return result; } if (in_bytes != TRACKER_QUERY_STORAGE_FETCH_BODY_LEN)//in_bytes是固定大小 { logError("file: "__FILE__", line: %d, " \ "tracker server %s:%d response data " \ "length: %"PRId64" is invalid, " \ "expect length: %d", __LINE__, \ pTrackerServer->ip_addr, \ pTrackerServer->port, in_bytes, \ TRACKER_QUERY_STORAGE_FETCH_BODY_LEN); return EINVAL; } memcpy(pStorageServer->ip_addr, in_buff + \ FDFS_GROUP_NAME_MAX_LEN, IP_ADDRESS_SIZE-1);//获取storage的ip pStorageServer->port = (int)buff2long(in_buff + \ FDFS_GROUP_NAME_MAX_LEN + IP_ADDRESS_SIZE - 1);//获取storage的port return 0;}
整体解释:根据传入pTrackerServer, file_id,查询storageServer, 返回ip,port。
刚接触fastdfs不是很熟,有不对的地方提出,共同进步
0 0
- fastdfs函数tracker_query_storage_update1分析
- FastDFS storage 分析 (version:3.11)
- FastDFS FastTracker 分析(version:3.11)
- FastDFS合并存储原理分析
- FastDFS合并存储原理分析
- FastDFS 分布式系统需求分析
- fastDFS网上大体流程分析
- FastDFS 分布式系统需求分析
- FastDFS源码分析之tracker协议分析
- FastDFS源码分析之tracker协议分析
- fastdfs
- fastdfs
- FastDFS
- FastDFS
- fastdfs
- FastDFS
- fastdfs
- FastDFS
- phread_con_wait和pthread_mutex_lock实现的生产者消费者模型
- 熊辉:我是如何收获了数据挖掘的人生?
- seajs入门2
- C#第四次作业:MYSQL数据库及C#操作MYSQL数据库——Winform程序
- 【iOS解决方案】获取NSString某一个字符串多次出现的位置
- fastdfs函数tracker_query_storage_update1分析
- Java基础(极客)——09、Java面向对象中类与对象的概念和使用
- 初始化游戏状态数据(1)
- easyUI中select下拉框添加option选项
- Android 使用AES/CBC/PKCS7Padding 加解密字符串
- 第十二周 阅读程序(2)
- 初始化游戏状态数据(2)
- 利用WMI代替psexec——WMIEXEC.vbs [安全脉搏更新]
- HTML容器内文字自动折行