Wednesday, April 22, 2026
2 changes · saas-19.1
Enhancements to existing features
This change improves how the system reports failures when a connection drops during a wait. Instead of showing a confusing cancellation message, it now surfaces the real underlying problem so support teams can identify the cause more quickly.
Original PR description
This case induces confusion in the ranks: when the WS connection fails, the result of the run is set to failure then every outstanding response is cancelled. For `_wait_ready` specifically, because…
This case induces confusion in the ranks: when the WS connection fails, the result of the run is set to failure then every outstanding response is cancelled. For `_wait_ready` specifically, because it's a blocking wait on a request it yield a confusing result as the run fails with `CancelledError` and the actual cause (the WS was closed) is lost. One option would be to `set_exception` on the waiting responses, but I feel like this could create other confusing knock-on effects e.g. more evented waits which currently get ignored might start raising exceptions (although that seems unlikely as callbacks apparently do get called on cancel), and since issues with cancelling only seem to appear in `_wait_ready` that seems like overkill. Instead have `_wait_ready` handle cancellation by first checking if the result is in error, and using that to raise the underlying error, otherwise retry (and ultimately timeout, probably). And while at it, before signaling a timeout check if the run is in failure and raise that immediately, just in case. https://runbot.odoo.com/odoo/error/233738 Forward-Port-Of: odoo/odoo#260324
After databases are synchronized from Odoo.com, the system now tries to create a local API key for each database that does not already have one. This reduces an extra validation step against the global key, which makes database access faster and can save about half a second per database in some cases.
Original PR description
Before this commit, databases fetched from Odoo's SaaS were contacted using the global API key, which is more costly than using a key local to each database. Avoiding the call from the server to Odoo to check the foreign API key can spare about 500ms on each database where this key is not in the LRU. With this commit, after the synchronization with Odoo.com, we try to generate an API key on each database that doesn't have one yet. To do so, it relies on the API introduced by odoo/odoo#246118. Forward-Port-Of: odoo/enterprise#106372