Versions Compared

Key

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

...

  • 将文件根据重叠情况整理成簇List<List<TsFileResource>> unseqFileClusters
  • for fileCluster in unseqFileCluster
    • if fileCluster.size() == 1
      • if fileCluster 中仅有的这个文件大小 > cross_space_fragment_file_target_size && 没有未关闭的临时文件 
        • 将该文件进行重命名后移动到顺序文件空间中
      • else
        • 将该文件的内容解压缩写到一个临时的文件中(如果有未关闭的临时文件,则写到未关闭的文件中)
        • 判断临时文件的大小,如果够大就将其封口然后重命名并且移动到顺序文件列表中
      • continue
    • else
      • 将 fileCluster 中的 unseqFile 合并到一个临时文件中(执行流程就是乱序空间内文件合并的流程)(如果有未关闭的临时文件,则放到未关闭的临时文件中;否则新建一个临时文件),然后将该临时文件经过重命名后移动到顺序文件列表中


将乱序文件整理成簇

输入:乱序文件列表 unseqFileList

输出:List<List<TsFileResource>> 文件簇列表,每个文件簇中的文件必然至少与同一簇中的一个文件发生了重叠

  • 将乱序文件根据 startTime 进行排序得到 unseqFileListOrderByTime

  • fileCluster = []
  • tmpCluster = []
  • for unseqFile in  unseqFileListOrderByTime
    • if tmpCluster.size() == 0
      • tmpCluster.add(unseqFile)
      • tmpClusterEndTime = unseqFile.endTime, tmpClusterStartTime=unseqFile.startTime
    • else
      • 如果 tmpCluster 和 unseqFile 发生了重叠(和文件重叠的判断相同)
        • tmpCluster.add(unseqFile)
        • tmpClusterEndTime = max(tmpClusterEndTime, unseqFile.endTime)
        • tmpClusterStartTime = max(tmpClusterStartTime, unseqFile.startTime)
      • else
        • fileCluster.add(tmpCluster)
        • tmpCluster=[]
        • tmpCluster.add(unseqFile)
        • tmpClusterEndTime = unseqFile.endTime, tmpClusterStartTime=unseqFile.startTime


重命名规则

输入:一个要移动到顺序文件列表中的乱序文件或者临时文件 file

...