Page MenuHomePhabricator

Deprecate IContextSource::getWikiPage and IContextSource::canUseWikiPage
Open, MediumPublic

Description

WikiPage is going to be broken down into services. It's impossible to instantiate it within the context without using global state, and in general having WikiPage accessor in context violates the laws of nature.

The method usages should be found, replaced with explicit use of WikiPageFactory and method should be hard-deprecated and eventually removed.

Details

SubjectRepoBranchLines +/-
mediawiki/extensions/AbuseFiltermaster+35 -31
mediawiki/extensions/CognitiveProcessDesignerREL1_39-3.0.x+8 -4
mediawiki/extensions/CognitiveProcessDesignermaster+8 -4
mediawiki/extensions/CognitiveProcessDesignerREL1_39+8 -4
mediawiki/coremaster+34 -5
mediawiki/extensions/BlueSpiceFoundationmaster+11 -2
mediawiki/coremaster+61 -56
mediawiki/coremaster+61 -56
mediawiki/skins/MinervaNeuemaster+14 -8
mediawiki/extensions/FileImportermaster+4 -2
mediawiki/extensions/WikiEditormaster+12 -6
mediawiki/extensions/ConfirmEditmaster+23 -10
mediawiki/extensions/AbuseFiltermaster+1 -1
mediawiki/extensions/Wikibasemaster+3 -9
mediawiki/extensions/ConfirmEditmaster+3 -3
mediawiki/extensions/ConfirmEditmaster+4 -3
mediawiki/extensions/WikibaseMediaInfomaster+1 -12
mediawiki/extensions/WikiSharemaster+9 -7
mediawiki/extensions/MobileFrontendmaster+2 -2
mediawiki/extensions/EntitySchemamaster+21 -11
mediawiki/extensions/MsUploadmaster+9 -1
mediawiki/extensions/Wikispeechmaster+1 -1
mediawiki/extensions/TwoColConflictmaster+7 -3
mediawiki/extensions/MiniInvitemaster+10 -12
mediawiki/extensions/SpamBlacklistmaster+3 -1
mediawiki/extensions/AkismetKlikmaster+4 -1
mediawiki/extensions/BlueSpiceFoundationmaster+11 -5
mediawiki/extensions/BlueSpiceFoundationmaster+7 -0
mediawiki/extensions/ProofreadPagemaster+12 -6
mediawiki/extensions/Wikibasemaster+4 -3
Show related patches Customize query in gerrit

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

We have extension that extends/implements IContextSource so we need to update those methods deprecation also there:

  • BlueSpiceFoundation (Context.php, BSApiTasksBase.php)

Change 699911 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/Wikibase@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 699911 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701091 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/ProofreadPage@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701127 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/BlueSpiceFoundation@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 701091 merged by jenkins-bot:

[mediawiki/extensions/ProofreadPage@master] Replace depricating method IContextSource::getWikiPage & IContextSource::canUseWikiPage

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

Change 701356 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/BlueSpiceFoundation@master] Declare missing method of CsrfTokenSetProvider.

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

Change 701356 merged by jenkins-bot:

[mediawiki/extensions/BlueSpiceFoundation@master] Declare missing method of CsrfTokenSetProvider.

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

Change 701127 merged by jenkins-bot:

