THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- 重要属性
- sequenceFileResources:顺序文件链表,存放着该虚拟存储组下的该时间分区下的所有顺序文件。
- unsequenceFileResources:乱序文件链表,存放着该虚拟存储组下的该时间分区下的所有乱序文件。
- taskFactory:任务工厂,负责为每批待合并的TsFile创建一个合并任务
...
- 主要流程
- 从虚拟存储组下该时间分区里的所有顺序和乱序文件中,选取“候选文件”:
- 候选顺序文件:过滤掉isNotExist、isDelete、isOverTTL的文件。
- 候选乱序文件:从第一个文件开始
- 若遇到isNotExist || isDelete || isOverTTL 的则跳过
- 若遇到 isCompacting || isCompactionCandidate || isNotClosed 则返回
- 否则添加到候选乱序文件中
- 在指定的时间内(30s)选取“源文件”,即从候选文件中选取与乱序文件有重叠的顺序文件:
- 遍历乱序文件,寻找与该乱序文件有重叠的所有顺序文件:(使用loose评估内存)
- 若顺序文件中不存在isCompacting、isCompactionCandidate的,则检查并用评估它们在合并中的内存开销是否超过阈值,若否,则将该批乱序和对应的顺序文件放入源文件中
- 若顺序文件中存在一个及以上isCompacting、isCompactionCandidate的,则丢弃该乱序和对应的顺序文件,并停止选取源文件。
- 若选取的乱序文件数量为0,则使用tight评估重新选取源文件
- 遍历乱序文件,寻找与该乱序文件有重叠的所有顺序文件:(使用loose评估内存)
- 若源顺序文件或者源乱序文件列表中有一个为0,则放弃此合并任务。否则对所有的源文件set isCompactionCandidate为true,并把该任务丢进等待队列里。
RewriteCrossSpaceCompactionSelector选择器
- 重要方法
1)selectAndSubmit():返回是否找到文件并提交合并任务
...
文件选择器ICrossSpaceMergeFileSelector
...
RewriteCompactionFileSelector
下面详细介绍选择待合并文件的方法:
- select()方法:返回的数组里第一个元素是待合并的顺序文件列表,第二个元素是待合并的乱序文件列表
...
具体流程:将与该unseqFile乱序文件有Overlap的并且还未被此次合并任务文件选择器选中的顺序文件的索引放入tmpSelectedSeqFiles列表里。具体判断是否有Overlap的做法是:依次遍历获取乱序文件的每个设备ChunkGroup,判断所有还未被此次合并任务选中的顺序文件的该设备ChunkGroup是否有与乱序的ChunkGroup重叠,有的话则选中此顺序文件。
...
合并任务的恢复
在IOTDB-Server重启后,每个StorageGroup会执行顺序空间和乱序空间内的合并恢复和跨空间的合并恢复。
...