Hold mongodb at 2.2.1 - #80
Conversation
2.0.0 took the driver from 2.2.1 to 2.3.3, which moves bundled libmongoc from 2.2.2 to 2.3.0. Cloud's zero-downtime probe fails on that pairing: a read issued while a provisioned MongoDB is failing over comes back 503 database_unavailable, and it still fails the probe's retry half a second later. The probe is deliberate about this. It retries idempotent reads once because "a read caught at that instant errors once and succeeds a moment later — the semantics every official driver gives applications", and notes that "a real outage fails the retry too". Failing the retry means the window where no primary is reachable outlasts what a client is supposed to paper over, which is a genuine availability regression for anything doing Mongo failovers. Observed twice on appwrite-labs/cloud#5181, at different points each run (specification resize, then manual failover), while the same jobs pass on cl-1.9.5-1 with libmongoc 2.2.2, and while the MySQL and Postgres transition suites stay green. That is a behaviour change, not a flake. Everything else 2.0.0 shipped is untouched. This restores the exact driver Cloud has been running in production and isolates the one variable so the libmongoc 2.3.0 change can be understood on its own.
Greptile SummaryPins the PHP MongoDB extension back to 2.2.1 to restore the bundled libmongoc 2.2.2 behavior during database failovers.
Confidence Score: 5/5The PR appears safe to merge based on the supplied rebuild verification and the absence of an established defect in the changed pin. The Docker build fetches the MongoDB extension by the updated immutable commit, and the reported rebuilt image contains the intended mongodb 2.2.1 and bundled libmongoc 2.2.2 versions. Important Files Changed
Reviews (1): Last reviewed commit: "(fix): hold mongodb at 2.2.1" | Re-trigger Greptile |
|
Closing — the rationale was wrong, and a controlled A/B disproves it. With the edge checkout pinned to a single SHA (
So mongodb 2.3.3 / libmongoc 2.3.0 is not the cause. The original failures were at edge 2.0.0 stays as released. No revert needed. |
Reverts one pin from 2.0.0:
mongodb2.3.3 → 2.2.1. Everything else 2.0.0 shipped stays.Why
The driver bump moves bundled libmongoc from 2.2.2 to 2.3.0, and Cloud's zero-downtime probe fails on that pairing. A read issued while a provisioned MongoDB is failing over returns
503 database_unavailable, and it still fails the probe's retry half a second later.The probe is explicit that a single blip is expected and tolerated:
Failing the retry means the window where no primary is reachable outlasts what a client is supposed to paper over. For anything performing Mongo failovers or resizes, that is an availability regression.
Evidence
specification resize, thenmanual failover. Flake does not reproduce with that shape.cl-1.9.5-1, which carries mongodb 2.2.1 / libmongoc 2.2.2, and on other open Cloud PRs.php --ri mongodbconfirms the delta:cl-1.9.5-1→ libmongoc 2.2.2,cl-1.9.6-1→ libmongoc 2.3.0.What this is not
This is not a controlled isolation. Proving it outright means holding everything else constant and flipping only this pin, which is exactly what this PR sets up: rebuild, re-tag CE, re-run the Cloud suite. If the probe goes green, the driver is confirmed and the libmongoc 2.3.0 change can be investigated on its own terms rather than while blocking a release chain.
Verification
Rebuilt locally:
mongodb 2.2.1,libmongoc bundled version => 2.2.2— the exact driver Cloud runs in production today.Follow-up
Once #75 lands, the weekly updater will select 2.3.3 again — same major, newer — and it approves and merges its own PRs. This hold needs a machine-readable guard in
Catalogbefore that happens, or the regression returns on the next scheduled run with nothing to stop it.🤖 Generated with Claude Code