Skip to content

Releases: Paradoxianer/index-server

v1.0.0-6

v1.0.0-6 Pre-release
Pre-release

Choose a tag to compare

@Paradoxianer Paradoxianer released this 06 Sep 16:47

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

v1.0.0-5 Pre-release
Pre-release

Choose a tag to compare

@Paradoxianer Paradoxianer released this 19 Aug 17:09

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

  1. pkgman install index_server.hpkg (or the _debug variant below)
  2. Run start_index_server.sh once if it doesn't come up on its own.

Two files attached:

  • index_server.hpkg - regular build
  • index_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)

Pre-release

Choose a tag to compare

@Paradoxianer Paradoxianer released this 13 Aug 14:54

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

  1. pkgman install index_server.hpkg (or the _debug variant, see below)
  2. Run start_index_server.sh once 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 BTranslatorRoster are 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 .catkeys signature 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 build
  • index_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.