revert(batch): back out #24697 owner page collapse and drain requeue
Problem
#24697 (6547604a) has served on backend-integration since 2026-11-05 14:53Z (revision 01572-22x) and regressed projection drain. Owner-drain turn logs, Cloud Logging, read-only:
| window | turns/s | rows advanced/s | claim_busy share |
|---|---|---|---|
| 14:30-14:45Z (pre-train) | 3.4 | 11.9 | 70% |
| 15:30-15:33Z (post) | 30 | 8.4 | 60% (of 10x more turns) |
Cause: Projector sweep now calls request_drain(owner) for every collapsed owner not in this process's draining set, on every sweep. The de-dupe is per process only, so across ~48 integration instances the same heavy owners are requested everywhere. Turns hit the owner claim held elsewhere (claim_busy) or find nothing (end) in ~0.8 s. owner_page also adds one jobs read per page row. Projection over-SLA kept rising (178.7k at 15:40Z), and rows advanced fell 30%.
Fix
Revert #24697 (git revert -m 1 6547604a). The single conflict was the GMP keep-list in backend/deploy/cloud_run_gmp_sync.yaml. I kept main's version, which still lists the two now-unemitted counter names: harmless, with no keep-list churn. No later commit touched the reverted files, and nothing references the removed symbols.
A forward fix (request drains only for owners without a live claim, or rate-limit requests per owner, behind a kill switch) is a follow-up.
Tests
bin/omi-heavy run -- .venv/bin/python -m pytest -q over the #24697 test set plus test_attach_cloud_run_gmp_sidecar.py: 463 passed.
Risk / rollback
Restores the pre-#24697 projection scheduler, which served all morning. Rollback = revert this revert.
š¤ Generated with Claude Code