Page MenuHomePhabricator

Localisation cache dependency objects from extensions kill site when extension is disabled
Closed, ResolvedPublic

Description

This nicely broke the site for a few minutes after I briefly enabled, then re-disabled LocalisationUpdate:

Sep 22 21:38:22 10.0.2.250 apache2[13018]: PHP Fatal error: LocalisationCache::isExpired() [function.LocalisationCache-isExpired]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "LUDependency" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /usr/local/apache/common-local/wmf-deployment/includes/

As a temp workaround I tossed an LUDependency stub class definition into CommonSettings and ran a cache rebuild to eventually work them all out of cache.

We need to gracefully handle dependencies that can't be restored from the cache.


Version: unspecified
Severity: critical

Details

Reference
bz20773

Event Timeline

bzimport raised the priority of this task from to Medium.Nov 21 2014, 10:46 PM
bzimport set Reference to bz20773.

Note for folks trying to reproduce this at home: I've discovered that this bug only happens because WMF disabled LU without touching LocalSettings.php ; on normal installs, LocalSettings.php will be changed in the process of disabling LU, which triggers a l10ncache rebuild.

Should be fixed with r56816. Note that all attempts to reproduce this bug locally failed, because it cannot occur in theory: there's a GlobalDependency checking $wgExtensionMessagesFiles before any extension-added dependencies, and the former should fire since disabling an extension obviously changes the value of $wgExtensionMessagesFiles, which means the ghost LU object should never be reached.

In short, a theoretically unreachable code path was somehow reached anyway and exploded; this should now be fixed.