f15dd06473
This avoids concurrent access errors. This is especially important when using Unsafe-based LongArrays, since we have concurrent access to the underlying memory-mapped file. If pull the rug from under the caller by closing the file, we'll get a SIGSEGV. Even with a "safe" MemorySegment, we'll get ugly stacktraces if we close the file while a thread is still accessing it. So we spin up a thread that sleeps for a minute before actually unmapping the file, allowing any ongoing requests to wrap up. This is 100% a hack, but it lets us get away with doing this without adding locks to the index readers. Since this is "just" mmapped data, and this operation happens optimistically once a month, it should be safe if the call gets lost. |
||
---|---|---|
.. | ||
src | ||
build.gradle | ||
readme.md |
Index Service
The index service is a partitioned service that knows which document contains which keywords.
Central Classes
- IndexService is the REST entry point that the internal API talks to.
- IndexQueryService executes queries.
- SearchIndex owns the state of the index and helps with building a query strategy from parameters.
- IndexResultValuator determines the best results.
See Also
The index service relies heavily on the primitives in features-index: