开始
flushQueue中
是否还有DWPT?
取出一个DWPT
是
synchronized开始
将DWPT中收集的索引信息
生成一个段newSegment
添加删除文件事件到eventQueue
是否生成复合文件?
是
是否发生堆积?
否
添加`强制发布生成的段`的事件到eventQueue中
是
执行完doFLush后的工作
否
尝试发布生成的段
否
是否处理删除信息?
添加处理删除信息事件到eventQueue
结束
是
否
synchronized结束
主动flush
flushQueue中
是否还有DWPT
或者
DWPTP中是否还有被置为flushPending的
ThreadState?
开始
自动flush
是否新增删除信息?
删除信息添加到
全局BufferedUpdates
全局BufferedUpdates
是否有删除信息?
是
否
生成FrozenBufferedUpdates
并清空全局BufferedUpdates
更新DWPT的私有BufferedUpdates
否
是
DWPT是否取自
flushQueue?
更新拖延状态
是
否
FlushTicket添加到TicketQueue