Hypertable源码解读之Hypertable.lib目录
来源:互联网 发布:七天网络查分登录注册 编辑:程序博客网 时间:2024/04/29 20:35
Hypertable源码解读之Hypertable.lib目录
应用程序对象能包含一个继承自该类的成员对象,用于持久化应用程序的专题。应用程序对象也能直接继承该类,这样应用程序对象就可以直接将自己传入到metalog的API了。
2.Class Metalog::Definition定义一个服务器上一组有效的metalog entity。Hypertable中的metalog框架能持久化服务器的状态变化。继承自该类的子类定义了一个特定服务器上一组有效的metalog entity。它由名称和create方法构成,名称例如:mml或rsml,metalog框架从被持久化的metalog文件中串行的获取数据,并使用create方法构造得到entity。
3.class RangeSpec标识一个range,主要标识了range的start row、end row和类型(ROOT、METADATA、SYSTEM、USER、UNKNOWN)。
4.class CommitLogFileInfo表示一个commit log文件,可能是一个fragment,也可能是一个transfer log文件。主要成员变量如下:log_dir:日志路径,与CommitLogBase类的成员变量m_log_dir一般表示同样含义;成parent:一般用于transfer log的场景,即对象本身为一个transfer log文件,其parent为一个fragment文件;references:引用数,当对象为其它commit log文件的parent时,该值加1。如果一个commit log文件被清理后,其parent的引用数减1;purge_dirs:该对象链接的commit log的路径,可在清理该对象时也对这些路径进行清理。
5.class CommitLogBasecommit log基类,包含了commit log的基本信息,表示主要信息的成员变量如下:m_log_dir:日志路径,例如:/hypertable/tables/2/6/_xfer/PQM6R7RwsZuLfZrl/1394814644 或者/hypertable/servers/rs29/log/user;m_log_name:commit log全名,例如:/hypertable/servers/rs29/log/user/2344;m_fragment_queue:顺序编号的commit log文件的集合,即CommitLogFileInfo对象指针集合;m_last_revision:commit log中cell的最新revision;m_range_reference_required:如果fragment是transfer log的一部分,而后者正被range引用,如果该变量为true,将在commit log清理时只删除fragment,否则transfer log也将被删除。此变量默认为true,可通过配置项Hypertable.RangeServer.CommitLog.FragmentRemoval.RangeReferenceRequired改变此值。
6.class CommitLogReader : public CommitLogBase读取指定commit log目录下的所有fragment文件,为每个文件创建一个CommitLogFileInfo对象,并将指针对象加入m_fragment_queue。注意:每个文件对象的parent都强制为空。
7.class CommitLog : public CommitLogBasecommit log就是持久化的range的更新数据。它是一个目录,包含了一组按序号递增的文件,每个文件包含了一组被提交的数据块,并且压缩后存储。文件名称从0开始,将会周期性的回滚,即当一个trailer写入到文件结尾时,旧的文件将关闭,新的文件名称将会在旧文件名称上加1,然后被打开。commit log过时的内容会被周期性的清理。每个commit log文件的大小由属性Hypertable.RangeServer.CommitLog.RollLimit决定。成员变量m_reap_set表示引用数不为0的fragment或者transfer log文件集合,该集合内的文件将会下轮清理时被考虑。该对象构造时,需要指定一个基类类型的指针init_log。如果此指针为空,表示commit log的fragment从0开始,即全新的开端。否则将延续init_log中的fragment编号,并将init_log中的fragment加入当前的m_fragment_queue,然后清除init_log中的m_fragment_queue。构造函数最终会创建并打开一个最新的fragment文件,以接收之后的commit log写入。7.1.成员函数7.1.1.roll声明:int roll(CommitLogFileInfo **clfip);功能:终结当前fragment的写入,并创建和打开下一个fragment对象.创建一个CommitLogFIleInfo对象记录当前fragment的信息,并将其加入到m_fragment_queue中。置标记m_needs_roll为false.参数:clfip输出参数,记录当前fragment信息的对象指针。返回值:如果成功返回Error::OK,否则返回其余错误代码。7.1.2.link_log声明:int CommitLog::link_log(CommitLogBase *log_base);功能:将transfer log链接到fragment。transfer log的基本信息将被编码到一个数据块,然后写入到当前的fragment,再终结当前fragment,即当前的fragment就是transfer log的parent。遍历transfer log的m_fragment_queue,将每个元素加入当前的m_fragment_queue中。如果元素的parent为空,则置其parent为当前fragment,并且fragment的引用数(references)加1.然后清除transfer log的m_fragment_queue,并对当前m_fragment_queue排序。参数:log_base 需要被链接的transfer log。7.1.3.purge声明:int purge(int64_t revision, StringSet &remove_ok_logs, StringSet &removed_logs, String *trace);功能:清理commit log,移除所有的revision小于给定值的fragment文件。Commit log文件被移除必须满足三个条件:1)文件的revision小于参数中指定的revision;;2)文件的引用数为0;3)m_range_reference_required 为false或者文件的log_dir被包含在可被安全移除的路径集合以内。将对m_reap_set和m_fragment_queue进行遍历,判断每个元素能否被清除。后者如果发现一个不能被清除的元素,后续元素将不再进行操作。参数:revision: 给定的revision;remove_ok_logs:能被安全移除的一组log路径; removed_logs:输出参数,本次调用中产生的能被删除的log路径。7.1.4.load_cumulative_sizse_map声明:void load_cumulative_size_map(CumulativeSizeMap&cumulative_size_map);功能:CumulativeSizeMap的key是一个commit log的fragment中的最大的revision,value是一个CumulaltiveFragmentData对象。该对象表示fragment的基本信息和累积信息,共有四个字段:size表示一个fragment的大小;fragno表示fragment编号;cumulative_size表示多个fragment的累积大小;distance表示该元素在map中的反序的次序。即在一个CumulativeSizeMap中,key越小的元素,其value的distance和cumulative_size越大。1)将当前最新的fragment添加到cumulative_size_map,key为m_lastest_revision,value中只记录fragment的size和no;2)反序遍历m_fragment_queue,将其中的每个fragment添加到cumulative_size_map,key为fragment的revision,value中只记录fragment的size和no;3)反序遍历cumulative_size_map,对每个元素的value的distance从0开始顺序编号,累加每个元素的value的size,并将累积结果赋予当前元素的value的cumulative_size成员。参数:cumulative_size_map: 统计的得到的fragment信息。- Hypertable源码解读之Hypertable.lib目录
- Hypertable源码解读之Hypertable.lib目录
- Hypertable源码解读之Hypertable.RangeServer目录
- Hypertable源码解读之AsyncComm目录
- Hypertable源码解读之RangeServer启动过程
- Hypertable源码解读之数据写入客户端逻辑
- Hypertable
- Hypertable
- Hypertable工具之ht_rsclient
- Hypertable工具之Hyperspace
- Hypertable工具之dumplog
- Hypertable工具之metalog_dump
- Hypertable工具之csdump
- Hypertable工具之serverup
- hypertable原理
- hypertable安装
- Hypertable简介
- Hypertable - 概述
- Android 6.0 运行时权限处理完全解析
- linux基础知识
- Spring + Spring MVC + MyBatis 整合
- maven打包时,同时打包源码 Build a source-JAR from the current project.
- 4、棋盘覆盖
- Hypertable源码解读之Hypertable.lib目录
- 小数据:理论和架构
- 第一次写博客,先练练手吧
- 使用Python学习selenium测试工具-1:Selenium的前生今世
- linux ssd 黑名单
- XZ_iOS之block封装代码块
- Integer.numberOfLeadingZeros(int i)
- 差分近似图像导数算子之Sobel算子
- Oracle SQL性能优化