...
使用TsFile接口查询合并后文件的数据点的时间、值(数据类型),顺序扫描文件检查数据点的值,Chunk 内 Page 个数、文件内的 Chunk 个数、Chunk 是否满足大小限制、统计信息、目标 TsFileResource 的内容
测试工具
数据正确性测试工具
输入合并前所有时间序列及其对应的数据点和合并后文件
使用TsFileSequenceReader从后往前读取合并后文件,并与合并前数据进行一一对比,保证完全一致
使用TsFileSequenceReader从前往后读取合并后文件,并与合并前数据进行一一对比,保证完全一致
检查TsFileResource统计信息和原数据点是否一一对应,包括startTime,endTime
Chunk和Page个数及大小检查工具
输入目标Chunk和Page大小(格式为List<List<Long>>)和合并后文件
使用TsFileSequenceReader从前往后读取合并后文件,并与合并前数据进行一一对比,保证Chunk和Page的顺序和大小都一一对应
文件生成工具
输入时间序列(Map<String, MeasurementSchema> deviceMeasurementSchemaMap),目标Chunk和Page大小(格式为List<List<Long>>),开始时间
生成一个新文件,对于每一个实现序列,从开始时间开始往文件中插入点,使得最后这个文件每个序列都满足目标Chunk和Page大小
返回新文件TsFileResource
mods生成工具
输入List<Modification>,对应文件
对相应文件根据List<Modification>生成mods文件
返回文件所有的数据点
文件情况工具
清空测试目录下所有生成和合并成的文件
执行
合并执行:跨空间(没有解Page和解Chunk)、顺序空间、乱序空间是否解Page:是、否
是否解 Page:是、否
是否解 Chunk:是、否
空间内合并的文件个数:2、3
...
1 顺序, 6 乱序 覆盖6种关系
6顺序,1 乱序 覆盖6种关系
调度
多少个文件进行schedule?
主要测scheduleCompaction()方法
...
compaction_concurrent_thread=50(合并执行任务的并行度)
集成测试
测和各模块的交互
compaction_interval测试
insert
flush
delete
deleteFolder
syncDeleteDataFiles
removePartitions
deleteTsFile
checkTTL
upgrade
sync
load
move
removeFullyOverlapFiles(分布式Snapshot)
query
测试场景配置
顺序文件空间内合并为核心的测试
序号 | 场景设置(仅列出需要修改的配置) | 场景描述 | 目标状态 |
1 | concurrent_compaction_thread=0 插入两个文件 手动merge | concurrent_compaction_thread=0即系统不允许合并,写入文件以检查此时系统是否合并
| 系统中仍存在两个文件 |
2 | enable_unseq_space_compaction=false enable_cross_space_compaction=false concurrent_compaction_thread=1 插入两个顺序文件 手动merge | concurrent_compaction_thread=1即系统每次只允许一次合并,关闭文件空间内乱序合并和跨文件空间合并,写入顺序文件以检查此时系统是否合并 | 系统中仅存在一个文件 |
3 | enable_unseq_space_compaction=false enable_cross_space_compaction=false concurrent_compaction_thread=1 target_compaction_file_size=1000 compaction_interval=100000 插入五个顺序文件(大小分别为f1:100,f2:200,f3:800,f4:100,f5:2000)这里为bytes 手动merge | concurrent_compaction_thread=1即系统每次只允许一次合并,关闭文件空间内乱序合并和跨文件空间合并,设置目标文件大小为1000,理论上此时一次合并应该只合并f2,f3,f4三个文件,因此合并完最后剩下f1,f2',f5 | 系统中仅存在三个文件,且f1和f5没有变化,f2‘查出来的数据=f2+f3+f4 |
4 | enable_unseq_space_compaction=false enable_cross_space_compaction=false concurrent_compaction_thread=2 target_compaction_file_size=1000 compaction_interval=100000 插入六个顺序文件(大小分别为f1:100,f2:200,f3:200,f4:800,f5:150,f6:2000)这里为bytes 手动merge | concurrent_compaction_thread=2即系统每次允许两次合并,关闭文件空间内乱序合并和跨文件空间合并,设置目标文件大小为1000,理论上此时两次合并应该同时合并f1,f2两个文件和f3,f4,f5三个文件,因此合并完最后剩下f1',f2',f6 | 系统中仅存在三个文件,且f6没有变化,f1‘查出来的数据=f1+f2,f3‘查出来的数据=f3+f4+f5 |
5 | enable_unseq_space_compaction=false enable_cross_space_compaction=false concurrent_compaction_thread=2 target_compaction_file_size=1000 compaction_interval=100000 merge_chunk_point_number=150 插入六个顺序文件(大小分别为f1:100,f2:200,f3:200,f4:800,f5:150,f6:2000)这里为点数(point num) 手动merge | 文件个数同上,且合并后的chunk大小与合并前一致。 | 系统中仅存在三个文件,且f6没有变化,point_num(f1'-chunk1)=point_num(f1)+point_num(f2),point_num(f3'-chunk1)=point_num(f3),point_num(f3'-chunk2)=point_num(f4),point_num(f3'-chunk3)=point_num(f5) |
6 | enable_unseq_space_compaction=false enable_cross_space_compaction=false concurrent_compaction_thread=1 target_compaction_file_size=10 compaction_interval=100000 merge_chunk_point_number=150 merge_page_point_number=2 插入六个顺序文件(大小分别为f1:200,f2:150,f3:3,f4:2,f5:5,f6:1,f7:3)这里为点数(point num) 手动merge 检查中间状态t1 target_compaction_file_size=200 手动merge 检查中间状态t2 target_compaction_file_size=1000 手动merge 检查最终状态t3 | 先进行解page合并,再进不解page合并,再进行不解chunk合并 | t1:{ f1:200, f2:150, f3:3, f4':11(解page) } t2:{ f1:200, f2':164(不解page) } t3:{ f1':200+164(不解chunk) } |
7 | enable_unseq_space_compaction=false enable_cross_space_compaction=false concurrent_compaction_thread=2 target_compaction_file_size=1000 compaction_interval=100000 merge_chunk_point_number=150 插入六个顺序文件(大小分别为f1:100,f2:200,f3:200,f4:800,f5:150,f6:2000)这里为点数(point num) 删除f3的后一半数据, f6的所有数据 手动merge | 带删除的顺序数据合并,同时这里有一个注意点,在其中一个待合并文件有mods文件时,不管其他数据有多大,都进行解page合并 | 系统中仅存在三个文件,且f6没有变化,point_num(f1'-chunk1)=point_num(f1)+point_num(f2),size(f3'-chunk1)=point_num(f3)/2+point_num(f4)+point_num(f5),查询所有数据,等于删除f3的后一半数据, f6的所有数据的结果 |
8 | enable_unseq_space_compaction=false enable_cross_space_compaction=false concurrent_compaction_thread=1 target_compaction_file_size=300 compaction_interval=100000 compaction_interval=1 插入九个大小(point num)为100的顺序文件 等待10s | 测试定时合并任务提交间隔(连续合并)是否生效,这里暂时没法预估最终会收缩为多少个文件(压缩率无法预估) | 最终文件数应该小于等于3 |
...