THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
(2) 从等待队列里获取一个合并线程并执行
合并的加锁流程
- 选择待合并的源文件,并设置setCompactionCandidate(true),将它们封装入一个合并任务里,并放入等待队列中。
- 从等待队列里拿出来,依次对每个源文件加读锁,并检查该源文件是否Valid,若isValid则setCompacting(true),否则释放所有源文件的读锁并setCompacting(false)
- 执行合并,并将临时目标文件移动成最终目标.tsfile文件,生成.resource文件,合并compactionMods文件,更新内存:
- 更新 TsFileResourceManager,使用Sychronized移除源文件的 TsFileResource 并增加目标文件的 TsFileResource
- 更新TsFileManager的TsFileResourceList:
- 对tsFileManager加读锁,移除源文件的tsfileResource,释放读锁
- 对tsFileResourceList加写锁,插入目标文件的tsFileResource,释放写锁
- 依次对每个源文件释放读锁、加写锁,删除源文件和日志。
- 对每个源文件释放写锁、setCompacting(false)、setCompactionCandidate(false).