Skip to content

v1.7.12

Choose a tag to compare

@jiashuoz jiashuoz released this 24 Aug 01:54
· 64 commits to main since this release
65d5603

Supersedes v1.7.11, which was tagged but never reached production — its staging gates failed on an environment problem this release fixes. Everything in v1.7.11 is included; see the v1.7.11 notes for that content (IDNA-encoded DMARC lookups, self-hosting fixes, and the Python SDK dot-segment guard).

Added since v1.7.11

Two unindexed foreign-key columns are now indexed (#934, migrations 106 + 107). Postgres auto-indexes the referenced side of a foreign key but never the referencing side, and both of these are ON DELETE SET NULL — implemented as a per-row trigger that runs UPDATE ONLY child SET fk = NULL WHERE fk = $1 once for every deleted parent row. Unindexed, that is a sequential scan of the whole child table per deleted row.

Measured against the structurally identical sibling webhook_events, which already had such an index:

table rows plan cost
webhook_subscriber_deliveries 421,319 Seq Scan 93,443
webhook_events 454,487 Index Scan 8.44

~11,000×, on the smaller of the two tables. The practical effect was that a plain agent delete could exceed a 60s proxy timeout and return an HTML 504, and that slow deletes pinned both slots of the per-account concurrent-destructive cap so unrelated deletes returned 429. This was latent in production, not specific to any one environment — the retention purge depends on exactly the path that was unindexed, and the cost grows with table size.

Both indexes build with CREATE INDEX CONCURRENTLY, so no write lock is taken on either table during the upgrade.

The prober and sdk-monitor now purge the messages they create (#933). Both standing harnesses previously kept every message they had ever sent — enough accumulated volume to make the missing index above bite. Each now runs a bounded trash-then-purge sweep after its verdict is recorded, best-effort so a cleanup failure can never turn a healthy stack red.

Upgrade notes

Migrations 106 and 107 apply automatically on startup and take no write lock. On a large webhook_subscriber_deliveries the concurrent build may take a few minutes; the server is available throughout.

Clients

No client changes in this release. @e2a/cli 2.5.0, e2a (PyPI) 5.8.0, and @e2a/sdk 5.7.0 are unchanged from v1.7.11.

What's Changed

  • fix(prober,sdk-monitor): purge the messages the harnesses create by @jiashuoz in #933
  • fix(db): index the two hot unindexed FK referencing columns by @jiashuoz in #934

Full Changelog: v1.7.11...v1.7.12