TFS 客户端源码分析(c++)
来源:互联网 发布:单片机波形发生器程序 编辑:程序博客网 时间:2024/06/05 23:46
TFS中客户端RcClient类作为用户交互类。(clientv2)
一、initialize方法,提供初始化客户端,向rc申请app_id等一系列信息
1、开启Transport,接受读写事件。创建connectionManager对象,并设置NewClientManager类为客户端请求回复包回调接口。初始化成功。
2、调用login方法。根据app_key,app_ip(本地ip)向rc获取session_id(session_id可以解析出app_id),base_info(包含了集群的信息,以及集群中的ns_vip等等)。然后循环获取集群信息中的ns_vip,并将ns_vip设置到write_ns_[3]与read_ns_[3]中,用于读写。登陆rc server并获取信息完成。
3、为支持自定义文件名特性,根据设置进来的rs_addr,向rs(rootserver)获取KvMetaTable。
二、save_buf方法,提供写数据接口
1、从initialize中设置的write_ns_[3]中获取ns_addr。
2、调用TfsClientImpV2::save_buf_ex方法。内部分为open,write,close三个阶段。
open方法:
3、以写方式调用open时,第一个参数file_name置NULL。获取全局递增的fd。根据ns_addr从session_pool中获取TfsSession。向nameserver获取clustConfig,ds_table等信息设置到TfsSession中。
4、新建TfsFile对象,调用open函数,从ds_table[]中随即获取一个server设置到TfsFile中。将fd与TfsFile的映射加入map中。
write方法:
5、根据open时获取的fd,从map中找到TfsFile对象并调用write函数。发送写请求包,并从回复包中获取lease_id,block_id,file_id更新到TfsFile中。如果写入成功,则计算crc校验码保存。
close方法:
6、调用TfsClose的close方法。内部发送关闭请求,并返回回复包状态。返回成功则更新stat_mgr中的状态。更新ds_table[]。
以上就是完整的写流程
三、读文件
read方法:
1、读文件时,需要找到blockid->ds_[]的对应关系,以便读取数据。在以读打开文件时,会从TfsSession中缓存的block->ds_[]中查找,找不到则从ns获取并把它插入TfsSession的缓存中。
2、read时获取该file对应的vector_ds_,如从一个ds读取失败则从下一个继续尝试读取。
3、发送读文件请求包,每次读取1M数据,获取回复包中的buf及长度。由于可能存在block被迁移到其他dataserver上,而open时的映射关系可能已过时。这样读取时就会返回NO_LOGICBLOCK错误,这时需要移除缓存中的映射记录。
4、如果读取失败且命中缓存记录,说明缓存中的记录已过时,需要重新读取数据。清除file中的ds_[],重新从ns获取ds_[]信息并插入缓存中,再次读取。
至此,读文件解析完毕。
- TFS 客户端源码分析(c++)
- TFS 使用文档 - 客户端测试(c++/c)
- TFS源码(基于1.3.1)分析--存储流程
- VS TFS源码分析软件PATFS使用方法
- (C#)OPC客户端源码
- Redis源码分析(三十二)--- redis-cli.c客户端命令行接口的实现(1)
- Redis源码分析(三十三)--- redis-cli.c客户端命令行接口的实现(2)
- elasticsearch源码分析之客户端(三)
- elasticsearch源码分析之客户端(三)
- BT客户端源码分析
- BT客户端源码分析
- Zookeeper客户端源码分析
- 使用VS TFS源码分析软件PATFS创建异常规则
- VS TFS源码分析软件PATFS基本安装注意事项
- VS TFS源码分析软件PATFS的安装Endpoint方法
- 使用VS TFS源码分析软件PATFS实现最佳配置
- VS TFS源码分析软件PATFS子控件详解
- 【转】(C#)OPC客户端源码
- java的个人经验
- Android ANR原因以及开发时如何预防
- Quartz 线程池
- GCD挂起恢复
- zoj 3612 Median (SBT)
- TFS 客户端源码分析(c++)
- linux系统中Mysql彻底卸载、安装、远程登录设置
- java
- Maven学习 (四) 使用Nexus搭建Maven私服
- 人有疑问可以google、百度,那机器人有问题是否也可以呢?—云机器人是一堆机器人嘛?
- leetcode总结无止境系列之链表
- 笔记05 嵌套循环和递归调用
- Windows CE 设备应用程序里动态引用webservice
- 杭电1176 免费馅饼(数塔dp)