Skip to content

Commit 8a54e28

Browse files
committed
chore: prepare version 0.16.1
Ship the SQLite join-order fixes for the claimed-message scan and the effect recovery candidate query as a patch release, so an app that pins ~> 0.16.0 gets them with a bundle update.
1 parent 888d1e0 commit 8a54e28

3 files changed

Lines changed: 24 additions & 3 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
# Changelog
22

3+
## 0.16.1 - 2026-10-02
4+
5+
- Fix the SQLite join order of the claimed-message scan. The query in
6+
`ActivationManager#claimed_instance_ids` has no condition on a
7+
claimed-message column. The claimed-messages table is a short queue, so it is
8+
often empty when `ANALYZE` or `PRAGMA optimize` runs, and `sqlite_stat1` then
9+
has no row for it. Without statistics, SQLite assumed that the table was
10+
large, and it scanned every instance on each worker poll. The scan now uses
11+
`CROSS JOIN`, which SQLite keeps as a fixed join order, so it starts from the
12+
claimed messages. PostgreSQL and MySQL treat `CROSS JOIN` with an equality as
13+
an inner join and keep their plans. The ids and their order do not change.
14+
- Find SQLite effect recovery candidates through the processing effects.
15+
`sqlite_stat1` records only the average row count for each effect status.
16+
When most effects are complete, SQLite estimated that `status = 'processing'`
17+
matched most of the effects table. It then read every recovery row in key
18+
order to skip a sort, on each effect poll. An index on the recovery filter
19+
does not help, because a recovery row keeps `retired_at` empty after a normal
20+
completion. On SQLite the status test now carries
21+
`likelihood(..., 0.000001)`, so the plan starts from `idx_so_effects_poll`.
22+
The PostgreSQL and MySQL queries do not change.
23+
324
## 0.16.0 - 2026-09-23
425

526
- Find a message whose reference a caller lost.

‎Gemfile.lock‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
solid_objects (0.16.0)
4+
solid_objects (0.16.1)
55
actioncable (>= 7.1)
66
actionpack (>= 7.1)
77
actionview (>= 7.1)
@@ -384,7 +384,7 @@ CHECKSUMS
384384
rubocop-rails-omakase (1.1.0) sha256=2af73ac8ee5852de2919abbd2618af9c15c19b512c4cfc1f9a5d3b6ef009109d
385385
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
386386
securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
387-
solid_objects (0.16.0)
387+
solid_objects (0.16.1)
388388
sqlite3 (2.9.5-aarch64-linux-gnu) sha256=78075b6337d3d182c6d2b4691049ed45cd220826160c9ea18946bf6a1de200dc
389389
sqlite3 (2.9.5-aarch64-linux-musl) sha256=18c801185deb4adc01ddb281e8f672a39e3d1729979ca91e39439cd3eac0402d
390390
sqlite3 (2.9.5-arm-linux-gnu) sha256=1bdfca0c7d63998c60b0f4a8e3c8df2d33800ccc4abd2d612eddbbbc92a4c48b

‎lib/solid_objects/version.rb‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# rbs_inline: enabled
22

33
module SolidObjects
4-
VERSION = "0.16.0"
4+
VERSION = "0.16.1"
55
end

0 commit comments

Comments
 (0)