开始

addDocument()

开始

updateDocument()

开始

softUpdateDocument()

u237_seg0 u237_seg1 u237_seg2 u237_seg3
u238_seg0 u238_seg1
u239_seg0 u239_seg1 u239_seg2 u239_seg3

处理文档(Document)

u241_seg0 u241_seg1
u242_seg0 u242_seg1
u243_seg0 u243_seg1

开始

deleteDocuments(Query)

u246_seg0 u246_seg1

开始

deleteDocuments(Term)

u249_seg0 u249_seg1

开始

updateBinaryDocValue()

u253_seg0 u253_seg1

开始

updateNumericDocValue()

u256_seg0 u256_seg1

开始

updateDocValues()

u259_seg0 u259_seg1

删除操作

添加/更新操作

是否

执行flush

u263_seg0 u263_seg1

flushQueue中

还有DWPT?

取出DWPT然后更新stall

DWPT执行doFlush

u269_seg0 u269_seg1
u270_seg0 u270_seg1 u270_seg2 u270_seg3 u270_seg4

DWPTP中是否有

状态为flushPending的

ThreadState?

u272_seg0 u272_seg1

取出DWPT

u275_seg0 u275_seg1

u277_seg0 u277_seg1 u277_seg2 u277_seg3

阻塞添加/更新操作

u279_seg0 u279_seg1

flushQueue中

还有DWPT?

u281_seg0 u281_seg1
u282_seg0 u282_seg1 u282_seg2 u282_seg3

DWPT执行doFlush

u286_seg0 u286_seg1
u287_seg0 u287_seg1 u287_seg2 u287_seg3 u287_seg4

u289_seg0 u289_seg1

DWPTP中是否有ThreadState?

取出最近完成添加文档任务的ThreadState

u292_seg0 u292_seg1

生成一个新的Threadstate

u295_seg0 u295_seg1

ThreadState

是否持有

DWPT引用?

u298_seg0 u298_seg1

从DWPTP取出持有DWPT引用的ThreadState

u302_seg0 u302_seg1 u302_seg2 u302_seg3
u303_seg0 u303_seg1 u303_seg2 u303_seg3
u304_seg0 u304_seg1

重置ThreadState

u307_seg0 u307_seg1
u308_seg0 u308_seg1 u308_seg2 u308_seg3 u308_seg4

ThreadState

是否持有

DWPT引用?

u311_seg0 u311_seg1

生成一个新的DWPT并让ThreadState引用

u313_seg0 u313_seg1
u314_seg0 u314_seg1 u314_seg2 u314_seg3

u317_seg0 u317_seg1
u318_seg0 u318_seg1

ThreadState

是否持有DWPT引用

并且全局flush被触发

u320_seg0

统计处理文档占用的内存使用量

ThreadState是否

被置为flushPending?

u323_seg0 u323_seg1
u324_seg0 u324_seg1

执行flush策略

全局flush是否被触发?

u328_seg0 u328_seg1
u329_seg0 u329_seg1 u329_seg2 u329_seg3

u331_seg0 u331_seg1

ThreadState是否

被置为flushPending?

从flushQueue取出

一个待flush的DWPT

u335_seg0 u335_seg1

ThreadState是否

被置为flushPending?

u338_seg0 u338_seg1

取出当前ThreadState持有的DWPT

u341_seg0 u341_seg1

u343_seg0 u343_seg1 u343_seg2 u343_seg3
u344_seg0 u344_seg1 u344_seg2 u344_seg3
u345_seg0 u345_seg1 u345_seg2 u345_seg3

u347_seg0 u347_seg1 u347_seg2 u347_seg3 u347_seg4

是否触发删除结点

flush

设置flushDeletes为True

u351_seg0 u351_seg1

全局flush是否已经触发?

记录待处理的删除信息

DWPT是否为空

尝试调用正在等待执行doFlush

的其他DWPT

执行DWPT的doFlush

u357_seg0 u357_seg1
u358_seg0 u358_seg1
u359_seg0 u359_seg1
u360_seg0 u360_seg1
u361_seg0 u361_seg1 u361_seg2 u361_seg3
u362_seg0 u362_seg1 u362_seg2 u362_seg3 u362_seg4
u363_seg0 u363_seg1 u363_seg2 u363_seg3 u363_seg4
u364_seg0 u364_seg1
u365_seg0 u365_seg1 u365_seg2 u365_seg3

添加删除信息到DeleteQueue中

u373_seg0 u373_seg1

是否触发删除结点

flush

u375_seg0 u375_seg1

u377_seg0 u377_seg1 u377_seg2 u377_seg3 u377_seg4

设置flushDeletes为True

执行flush策略

u381_seg0 u381_seg1

记录待处理的删除信息

u383_seg0 u383_seg1

全局flush是否已经触发?

u385_seg0 u385_seg1

结束

u388_seg0 u388_seg1
u389_seg0 u389_seg1 u389_seg2 u389_seg3 u389_seg4

是否有新增的

删除操作?

DWPT中是否已经

添加过文档?

u393_seg0 u393_seg1

更新私有DeleteSlice

u395_seg0 u395_seg1
u396_seg0 u396_seg1 u396_seg2 u396_seg3

重置DeleteSlice

u400_seg0 u400_seg1

更新BufferedUpdates

u403_seg0 u403_seg1

更新numDocsInRAM

u405_seg0 u405_seg1
u406_seg0 u406_seg1 u406_seg2 u406_seg3

u408_seg0 u408_seg1 u408_seg2 u408_seg3

更新numDocsInRAM

u410_seg0 u410_seg1
u411_seg0 u411_seg1 u411_seg2 u411_seg3

添加删除信息到DeleteQueue中

更新BufferedUpdates

u414_seg0 u414_seg1

处理删除信息

处理文档后的工作

删除操作

添加操作

更新操作

获得ThreadState

处理文档前的工作

u422_seg0 u422_seg1 u422_seg2 u422_seg3
u423_seg0 u423_seg1 u423_seg2 u423_seg3
u424_seg0 u424_seg1 u424_seg2 u424_seg3
u425_seg0 u425_seg1 u425_seg2 u425_seg3
u426_seg0 u426_seg1 u426_seg2 u426_seg3
u427_seg0 u427_seg1 u427_seg2 u427_seg3
u428_seg0 u428_seg1 u428_seg2 u428_seg3