User Details
- User Since
- Oct 15 2014, 8:27 PM (587 w, 10 h)
- Roles
- Administrator
- Availability
- Available
- LDAP User
- Tim Starling
- MediaWiki User
- Tim Starling (WMF) [ Global Accounts ]
Tue, Jan 13
I created the page.
Mon, Jan 12
Wed, Dec 17
I updated the schema to make all tables be shared, and also for the new purging algorithm at T412473.
It should simplify purging (T412473) if all tables are shared, since there is a need for global locking. You can check to make sure a package hasn't been touched recently before purging it, but ultimately you need a locked view of that condition.
Dec 15 2025
This is done.
Dec 14 2025
We could put the deployments in a shared table, with wiki ID columns.
Dec 12 2025
Dec 11 2025
Dec 10 2025
Why get the parser involved? Why not load from the pageviews API on the client side?
Dec 8 2025
It's reproducible by just putting sleep(1) after the proc_terminate().
Dec 5 2025
Dec 3 2025
Dec 2 2025
This appears to be fixed.
Nov 28 2025
The sitemap has only been submitted direct to Google, it's not in robots.txt and it hasn't been submitted to Bing. SRE are afraid that adding it to robots.txt will cause too much crawler traffic.
Nov 26 2025
There are also two world-writable directories: /etc/wmerrors and /etc/php/8.3/fpm/env. They have the potential for escalation and need to be fixed. I haven't fully isolated this but it seems to be related to helmfile. The deployment chart declares files in these directories, and the directories are created with incorrect permissions.
Nov 25 2025
Nov 24 2025
Awesome
Nov 18 2025
Wishathon project plan
There are two implementations of this feature: one for core EditPage and one for VE. Both use TitleInputWidget, which I think will need to be subclassed. Compare MWTemplateTitleInputWidget in VE. We could override getApiParams to add prop=templates, tltemplates=....
Nov 11 2025
You can already use rcprop=oresscores to serve the linked use case. Example API response:
Nov 9 2025
@Joe do you have any comments on the above? I think you were involved in requirements development for this task. I would like to get a more nuanced view of what kinds of namespaces should be excluded and why.
Nov 7 2025
$wgExtraNamespaces has 1705 namespaces, total for all wikis. Of those, 246 are in $wgNamespaceRobotPolicies and are presumably for internal community use.
From the point of view of image size and memory usage, it might be better to merge all the languages into a single file, and combine identical values by having a numerically indexed global value array. Maybe also abbreviate the message keys by mapping them to integers. We can tolerate a little bit of indirection at runtime.
Nov 5 2025
Nov 3 2025
Still some cleanup to do
An average over the past 3 days, compared to a week earlier, suggests this intervention reduced slow queries (in terms of total duration per day) by 59% for Watchlist and 77% for RecentChangesLinked.
Nov 2 2025
Oct 31 2025
Watchlist slow query count -- deployment was at 23:35
I made a Grafana dashboard for the relevant metrics: https://grafana.wikimedia.org/goto/jL2bYqRDg?orgId=1
Oct 30 2025
InvalidArgumentException is the wrong exception class for validating data from the database, that is for programmer errors. It should have a special subclass of RuntimeException so that it can be safely caught by all callers. I see RevisionStore is catching this exception at lines 1622 and 1699, but not at lines 1752 or 3236. An exception should either be caught or not, there's no rationale for conditionally catching it.
There is a cron job running listTaskCounts.php --topictype ores which makes a TopicDecorator with $useOresTopics=true, so TopicDecorator::loadTopics() returns the list of topics from ArticleTopicFeature::TERMS_TO_LABELS. The array access on lines 146, 147, 149 and 152 could be properly guarded, but I wonder if the script is still doing a useful thing after refactoring in this area e.g. T393872.
Did this actually do anything? The linked documentation seems to imply that max-image-preview: standard is the default, so just sending that tag on every page should have no effect.
Oct 29 2025
Oct 28 2025
Oct 27 2025
On db2202 I created the cross-join table watchlist_label_member_T406843 using the definition from the task description. Then I populated it with some rows as follows:
Oct 24 2025
For the other special pages, we can only expect a performance advantage when a table other than recentchanges is first in the join order. Most Special:RecentChanges slow queries are due to ORES, which is not suitable for placing first in the join order and thus there is no advantage. I checked the EXPLAIN for a few other RC queries, but they were all putting recentchanges first.
Oct 23 2025
I tested the watchlist in the task description by calling SpecialWatchlist::getRows() from eval.php. The first time with no partitioning, the main query took 17.5 seconds. The second time, after warmup, it took 3.4 seconds. With partitioning, there were two queries for a total query time of 0.19 seconds.
This is done. However, I could not reproduce any performance improvement. The database does actually optimise a not-equals condition, so the index usage doesn't change.
Now seeing
Error 1054 from MediaWiki\RecentChanges\ChangesListQuery\ChangeTagsCondition::isDenseTagFilter, Unknown column 'changetagdisplay.ct_rc_id' in 'WHERE' EXPLAIN SELECT * FROM `change_tag` WHERE (changetagdisplay.ct_rc_id >= 7363925) AND changetagdisplay.ct_tag_id = 31 db1159
testwiki with days=30, limit=20:
