THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- if: currentTaskNum >= concurrent_compaction_thread: return;
- else:
- tsfileManagement.readLock(resourceList)
- 顺序文件链表=tsfileManagement.getSeqList(分区号)
- 乱序文件链表=tsfileManagement.getUnSeqList(分区号)
- 如果 compaction_priority=balance
- doCompactionInBalancePriority();
- 如果 compaction_priority=inner_cross
- doCompactionInInnerSpacePriority();
- 如果 compaction_priority=cross_inner
- doCompactionInCrossSpacePriority();
- 如果 compaction_priority=balance
- tsfileManagement.readUnLock(resourceList);
doCompactionInBalancePriority
- hasSelected = true
- while (hasSelected && currentTaskNum < concurrent_compaction_thread)
- hasSelected = selectInSpaceFiles(顺序文件链表,isSeq=true)
- hasSelected |= selectInSpaceFiles(乱序文件链表,isSeq=false)
- hasSelected |= crossSpaceCompaction();如果 compaction_priority=inner_cross
doCompactionInInnerSpacePriority
- selectInSpaceFiles(顺序文件链表,isSeq=true)
- selectInSpaceFiles(乱序文件链表,isSeq=false)
- crossSpaceCompaction();如果 compaction_priority=cross_inner
doCompactionInCrossSpacePriority
- crossSpaceCompaction();
- selectInSpaceFiles(顺序文件链表,isSeq=true)
- selectInSpaceFiles(乱序文件链表,isSeq=false)
- tsfileManagement.readUnLock(resourceList);
selectInSpaceFiles(双向文件链表, isSeq): 返回是否选中文件做合并
...
- hasSelected = false
- 如果 currentTaskNum >= concurrent_compaction_thread
|| !enable_cross_space_compaction- return hasSelected;
- 选择跨文件空间合并候选文件 F
- 将 F 提交异步任务(跨文件空间合并执行流程)
- ++currentTaskNum
- hasSelected = true如果 compaction_priority=balance, break;
selectCrossSpaceFiles(乱序文件 U)
- 候选文件 F = []
- hasSelected = false
- for 顺序文件 s in 顺序文件链表 S
- if isOverlap(U, s) && memoryCost(F, s) < memory_budget
- 将 s 添加进 F 中
- hasSelected = true
- if isOverlap(U, s) && memoryCost(F, s) < memory_budget
- 将 F 提交异步任务(跨文件空间合并执行流程)
- ++currentTaskNum
- hasSelected = true
- 如果 compaction_priority=balance, break;
- return hasSelected
合并执行任务
空间内合并执行流程
跨文件空间合并执行流程
...