Skip to content

Bazarr+ v2.6.1 Clockwork

Latest

Choose a tag to compare

@LavX LavX released this 29 Aug 21:19
6b84365

Bazarr+ v2.6.1 (Clockwork)

Codename: Clockwork

A stability patch on the v2.6 line, one day after Clockwork shipped. If you run a large library with "Treat Embedded Subtitles as Downloaded" enabled, v2.6.0's history pages could take twenty seconds to load a single page and buried your real events under a flood of embedded-detection records. All three reports arrived within a day of the release, precise and measured, and this patch answers them.


Headline: History shows your events again, at any library size

"Treat Embedded Subtitles as Downloaded" writes one Embedded Source history record per episode/language combination. On the reporting library that meant 115,188 records for 5,032 episodes from a single indexing pass, and that flood exposed three defects at once:

One history page cost a full scan of the table

The History pages order by timestamp, and no index existed behind that ordering, so the database scanned and sorted the entire six-figure table for every 25-row page: 21.5 seconds per page on the reporting setup. A new migration (b8d2c5f1a604) adds the missing timestamp indexes plus partial event indexes that hold only the rows the default view shows, so the page cost no longer depends on how large your history is. Measured on a database synthesized at the reporter's exact shape: the page query drops from 309 ms to 0.5 ms.

Real events drowned in Embedded Source records

Downloads, manual searches, uploads, upgrades and translations were buried under thousands of embedded-detection rows, and the pager counted the noise as pages. The History pages now hide Embedded Source records by default, from the rows and the total alike, and a new "Show Embedded Source records" switch brings them back on demand. The records keep being written and keep their role: scoring and upgrade logic still read them, and the movie detail view still shows each embedded track's stored score.

Missing Episodes crawled while Missing Movies flew

The Wanted pages scanned every episode row twice per request, once for the page and once for the count, and episode rows carrying twenty-plus embedded track entries are heavy to read: 5 seconds per Missing Episodes page against Missing Movies' 0.02 s. The same migration adds partial indexes matching the wanted query exactly, so both the page and the count run off the index and never touch the fat rows. Both dialects verified: SQLite and PostgreSQL plan every one of these queries through the new indexes.


Also in this patch

  • The release-hero tooling's dependencies were refreshed, clearing all five open Dependabot alerts on its lockfile (ws, webpack, and extract-zip, which had no patched release and is gone entirely from the updated toolchain). Build tooling only, never part of the shipped image.

CI / Docker

No workflow or image changes. The new test suites (history filtering, index migration) run in the standard backend matrix, including the per-file PostgreSQL isolation batch.


Dependency Updates

None in the shipped application. The Remotion toolchain bump above affects only the repository's release tooling.


Database Migrations

One migration: b8d2c5f1a604 adds six indexes (history timestamp, history events, and wanted partial indexes, for series and movies each). It creates only what is missing, so adopted databases or manual fixes that already carry an index by one of these names pass through untouched. No table or data changes, and downgrade removes exactly what upgrade added.


Included Pull Requests

  • #401: Index the history flood and keep Embedded Source out of the default view.

Upgrade / Migration Notes

  • No breaking changes. Update and restart as usual; the migration applies at boot in seconds.
  • The History pages now hide Embedded Source records by default. Nothing was deleted: flip the new switch on the History page to see them again.
  • If you cleaned action = 7 rows from your database by hand to work around this, you can stop; future scans may recreate them, and that is now fine.
  • PostgreSQL remains fully supported and first-class: every new index carries its predicate on both dialects and was verified against a real PostgreSQL 16.

Docker

docker pull ghcr.io/lavx/bazarr:2.6.1
docker pull ghcr.io/lavx/bazarr:latest

After upgrade, confirm the UI loads and /api/system/status reports 2.6.1.


Contributors

Thanks to @illusive888, whose three reports (#398, #399, #400) arrived within a day of v2.6.0 with row counts, timings and query plans attached, on top of the five reports that shaped v2.6.0 itself. Releases get better this fast only when the reports are this good.

Thanks to @LavX for the fix and the release.


Full Changelog: v2.6.0...v2.6.1