Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: 1.9.4
-
Fix Version/s: 1.9.5
-
Component/s: Administration
-
Labels:None
-
Affected Branches:MOODLE_19_STABLE
-
Fixed Branches:MOODLE_19_STABLE
Description
Reported by Sam in Moodle HQ chat:
with moodle 1.9.4 we see a critical performance problem on the root /index.php (or anywhere that draws the site admin block). We've tracked this down to a usage in courses.php of admin_setting_users_with_capability which ends up doing a pretty horrible get_users_with_capability that returns all 500,000 users. This line of code is still there in current MOODLE_19, but I wonder if it's been fixed in any way - does anyone know?
(unfortunately our moodle 1.9 test installs don't have large user numbers)
(ie basically, is this our system being slow, or is there something wrong with our settings for the capability in question, moodle/site:approvecourse)
sam,
that code should be doing
get_users_by_capability(get_context_instance(CONTEXT_SYSTEM), 'moodle/site:approvecourse', ...)
which should be a very short list of users.
(Can you check that it is doing that, and that it is returning a plausible number of users on learn.)
However, the admin_setting_configselect superclass has a separate load_choices option so that the choices can be lazy-loaded when needed, rather than having to be set in the constructor, and that is definitely a better way to do things here.
I think the attached patch correctly implements that, but I have only tested it very briefly. Would be good if you could review/test it some more, and even merge to 2.0 and commit it if you like. (I don't want to get too distracted from blocklib.)