Core
Lynx Pooled Hosting Runtime
Server-wide runtime tuning for pooled (multi-database) Lynx hosting
lynx_pool
· v19.0.1.0.0
· Premium
What this solves
Lynx Pooled Hosting Runtime
Server-wide module (add lynx_pool to server_wide_modules) for Lynx instances that serve MANY tenant databases from one process pool (dbfilter = ^%d$, empty db_name). It is a no-op on single-database instances and holds no models, views, or data — everything happens at module import, before the prefork master forks its workers.
Key Features
Registry LRU sizing — applies LYNX_REGISTRY_LRU_SIZE to config['registry_lru_size'] as an int. This cannot be done from odoo.conf: unknown configuration keys are kept as unparsed strings, and the registry LRU asserts on an integer size — a string value crashes the server at first registry access. Setting it here, before the first Registry instantiation, is the supported path.
Optional code warm-up — LYNX_POOL_WARMUP_MODULES (comma list) pre-imports those addons' Python in the master process so the code is shared copy-on-write across all forked workers instead of re-imported (and duplicated) per worker. Plain imports only — no post_load hooks run, so uninstalled modules cannot monkey-patch anything.
Multi-domain host routing — when LYNX_POOL_HOST_DB_MAP_FILE points at a JSON {host: database} map, wraps odoo.http.db_filter so a tenant serving several unrelated domains from one database (a multi-website tenant the native dbfilter = ^%d$ cannot route) resolves to the right database statefully, without leaving the pooled model. The map is operator-authored and re-read on file change; a no-op when the variable is unset.
Depends on
Try Lynx Pooled Hosting Runtime on your team.
Free trial, no credit card. Talk to sales when you're ready.