User Details
- User Since
- Oct 15 2014, 8:27 PM (582 w, 4 d)
- Roles
- Administrator
- Availability
- Available
- LDAP User
- Tim Starling
- MediaWiki User
- Tim Starling (WMF) [ Global Accounts ]
Yesterday
We could put the deployments in a shared table, with wiki ID columns.
Fri, Dec 12
Thu, Dec 11
Wed, Dec 10
Why get the parser involved? Why not load from the pageviews API on the client side?
Mon, Dec 8
It's reproducible by just putting sleep(1) after the proc_terminate().
Fri, Dec 5
Wed, Dec 3
Tue, Dec 2
This appears to be fixed.
Fri, Nov 28
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.
Wed, Nov 26
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.
Tue, Nov 25
Mon, Nov 24
Awesome
Tue, Nov 18
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:
Oct 22 2025
Daniel points out that watchlist expiry is awkward if you want an expiry time to apply to all labels on a page but we_item links to wlm_id.
I added wld_count for limiting the size of a watchlist. The page move REPLACE query is a potentially tricky detail.
Thanks everyone. I guess it's resolved? Please reopen if there's something left to do.
Oct 21 2025
There's no index which would allow efficient autocomplete prefix searches on pages that use a given template. But we could apply a CSS class to items in the menu depending on whether the page uses the template. If the number of pages using the template is small (<200) then there could be a separate mode where we only suggest those pages, although the mode switch might be surprising to users.
In ApiQueryRecentChanges, there is a "slot" parameter which does essentially what is requested, but it's inefficiently implemented, so I don't want to see that solution extended to RecentChanges highlighting.