[mediawiki/extensions/BlueSpiceFoundation@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 701882 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/EntitySchema@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701893 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/MobileFrontend@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 701896 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/AbuseFilter@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701897 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/AkismetKlik@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701901 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/CognitiveProcessDesigner@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701903 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/ConfirmEdit@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 701911 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/MiniInvite@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 701916 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/MsUpload@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701920 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/SpamBlacklist@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701920 merged by jenkins-bot:

[mediawiki/extensions/SpamBlacklist@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701903 merged by jenkins-bot:

[mediawiki/extensions/ConfirmEdit@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 701896 merged by jenkins-bot:

[mediawiki/extensions/AbuseFilter@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 702119 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/TwoColConflict@master] Replace depricating method IContextSource::getWikiPage

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

Change 702125 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/WikibaseMediaInfo@master] Replace depricating method IContextSource::getWikiPage

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

Change 702130 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/WikiShare@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 702131 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/Wikispeech@master] Replace depricating method IContextSource::getWikiPage

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

Change 701911 merged by jenkins-bot:

[mediawiki/extensions/MiniInvite@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 702131 merged by jenkins-bot:

[mediawiki/extensions/Wikispeech@master] Replace depricating method IContextSource::getWikiPage

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

Change 702119 merged by jenkins-bot:

[mediawiki/extensions/TwoColConflict@master] Replace depricating method IContextSource::getWikiPage

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

Change 701916 merged by jenkins-bot:

[mediawiki/extensions/MsUpload@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 701882 merged by jenkins-bot:

[mediawiki/extensions/EntitySchema@master] Replace depricating method IContextSource::getWikiPage to WikiPageFactory usage

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

Change 702365 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/core@master] WIP: Hard deprecate IContextSource::getWikiPage and IContextSource::canUseWikiPage

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

Change 702372 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/BlueSpiceFoundation@master] WIP: Hard deprecate IContextSource::getWikiPage and IContextSource::canUseWikiPage

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

Change 701893 merged by jenkins-bot:

[mediawiki/extensions/MobileFrontend@master] Replace deprecated method IContextSource methods

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

Change 702125 merged by jenkins-bot:

[mediawiki/extensions/WikibaseMediaInfo@master] Replace depricating method IContextSource::getWikiPage

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

Change 702130 merged by jenkins-bot:

[mediawiki/extensions/WikiShare@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 702614 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/core@master] Replace depricating methods IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 702678 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/Wikibase@master] Replace custom Title mock to MockTitleTrait

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

Change 701903 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/ConfirmEdit@master] Replace depricating method IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Caused T285959: Captcha interface is not shown to unregistered users, page save is not possible.

I'd be concerned what other side effects these patches may be having.

Also, please don't merge patches with typos/grammer errors in them. "depricating" is not a word, it would be "deprecating", but that would be the action of deprecating something... But in this case, "Replace deprecated methods" would be the appropriate wording.

Change 702698 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/ConfirmEdit@master] Replaced deprecate methods IContextSource::getWikiPage && IContextSource::canUseWikiPage.

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

Change 702698 abandoned by Roman Stolar:

[mediawiki/extensions/ConfirmEdit@master] Replaced deprecate methods IContextSource::getWikiPage && IContextSource::canUseWikiPage.

Reason:

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

Change 702678 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] Replace custom Title mock to MockTitleTrait

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

Ok, please cease from merging any more of these patches.

With T286140: AbuseLog no longer recording revids of saved edits, this is the second regression that these have caused in production.

It would seem they're not being tested, and are clearly breaking things because they're not doing the right thing.

Change 737353 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/ConfirmEdit@master] Replace deprecated methods IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 737383 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/WikiEditor@master] Replace usage of ConfirmEdit_ActivateCaptcha random properties.

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

Change 737353 merged by jenkins-bot:

[mediawiki/extensions/ConfirmEdit@master] Replace deprecated methods IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 737383 merged by jenkins-bot:

[mediawiki/extensions/WikiEditor@master] Replace usage of ConfirmEdit_ActivateCaptcha random properties.

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

Change 739128 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/AbuseFilter@master] Replace usage of the method IContextSource::getWikiPage that will be deprecated to WikiPageFactory usage

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

Change 739274 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/extensions/FileImporter@master] Replace usage of the method IContextSource::getWikiPage that will be deprecated, to WikiPageFactory usage

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

Change 739274 merged by jenkins-bot:

[mediawiki/extensions/FileImporter@master] Replace usage of the method IContextSource::getWikiPage that will be deprecated, to WikiPageFactory usage

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

Change 739547 had a related patch set uploaded (by Roman Stolar; author: Roman Stolar):

