开始
addDocument()
开始
updateDocument()
开始
softUpdateDocument()
处理文档(Document)
开始
deleteDocuments(Query)
开始
deleteDocuments(Term)
开始
updateBinaryDocValue()
开始
updateNumericDocValue()
开始
updateDocValues()
删除操作
添加/更新操作
是否
执行flush?
是
flushQueue中
还有DWPT?
取出DWPT然后更新stall
是
DWPT执行doFlush
DWPTP中是否有
状态为flushPending的
ThreadState?
否
取出DWPT
是
阻塞添加/更新操作
flushQueue中
还有DWPT?
是
否
DWPT执行doFlush
否
DWPTP中是否有ThreadState?
取出最近完成添加文档任务的ThreadState
是
生成一个新的Threadstate
否
ThreadState
是否持有
DWPT引用?
是
从DWPTP取出持有DWPT引用的ThreadState
否
是
重置ThreadState
否
ThreadState
是否持有
DWPT引用?
生成一个新的DWPT并让ThreadState引用
是
否
ThreadState
是否持有DWPT引用
并且全局flush被触发
统计处理文档占用的内存使用量
ThreadState是否
被置为flushPending?
否
执行flush策略
全局flush是否被触发?
是
是
ThreadState是否
被置为flushPending?
从flushQueue取出
一个待flush的DWPT
是
ThreadState是否
被置为flushPending?
否
取出当前ThreadState持有的DWPT
是
否
否
是否触发删除结点
的flush?
设置flushDeletes为True
全局flush是否已经触发?
记录待处理的删除信息
DWPT是否为空
尝试调用正在等待执行doFlush
的其他DWPT
执行DWPT的doFlush
是
否
是
否
否
是
添加删除信息到DeleteQueue中
是否触发删除结点
的flush?
是
否
设置flushDeletes为True
执行flush策略
记录待处理的删除信息
全局flush是否已经触发?
否
结束
是
是否有新增的
删除操作?
DWPT中是否已经
添加过文档?
更新私有DeleteSlice
是
否
重置DeleteSlice
否
更新BufferedUpdates
更新numDocsInRAM
是
更新numDocsInRAM
添加删除信息到DeleteQueue中
更新BufferedUpdates
处理删除信息
处理文档后的工作
删除操作
添加操作
更新操作
获得ThreadState
处理文档前的工作
开始
addDocument()
开始
updateDocument()
开始
softUpdateDocument()
处理文档(Document)
开始
deleteDocuments(Query)
开始
deleteDocuments(Term)
开始
updateBinaryDocValue()
开始
updateNumericDocValue()
开始
updateDocValues()
删除操作
添加/更新操作
是否
执行flush?
是
flushQueue中
还有DWPT?
取出DWPT然后更新stall
是
DWPT执行doFlush
DWPTP中是否有
状态为flushPending的
ThreadState?
否
取出DWPT
是
阻塞添加/更新操作
flushQueue中
还有DWPT?
是
否
DWPT执行doFlush
否
DWPTP中是否有ThreadState?
取出最近完成添加文档任务的ThreadState
是
生成一个新的Threadstate
否
ThreadState
是否持有
DWPT引用?
是
从DWPTP取出持有DWPT引用的ThreadState
否
是
重置ThreadState
否
ThreadState
是否持有
DWPT引用?
生成一个新的DWPT并让ThreadState引用
是
否
ThreadState
是否持有DWPT引用
并且全局flush被触发
统计处理文档占用的内存使用量
ThreadState是否
被置为flushPending?
否
执行flush策略
全局flush是否被触发?
是
是
ThreadState是否
被置为flushPending?
从flushQueue取出
一个待flush的DWPT
是
ThreadState是否
被置为flushPending?
否
取出当前ThreadState持有的DWPT
是
否
否
是否触发删除结点
的flush?
设置flushDeletes为True
全局flush是否已经触发?
记录待处理的删除信息
DWPT是否为空
尝试调用正在等待执行doFlush
的其他DWPT
执行DWPT的doFlush
是
否
是
否
否
是
添加删除信息到DeleteQueue中
是否触发删除结点
的flush?
是
否
设置flushDeletes为True
执行flush策略
记录待处理的删除信息
全局flush是否已经触发?
否
结束
是
是否有新增的
删除操作?
DWPT中是否已经
添加过文档?
更新私有DeleteSlice
是
否
重置DeleteSlice
否
更新BufferedUpdates
更新numDocsInRAM
是
更新numDocsInRAM
添加删除信息到DeleteQueue中
更新BufferedUpdates
处理删除信息
处理文档后的工作
删除操作
添加操作
更新操作
获得ThreadState
处理文档前的工作