Versions Compared

Key

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

...

该类负责管理合并任务的运行,例如把合并任务加入到等待队列里,并定时从等待队列里拿取高优先级的线程进行执行。

 

  1. 重要属性
    1. compactionTaskQueuecandidateCompactionTaskQueue:合并线程的等待队列,可容纳的任务数量为1000个,若满了则会踢掉低优先级的线程
    2. 两个线程池
      1. taskExecutionPool:合并任务的执行线程池,系统预设的线程数量为10
      2. compactionTaskSubmissionThreadPool:定时执行线程池,该池里的线程负责定时从等待队列里拿取一个合并任务进行执行。系统预设的线程数量为1个。
    3. runningCompactionTaskList:正在执行合并的任务列表
    4. currentTaskNum:当前正在执行合并任务的线程数量
    5. Task_Submit_Interval:每个合并线程执行的时间间隔,系统预设值为1
  2. 合并任务的优先级

           candidateCompactionTaskQueue队列里,任务是根据自定义的优先级进行排序的,优先级高的任务会被优先执行。当该队列满时,若添加新的合并任务,则会把优先级最低的给踢掉。下面讲解合并任务的优先级定义规则,在CompactionTaskComparator类里:

    1. 若两个任务一个是空间内合并,另一个是跨空间合并,且系统预设的合并优先级不是balance
      1. 若系统预设的合并执行优先级是inner_cross,则空间内合并的任务的优先级较高
      2. 若系统预设的合并执行优先级是cross_inner,则跨空间合并的任务的优先级较高
    2. 若两个任务都是空间内合并
      1. 若两个任务一个是顺序空间内合并,另一个是乱序空间内合并,则顺序空间内合并的任务的优先级较高
      2. 若两个任务的平均每个待合并文件的空间内合并次数不相等,则平均每个文件空间内合并次数低的任务的优先级较高

      3. 若两个任务的选中待合并文件的数量不同,则文件数量多的任务的优先级较高

      4. 若两个任务的待合并文件的总大小不同,则待合并文件总大小较小的任务的优先级较高

      5. 若两个任务的待合并文件的最大version不同,则较大version的任务的优先级高

    3. 若两个任务都是跨空间合并
      1. 若两个任务的待合并的顺序文件的数量不一样,则顺序文件数量较少的任务的优先级高

      2. 乱序文件数量较多的任务的优先级较高


合并任务调度器CompactionSchedule

...