THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- 跨空间合并的文件选择
跨空间合并则是针对该虚拟存储组下该时间分区下的所有乱序文件与其有Overlap的顺序文件都封装在一个合并任务里。
具体判断是否有Overlap的方法是:
- 遍历每个乱序文件里的每个ChunkGroup,
- 遍历每个候选顺序文件,获取unseqStartTime, unseqEndTime, seqStartTime, seqEndTime
- 若unseqEndTime<seqStartTime && 该乱序文件没有一个overlapped顺序文件,则选中该顺序文件,后面没有overlap顺序文件.
- 若该顺序文件isNotClosed,则选中该顺序文件,因为不知道它是否有重叠
- 若unseqEndTime<=seqEndTime,则选中该顺序文件,后续没有overlap顺序文件
- 若unseqStartTime<=seqEndTime,则选中该顺序文件,后续可能还有overlap顺序文件
- 遍历每个候选顺序文件,获取unseqStartTime, unseqEndTime, seqStartTime, seqEndTime
- 遍历每个乱序文件里的每个ChunkGroup,
- 无论是空间内还是跨空间合并在选择文件的时候都没有读取对应的.mods文件判断数据是否被删除。
...
- 从虚拟存储组下该时间分区里的所有顺序和乱序文件中,选取“候选文件”:
- 候选顺序文件:过滤掉isNotExist、isDelete、isOverTTL的文件。
- 候选乱序文件:从第一个文件开始
- 若遇到isNotExist || isDelete || isOverTTL 的则跳过
- 若遇到 isCompacting || isCompactionCandidate || isNotClosed 则返回
- 否则添加到候选乱序文件中
- 在指定的时间内(30s)选取“源文件”,即从候选文件中选取与乱序文件有重叠的顺序文件:
- 遍历乱序文件,寻找与该乱序文件有重叠的所有顺序文件:(使用loose评估内存)
- 遍历该乱序文件里的每个ChunkGroup,
- 遍历每个候选顺序文件,获取unseqStartTime, unseqEndTime, seqStartTime, seqEndTime
- 若unseqEndTime<seqStartTime && 该乱序文件没有一个overlapped顺序文件,则选中该顺序文件,后面没有overlap顺序文件.
- 若该顺序文件isNotClosed,则选中该顺序文件,因为不知道它是否有重叠
- 若unseqEndTime<=seqEndTime,则选中该顺序文件,后续没有overlap顺序文件
- 若unseqStartTime<=seqEndTime,则选中该顺序文件,后续可能还有overlap顺序文件
- 遍历每个候选顺序文件,获取unseqStartTime, unseqEndTime, seqStartTime, seqEndTime
- 若顺序文件中不存在isCompacting、isCompactionCandidate的,则检查并用评估它们在合并中的内存开销是否超过阈值,若否,则将该批乱序和对应的顺序文件放入源文件中
- 若顺序文件中存在一个及以上isCompacting、isCompactionCandidate的,则丢弃该乱序和对应的顺序文件,并停止选取源文件。的,则丢弃该乱序和对应的顺序文件,并停止选取源文件(因为要求源乱序文件必须是连续的)。
- 遍历该乱序文件里的每个ChunkGroup,
- 若选取的乱序文件数量为0,则使用tight评估重新选取源文件
- 遍历乱序文件,寻找与该乱序文件有重叠的所有顺序文件:(使用loose评估内存)
- 若源顺序文件或者源乱序文件列表中有一个为0,则放弃此合并任务。否则对所有的源文件,则放弃此合并任务。否则,对所有的源文件set isCompactionCandidate为true,并把该任务丢进等待队列里。
- 从虚拟存储组下该时间分区里的所有顺序和乱序文件中,选取“候选文件”:
- 重要属性
- sequenceFileResources:顺序文件链表,存放着该虚拟存储组下的该时间分区下的所有顺序文件。
- unsequenceFileResources:乱序文件链表,存放着该虚拟存储组下的该时间分区下的所有乱序文件。
- taskFactory:任务工厂,负责为每批待合并的TsFile创建一个合并任务
- 重要方法
...