[mediawiki/skins/MinervaNeue@master] Replace usage of the methods IContextSource::getWikiPage & canUseWikiPage that will be deprecated to WikiPageFactory usage

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

Change 702614 merged by jenkins-bot:

[mediawiki/core@master] Replace deprecated methods IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

Change 739547 merged by jenkins-bot:

[mediawiki/skins/MinervaNeue@master] Replace usage of the methods IContextSource::getWikiPage & canUseWikiPage that will be deprecated to WikiPageFactory usage

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

Change 702614 merged by jenkins-bot:

[mediawiki/core@master] Replace deprecated methods IContextSource::getWikiPage && IContextSource::canUseWikiPage

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

For reference, this was reverted because of T297744: Page tabs like "Edit", "View history" do not appear on Special:WhatLinksHere.

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

[mediawiki/core@master] Replace deprecated IContextSource methods (attempt #2)

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

Change 702372 merged by jenkins-bot:

[mediawiki/extensions/BlueSpiceFoundation@master] Hard deprecate IContextSource::getWikiPage and IContextSource::canUseWikiPage

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

WikiPage instances are expensive to instantiate because initializing them always requires a DB query. If IContextSource::getWikiPage calls are to be replaced by instantiations via WikiPageFactory, then every extension that needs access to the WikiPage instance corresponding to the current page will trigger a new, effectively redundant, DB query. I think this cost needs to be considered here.

Krinkle added subscribers: daniel, Krinkle.

Thanks @TK-999. It seems like using WikiPageFactory for the current page would be a step back in terms of performance. The reason the current patches haven't caused issues is likely because they're largely in relatively cold areas.

In terms of injection, I don't see any particular issue with exposing it via RequestContext. The object is created by the web entry point (e.g. MediaWiki.php) and then injected through RequestContext to anything that may need it, the same way it communicates the Title and User as well. I don't think that's something that is worth deprecating or changing.

Access to WikiPage *outside* RequestContet seems fine to migrate, although that too incurs database query costs. The way we generally solve this is through the LinkCache, which is meant to ensure the same page records aren't fetched multiple times int the same request (up to a certain limit).

Perhaps this is not working correctly? If PageStore bypasses it, or is asking for more than we cache, that needs to be fixed before wider adoption. Or perhaps the inverse is true, where WikiPage needs more than PageStore/LinkCache retain, and this adoption would change the order such that WikiPage comes second and then has to download the row a second time.

Assinging to @daniel to look at when he comes back in two weeks.

Change 964428 had a related patch set uploaded (by Robert Vogel; author: Roman Stolar):

[mediawiki/extensions/CognitiveProcessDesigner@REL1_39] Replace deprecated method `IContextSource::getWikiPage`

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

Change 964429 had a related patch set uploaded (by Robert Vogel; author: Roman Stolar):

[mediawiki/extensions/CognitiveProcessDesigner@REL1_39-3.0.x] Replace deprecated method `IContextSource::getWikiPage`

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

Perhaps one option could be to add a new method to WikiPageFactory that returns an optionally cached WikiPage instance for a given PageIdentity. That could then be used as a replacement without a performance cost.

Change 964428 merged by Robert Vogel:

[mediawiki/extensions/CognitiveProcessDesigner@REL1_39] Replace deprecated method `IContextSource::getWikiPage`

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

Change 701901 merged by Robert Vogel:

[mediawiki/extensions/CognitiveProcessDesigner@master] Replace deprecated method `IContextSource::getWikiPage`

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

Change 964429 merged by Robert Vogel:

[mediawiki/extensions/CognitiveProcessDesigner@REL1_39-3.0.x] Replace deprecated method `IContextSource::getWikiPage`

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

Change 739128 abandoned by Daniel Kinzler:

[mediawiki/extensions/AbuseFilter@master] Replace usage of the method IContextSource::getWikiPage that will be deprecated to WikiPageFactory usage

Reason:

obsolete

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