Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

使用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

...