mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-23 21:18:58 +00:00
![]() 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. |
||
---|---|---|
.. | ||
assistant-service | ||
control-service | ||
executor-service | ||
index-service | ||
query-service | ||
readme.md |
Core Services
The cores services constitute the main functionality of the search engine, relatively agnostic to the Marginalia application.
-
The index-service contains the indexes, it answers questions about which documents contain which terms.
-
The query-service Interprets queries and delegates work to index-service.
-
The control-service provides an operator's user interface, and is responsible for orchestrating the various processes of the system.
-
The assistant-service helps the search service with spelling suggestions other peripheral functionality.