Versions Compared

Key

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

...

public void asyncClose() 


合并获取和释放锁的流程

合并对锁的获取主要分为两部分:

外部获取及修改TsFileResource列表:

都是针对于compactionMergeLock的锁

所有对TsFileResource的List的读操作(如查询时获得满足此次查询条件的所有TsFileResource)需要获得其读锁

所有对TsFileResource的List的写操作(比如写入时,创建新的TsFileResource)需要获得其写锁

即,对于每一个文件列表相关操作,其锁的获取和释放格式为

...

compactionMergeLock.readLock()/compactionMergeLock.writeLock();
// 对列表读取或更改操作
compactionMergeLock.readUnlock()/compactionMergeLock.writeUnlock();

...

合并完对文件列表和实际文件进行删除和新增:

1、获取compactionMergeLock的写锁

2、然后进行文件列表的旧文件删除和新文件的增加

3、compactionMergeLock的写锁

4、循环要删除的每一个TsFile文件,对于每一个TsFile文件进行如下操作:

  1、获取TsFileResource的tsFileLock写锁

  2、删除文件

  3、释放TsFileResource的tsFileLock写锁