mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
config.php set `$CFG->debug = 32767` whenever MODE_DEBUG was true, as the development and CI inventories set it. Moodle 5.3's `core_component::is_developer()` treats any debug bit defined in config.php as developer mode, so `init()` skipped `$CFG->cachedir/core_component.php` and ran `fill_all_caches()` on every PHP request: a walk over every plugin directory and every `classes/` tree. The autoload in setup.php triggers it before the ABORT_AFTER_CONFIG return, so even font.php and requirejs.php paid it. On local disk the walk is cheap. In swarm the code tree is an NFS4 mount, and the walk turns into GETATTR round trips: main run 39494396920 served `/theme/font.php` in no less than 1.6 s and `/lib/requirejs.php` in no less than 2.0 s, the five FPM workers per replica queued, and the CSP check timed out loading the academy page after 20 s on both Moodle swarm jobs. Write `debug` and `debugdisplay` into the site config with `admin/cli/cfg.php` instead, on every deploy and as integers (32767/1 in debug deployments, 0/0 otherwise). `is_developer()` reads only values defined in config.php, so the component cache is honoured, while `setup.php` still applies the stored debug level once the database is up. The assignments leave config.php entirely, because cfg.php refuses to change a name config.php defines, and MOODLE_DEBUG leaves env.j2 with them. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>