...
方法 | 描述 |
---|---|
registerSealedTsFileResource | 语法:public synchronized void registerSealedTsFileResource(TsFileResource tsfileResource) 功能:将已封口的TsFileResoruce添加到sealedTsFileResources中,并在totalTimeIndexMemCost中添加内存占用,当totalTimeIndexMemCost ≥ TIME_INDEX_MEMORY_THRESHOLD时触发索引降级 |
releaseTimeIndexMemCost | 语法:public synchronized void releaseTimeIndexMemCost(long memCost) 功能:在totalTimeIndexMemCost上减去memCost |
chooseTimeIndexsToDegrade | 语法:private void chooseTimeIndexsToDegrade() 功能:挑选sealedTsFileResources中的TsFileResource进行降级,直至totalTimeIndexMemCost降至TIME_INDEX_MEMORY_THRESHOLD以下,若无法降至TIME_INDEX_MEMORY_THRESHOLD以下,则抛出异常 |
removeTsFileReource | 语法:public synchronized void removeTsFileResource(TsFileResource tsFileResource) 功能:从 sealedTsFileResources 中删除 TsFileResource,并在totalTimeIndexMemCost中减去内存占用 |
org.apache.iotdb.db.engine.storagegroup.TsFileResource
...
- 在TsFileResource的serialize方法的末尾调用TsFileResourceManager的registerSealedTsFileResource方法。
- 将TsFIleResource添加到sealedTsFileResources中,并对totalTsFileResourceMemCost进行判定:
- 当totalTimeIndexMemCost < TIME_INDEX_MEMORY_THRESHOLD时,直接返回。
- 当totalTimeIndexMemCost ≥ TIME_INDEX_MEMORY_THRESHOLD时,触发索引降级,调用chooseTimeIndexsToDegrade方法进行以下操作。
提交降级任务到degradeThreadPool中,异步调用TsFileResource的degradeTimeIndexTo方法。
循环4和5直至4中的条件不被满足,若不存在可降级的TimeIndex则抛出异常。
注册TimeIndex的时机
重启:在StorageGroupProcessor的recoverTsFiles方法中注册
不在zero level的TsFile
若writer已crashed,表示该文件是合并的目标文件且文件未写完,按合并流程注册
若writer未crashed,表示该文件完整,直接注册
在zero level的TsFile
若该文件不是最新的tsfile或文件已封口,则直接注册
反之,构造对应的TsFileProcessor,按正常写入流程注册
合并:在CompactionUtils的merge方法中注册target,取消注册sources