Versions Compared

Key

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

...

(1) 从该虚拟存储组下的每个时间分区里依次使用合并任务调度器CompactionSchedule根据合并策略去选择一批批待合并文件,并为每批文件创建一个合并任务线程放进CompactionTaskManager里的线程等待队列里

(2) 从等待队列里获取一个合并线程并执行

合并的加锁流程

选择待合并的源文件,并设置setCompactionCandidate(true),将它们封装入一个合并任务里,并放入等待队列中。

  1. 从等待队列里拿出来,依次对每个源文件加读锁,并检查该源文件是否Valid,若isValidsetCompacting(true),否则释放所有源文件的读锁并setCompacting(false)
  2. 执行合并,并将临时目标文件移动成最终目标.tsfile文件,生成.resource文件,合并compactionMods文件,更新内存:
    • 更新 TsFileResourceManager,使用Sychronized移除源文件的 TsFileResource 并增加目标文件的 TsFileResource
    • 更新TsFileManagerTsFileResourceList
      • tsFileManager加读锁,移除源文件的tsfileResource释放读锁
      • tsFileResourceList加写锁,插入目标文件的tsFileResource释放写锁
  • 依次对每个源文件释放读锁加写锁,删除源文件和日志。
  • 对每个源文件释放写锁setCompacting(false)setCompactionCandidate(false).