Page MenuHomePhabricator

BadMethodCallException: MediaWiki\Session\SessionProvider::preventSessionsForUser must be implemented when canChangeUser() is false
Open, Needs TriagePublicPRODUCTION ERROR

Description

Error
  • mwversion: 1.45.0-wmf.21
  • timestamp: 2025-10-06T17:18:56.454Z
  • phpversion: 8.1.33
  • reqId: a4faeb06-aff3-4015-a1bb-f0687a826c93
  • Find reqId in Logstash
normalized_message
[{reqId}] {exception_url}   BadMethodCallException: MediaWiki\Session\SessionProvider::preventSessionsForUser must be implemented when canChangeUser() is false
FrameLocationCall
from/srv/mediawiki/php-1.45.0-wmf.21/includes/session/SessionProvider.php(432)
#0/srv/mediawiki/php-1.45.0-wmf.21/includes/session/SessionManager.php(492)MediaWiki\Session\SessionProvider->preventSessionsForUser(string)
#1/srv/mediawiki/php-1.45.0-wmf.21/includes/user/User.php(907)MediaWiki\Session\SessionManager->preventSessionsForUser(string)
#2/srv/mediawiki/php-1.45.0-wmf.21/extensions/Babel/includes/BabelAutoCreate.php(102)MediaWiki\User\User::newSystemUser(string, array)
#3/srv/mediawiki/php-1.45.0-wmf.21/extensions/Babel/includes/BabelAutoCreate.php(57)MediaWiki\Babel\BabelAutoCreate::user()
#4/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/MWCallableUpdate.php(52)MediaWiki\Babel\BabelAutoCreate::MediaWiki\Babel\{closure}(string)
#5/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdates.php(459)MediaWiki\Deferred\MWCallableUpdate->doUpdate()
#6/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdates.php(201)MediaWiki\Deferred\DeferredUpdates::attemptUpdate(MediaWiki\Deferred\MWCallableUpdate)
#7/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdates.php(299)MediaWiki\Deferred\DeferredUpdates::run(MediaWiki\Deferred\MWCallableUpdate)
#8/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdatesScope.php(243)MediaWiki\Deferred\DeferredUpdates::MediaWiki\Deferred\{closure}(MediaWiki\Deferred\MWCallableUpdate, int)
#9/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdatesScope.php(172)MediaWiki\Deferred\DeferredUpdatesScope->processStageQueue(int, int, Closure)
#10/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdates.php(302)MediaWiki\Deferred\DeferredUpdatesScope->processUpdates(int, Closure)
#11/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdatesScope.php(243)MediaWiki\Deferred\DeferredUpdates::MediaWiki\Deferred\{closure}(MediaWiki\Deferred\AtomicSectionUpdate, int)
#12/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdatesScope.php(172)MediaWiki\Deferred\DeferredUpdatesScope->processStageQueue(int, int, Closure)
#13/srv/mediawiki/php-1.45.0-wmf.21/includes/deferred/DeferredUpdates.php(307)MediaWiki\Deferred\DeferredUpdatesScope->processUpdates(int, Closure)
#14/srv/mediawiki/php-1.45.0-wmf.21/extensions/EventBus/includes/JobExecutor.php(124)MediaWiki\Deferred\DeferredUpdates::doUpdates()
#15/srv/mediawiki/rpc/RunSingleJob.php(60)MediaWiki\Extension\EventBus\JobExecutor->execute(array)
#16{main}
Impact
Notes

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

Maybe it's from NetworkSessions?

__METHOD__ resolving to the parent class is a bit unhelpful here.

Change #1194218 had a related patch set uploaded (by Gergő Tisza; author: Gergő Tisza):

[mediawiki/core@master] session: Log actual class name in preventSessionsForUser exception

https://gerrit.wikimedia.org/r/1194218

Not related to the event platform.

Not really related to Babel either but it did break BabelAutoCreate::create() so adding for awareness.

I guess we should have a structure test that calls preventSessionsForUser() for every session provider.

