Releases: Paradoxianer/index-server
Release list
v1.0.0-6
Two crash fixes for the FullTextAnalyser translator pass since 1.0.0-5 (#27):
update_mime_info()is now called before the plain-text check, so a
freshly-created file without a MIME type yet (e.g. a temp file from an
atomic save) gets typed via the Storage Kit's own sniffer before ever
reaching BTranslatorRoster - closing the gap that let such files reach
STXTTranslator, which can misdetect an encoding and corrupt its output
buffer.- Replaced the NUL-byte "looks like binary" heuristic with a real
MIME-type allow-list built from every installed translator's declared
input formats (BTranslatorRoster::GetInputFormats()). Content whose
MIME type nothing installed can actually read is now skipped before
Identify() is ever called, while genuine translator-eligible content
(images, future OCR/PDF translators) still gets a real chance -
something the old heuristic accidentally blocked too, since it couldn't
tell a real image from a stripped binary by NUL bytes alone.
Verified live against the exact reproduction case from #27 (untyped
temp files, an untyped ELF binary, an untyped PNG) - no crash, correct
indexing/skip behavior in all three cases.
v1.0.0-5
Everything since v1.0.0-3.
Highlights
Boot-hang fix - reported on the forum: a tester's system wouldn't get
past the boot splash with index_server installed, on a multi-partition
BFS/FAT/FAT32 setup. CLuceneWriteDataBase was constructed eagerly for
every mounted volume, synchronously, during startup - a slow or
misbehaving filesystem driver (a flaky FAT/FAT32 drive, for instance)
had nothing bounding how long that could hang the whole startup
sequence. Fixed two ways: construction is now deferred to the first
real file actually needing it, and the underlying directory-create/
lock call is timeout-bounded (10s) regardless. (#30)
Shutdown no longer races a busy worker - index_server now waits
for every volume's watcher/worker threads to actually finish before
letting the process exit, instead of posting a quit message and
immediately proceeding. Verified live: quit while actively mid-commit
on ~2700 freshly-created files, clean shutdown, no crash. (#23)
Real I/O throttling - reported by a tester whose system (80k files
on one volume, 170k on another, 4 volumes total) became sluggish
enough during a large catch up that even Deskbar stopped responding.
CPU priority was already low; the missing piece was I/O pacing that
scales with actual load (25% of however long each commit just took,
capped at 2s) instead of a near-zero fixed constant, plus limiting
catch-up to one volume at a time instead of every volume competing at
once. Stress-tested against a full Haiku source checkout + build: 0
crashes, 0 lock timeouts, ~28,000 documents indexed.
Translator crash mitigation - binary content (compiled objects,
archives, browser cache files - ordinary byproducts of ordinary use)
is now skipped before it ever reaches a translator known to corrupt
memory on non-text input.
Search app: results are AND'ed by default instead of OR'ed (typing
more words now narrows results, matching every other search box), a
live filter while typing, "Load more results" pagination past the old
100-result ceiling, optional Size/Modified/Kind columns (right-click
the column header), an icon+name column, sortable columns, and a
layout bug fixed (the window used to open at half height and the
results list would visibly shrink once "Load more" appeared).
Installing
pkgman install index_server.hpkg(or the_debugvariant below)- Run
start_index_server.shonce if it doesn't come up on its own.
Two files attached:
index_server.hpkg- regular buildindex_server_debug-1.0.0~debug5-1-x86_64.hpkg- same code, verbose
debug logging, separate package name/version so it can be installed
side by side with a regular install for testing. Log at
~/config/var/log/index_server/index_server.log.
v1.0.0-3 (first release since debug-1)
First release since index-server-debug-1 (2026-08-06) - everything below accumulated since then. This project has also moved to its own repository (previously part of a Haiku source tree fork); see the README for why and what changed build-wise. Existing installs/indexes are unaffected - just install over the top.
This is still a debug build's sibling: full debug symbols, logs to ~/config/var/log/index_server/index_server.log (previous run kept as .log.old). Please attach that log (and any crash report from your Desktop) to a bug report.
Installing
pkgman install index_server.hpkg(or the_debugvariant, see below)- Run
start_index_server.shonce if it doesn't come up on its own - see the script's own notes on system-wide vs. home installs.
Highlights since debug-1
Crash fixes (the big one this round):
- A real-hardware kernel panic (
PANIC: blocks already set!) from MailAnalyser and FullTextAnalyser racing to create the same CLucene directory concurrently at startup. - MailAnalyser and FullTextAnalyser now share one real, kernel-enforced lock (
flock()) around all CLucene index writes - the previous in-process lock only worked within a single add-on image, not across both. - A crash from an uncaught exception building a CLucene document (e.g. a file vanishing between being queued and read - common with editors' atomic-save temp files).
- Calls into
BTranslatorRosterare now serialized across concurrently-watched volumes, closing another source of translator-state corruption.
Reindex Everything: new button in the Settings preflet for a full, deliberate rescan of every watched volume - starts immediately and shows live per-analyser progress, instead of the usual gradual catch-up.
Progress notifications: no longer flicker away and reappear mid-run; the settings window's progress bar no longer jumps the layout around, and the window can finally be resized wider to see full paths.
Search app: queries are sent asynchronously instead of blocking the UI, with a bounded 15s timeout instead of hanging indefinitely if index_server is unresponsive.
Data durability: the boot volume's CLucene index moved out of /boot/system/cache (which the OS may clear at any time without warning) into settings, matching where sync-position tracking already lived - a restart no longer risks silently losing the index.
Diagnostics: slow entries/commits are now logged with timing, and (as of today) the specific translator that identified a file is logged too - aimed at finally pinning down an ongoing translator heap-corruption crash on non-text binary files (tracked as #27).
Smaller fixes: ThumbnailAnalyser now uses BTranslationUtils::GetBitmap() instead of hand-rolling translation; translation logic moved out of the shared CLucene wrapper into FullTextAnalyser where it actually belongs architecturally; German catalogs updated; home-install autostart limitation documented.
Known limitations
- Localization catalogs aren't wired into the new standalone build yet - both packages are English-only for now (Jam's
.catkeyssignature convention needs adjusting for the new build). German will come back once that's sorted. - Filenames themselves aren't yet part of full-text search (only file content).
- A translator heap-corruption crash on certain non-text binary files (browser cache/session files observed so far) is still open - see #27. If you hit it, the log will now name the translator involved.
In the package
Two files attached:
index_server.hpkg- regular buildindex_server_debug-1.0.0~debug3-1-x86_64.hpkg- same code, separate package name/version so it can be installed side by side with a regular install for testing
Contents: index_server itself, all six analyser add-ons (FullTextAnalyser, MailAnalyser, ThumbnailAnalyser, ExifAnalyser, AudioTagAnalyser, MediaKitAnalyser), the Settings preflet, the standalone search app, and Deskbar menu entries for both apps.