Versions Compared

Key

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

...

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

合并的加锁流程

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