Pppery subscribed.

BabelAutoCreate failing is not a big deal; a large number of wikis have blocked the account entirely and hence have their own processes for creating babel categories.

Change #1194218 merged by jenkins-bot:

[mediawiki/core@master] session: Log actual class name in preventSessionsForUser exception

https://gerrit.wikimedia.org/r/1194218

Change #1194261 had a related patch set uploaded (by Gergő Tisza; author: Gergő Tisza):

[mediawiki/core@wmf/1.45.0-wmf.21] session: Log actual class name in preventSessionsForUser exception

https://gerrit.wikimedia.org/r/1194261

Change #1194262 had a related patch set uploaded (by Gergő Tisza; author: Gergő Tisza):

[mediawiki/core@wmf/1.45.0-wmf.22] session: Log actual class name in preventSessionsForUser exception

https://gerrit.wikimedia.org/r/1194262

Change #1194261 merged by jenkins-bot:

[mediawiki/core@wmf/1.45.0-wmf.21] session: Log actual class name in preventSessionsForUser exception

https://gerrit.wikimedia.org/r/1194261

Change #1194262 merged by jenkins-bot:

[mediawiki/core@wmf/1.45.0-wmf.22] session: Log actual class name in preventSessionsForUser exception

https://gerrit.wikimedia.org/r/1194262

Mentioned in SAL (#wikimedia-operations) [2025-10-07T21:30:44Z] <tgr@deploy2002> Started scap sync-world: Backport for [[gerrit:1194261|session: Log actual class name in preventSessionsForUser exception (T406566)]], [[gerrit:1194262|session: Log actual class name in preventSessionsForUser exception (T406566)]], [[gerrit:1194281|session: Log cache write flags in SessionStore::set() (T405633 T405634)]], [[gerrit:1194282|session: Log cache write flags in SessionStore::set() (T4056

Mentioned in SAL (#wikimedia-operations) [2025-10-07T21:34:47Z] <tgr@deploy2002> tgr: Backport for [[gerrit:1194261|session: Log actual class name in preventSessionsForUser exception (T406566)]], [[gerrit:1194262|session: Log actual class name in preventSessionsForUser exception (T406566)]], [[gerrit:1194281|session: Log cache write flags in SessionStore::set() (T405633 T405634)]], [[gerrit:1194282|session: Log cache write flags in SessionStore::set() (T405633 T405634)]] synced

Mentioned in SAL (#wikimedia-operations) [2025-10-07T21:40:21Z] <tgr@deploy2002> Finished scap sync-world: Backport for [[gerrit:1194261|session: Log actual class name in preventSessionsForUser exception (T406566)]], [[gerrit:1194262|session: Log actual class name in preventSessionsForUser exception (T406566)]], [[gerrit:1194281|session: Log cache write flags in SessionStore::set() (T405633 T405634)]], [[gerrit:1194282|session: Log cache write flags in SessionStore::set() (T405

Looking as far back as 12 months ago, it seems like we only had these spikes from Sept 22 - Oct 13, and it stopped since then, see: logstash query.

Do we still need to do anything here? Not much activity on https://phabricator.wikimedia.org/tag/networksession/, but spotted a potentially related task - T373826

Logstash only retains data for 3 months (so mid-August). Anyway these errors happen when newSystemUser() is called, which is rare. But they are also trivial to fix - NetworkSession just needs to implement a noop preventSessionsForUser() method (since it's for system-ish users in the first place, it doesn't need to worry about preventing normal users from loggin into system user accounts).

Change #1206384 had a related patch set uploaded (by D3r1ck01; author: Derick Alangi):

[mediawiki/extensions/NetworkSession@master] NetworkSessionProvider: Implement no-op preventSessionsForUser()

https://gerrit.wikimedia.org/r/1206384

Change #1206384 merged by jenkins-bot:

[mediawiki/extensions/NetworkSession@master] NetworkSessionProvider: Implement no-op preventSessionsForUser()

https://gerrit.wikimedia.org/r/1206384