THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
目的:将没有与任何顺序文件发生重叠的乱序文件填充到顺序空间中
碎文件清理任务提交
碎文件清理任务使用独立的线程池(不与空间内以及跨文件空间合并使用同一个线程池),在后台开启一个独立的线程进行定时提交。
碎文件清理任务选择流程
- 从新到老遍历顺序文件列表 for s in seqFiles
- s 正在合并:
- continue
- if s 是第一个文件
- 按照文件版本从老到新遍历乱序文件 for u in unseqFiles:
- if u.startTime() > s.endTime()
- if u 未关闭 || u 正在合并
- if UF.size() > 0
- 提交一个碎文件清理任务,UF=[]
- break
- if UF.size() > 0
- UF.add(u)
- if u 未关闭 || u 正在合并
- if u.startTime() > s.endTime()
- if UF.size() > 0
- 提交一个碎片清理任务,UF = []
- 按照文件版本从老到新遍历乱序文件 for u in unseqFiles:
- if s 是最后一个文件
- 按照文件版本从老到新遍历乱序文件 for u in unseqFiles:
- if u.endTime() < s.startTime()
- if u 未关闭 || u 正在合并
- if UF.size() > 0
- 提交一个碎文件清理任务,UF=[]
- break
- if UF.size() > 0
- UF.add(u)
- if u 未关闭 || u 正在合并
- if u.endTime() < s.startTime()
- if UF.size() > 0
- 提交一个碎片清理任务,UF = []
- break
- 按照文件版本从老到新遍历乱序文件 for u in unseqFiles:
- 找到 s 的下一个文件 nextS
- UF = []
- 按照文件版本从老到新遍历乱序文件 for u in unseqFiles:
- if u.startTime >= nextS.endTime && u.endTime < s.startTime
- if u 未关闭 || u 正在合并
- if UF.size() > 0
- 提交一个碎文件清理任务,UF=[]
- break
- if UF.size() > 0
- UF.add(u)
- if u 未关闭 || u 正在合并
- if u.startTime >= nextS.endTime && u.endTime < s.startTime
- 如果 UF.size() > 0
- 提交一个碎文件清理任务,UF=[]
- s 正在合并:
碎文件清理任务执行
输入:顺序文件 firstSeqFile, secondSeqFile,乱序文件列表 unseqFileList
要求:
- (firstSeqFile == null && secondSeqFile != null) || (firstSeqFile != null && secondSeqFile == null ) || (firstSeqFile != null && secondSeqFile != null)
- unseqFileList 中的文件版本号依次底层,且全局的乱序文件列表中不存在与 unseqFileList 中的文件重叠且版本号更小的文件。