DocumentsWriterDeleteQueue
DocumentsWriterDeleteQueue is a non-blocking linked pending deletes queue. In contrast to other queue implementation we only maintain the tail of the queue. A delete queue is always used in a context of a set of DWPTs and a global delete pool. Each of the DWPT and the global pool need to maintain their 'own' head of the queue (as a DeleteSlice instance per [ ]). The difference between the DWPT and the global pool is that the DWPT starts maintaining a head once it has added its first document since for its segments private deletes only the deletes after that document are relevant. The global pool instead starts maintaining the head once this instance is created by taking the sentinel instance as its initial head.
Since each DeleteSlice maintains its own head and the list is only single linked the garbage collector takes care of pruning the list for us. All nodes in the list that are still relevant should be either directly or indirectly referenced by one of the DWPT's private [ ] or by the global BufferedUpdates slice.
Each DWPT as well as the global delete pool maintain their private DeleteSlice instance. In the DWPT case updating a slice is equivalent to atomically finishing the document. The slice update guarantees a "happens before" relationship to all other updates in the same indexing session. When a DWPT updates a document it:
consumes a document and finishes its processing
updates its private DeleteSlice either by calling .updateSlice or .add (if the document has a delTerm)
applies all deletes in the slice to its private BufferedUpdates and resets it
increments its internal document id
The DWPT also doesn't apply its current documents delete term until it has updated its delete slice which ensures the consistency of the update. If the update fails before the DeleteSlice could have been updated the deleteTerm will also not be added to its private deletes neither to the global deletes.
Properties
Returns nested resources of this class. The result should be a point-in-time snapshot (to avoid race conditions).
Functions
invariant for document update
Advances the queue to the next queue on flush. This carries over the generation to the next queue and set the .getMaxSeqNo based on the given maxNumPendingOps. This method can only be called once, subsequently the returned queue should be used.
This may freeze the global buffer unless the delete queue has already been closed. If the queue has been closed this method will return null
For test purposes.
Return the memory usage of this object in bytes. Negative values are illegal.
Inserts a gap in the sequence numbers. This is used by IW during flush or commit to ensure any in-flight threads get sequence numbers inside the gap
Negative result means there were new deletes since we last applied
Just like updateSlice, but does not assign a sequence number