[01:51:40] Hi all: quick question about vagrant. For testing extensions: do you need to vagrant provision after every change you wish to test or is it more "plug and play" like you'd normally expect from PHP? [01:51:48] I'd assume the latter, but can't check atm [01:52:00] @Reedy ^ [08:03:32] TheSandDoctor: you provision the environment [08:04:11] so once you have it set up to provide what you need for an extension, you shouldn't have to provision it again for an individual patch [16:43:24] Humm, I cannot figure out how to use flagicon template in a custom wiki (I'm not the admin, though). Looks like it depends on plenty of other templates, so would I somehow have to copy all of them? There must be a better way. And if it matters, its a Miraheze wiki, but I figured this is not specific to that provider. [16:49:47] Nikerabbit: Re T231196, that reminds me of T221511, T220999, and T221458. That query really should be doing `page` first, probably using the `page_redirect_namespace_len` index. You might get away with forcing that index. [16:49:47] T220999: Slow query "ApiQueryLogEvents::execute" after actor rollout - https://phabricator.wikimedia.org/T220999 [16:49:48] T221458: Special:Log on commons -- entire web request took longer than 60 seconds and timed out - https://phabricator.wikimedia.org/T221458 [16:49:48] T231196: $wgActorTableSchemaMigrationStage = SCHEMA_COMPAT_NEW; brings down translatewiki.net - https://phabricator.wikimedia.org/T231196 [16:49:48] T221511: Possible full scan query ApiQueryUserContribs::execute for revision_actor_temp table on commonswiki - https://phabricator.wikimedia.org/T221511 [17:19:15] anomie: is there way to do that without local code changes? [17:20:12] Nikerabbit: You can test the query manually to see if it gives the right plan with that change. It'll need a code change to have MediaWiki generate the changed query though. [17:21:17] anomie: I can try that [17:30:00] anomie: hmm, nope that index is even slighly slower [17:31:06] But we have 3179172 pages in NS_MEDIAWIKI.... [17:34:43] Nikerabbit: What did the explain for the old query look like then? [17:35:29] anomie: I wonder how to capture that one... [17:41:27] Nikerabbit: Should be something like EXPLAIN SELECT rev_id,rev_page,rev_timestamp,rev_minor_edit,rev_deleted,rev_len,rev_parent_id,rev_sha1,comment_rev_comment.comment_text AS `rev_comment_text`,comment_rev_comment.comment_data AS `rev_comment_data`,comment_rev_comment.comment_id AS `rev_comment_cid`,rev_user,rev_user_text,NULL AS `rev_actor`,page_namespace,page_title,page_id,page_latest,page_is_redirect,page_len,user_name FROM `bw_revision` JOIN [17:41:27] `bw_revision_comment_temp` `temp_rev_comment` ON ((temp_rev_comment.revcomment_rev = rev_id)) JOIN `bw_comment` `comment_rev_comment` ON ((comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id)) JOIN `bw_page` ON ((page_id = rev_page)) LEFT JOIN `bw_user` ON ((rev_user != 0) AND (user_id = rev_user)) WHERE (page_is_redirect = '0' AND page_namespace = '8' AND (page_title NOT LIKE '%/%' ESCAPE '`' )) AND (page_len <= 10000) AND [17:41:28] (page_latest = rev_id); [17:46:55] added in the task [17:47:12] it's still slow, but <1s [18:08:41] anomie: seems snappy with the name_title index [18:15:07] Nikerabbit: Hmm, probably benefiting from ICP to check page_title than from filtering on page_is_redirect and page_len (probably those don't filter much for you). I'm wary of forcing that one though, so we might need to do a STRAIGHT_JOIN. Which would need pulling `page` to the front of the query like in https://gerrit.wikimedia.org/r/c/mediawiki/core/+/505853/2/includes/api/ApiQueryUserContribs.php. [18:16:53] anomie: sounds complicated though :/ [18:18:43] Nikerabbit: The query to test would be EXPLAIN SELECT /*!STRAIGHT_JOIN*/ rev_id,rev_page,rev_timestamp,rev_minor_edit,rev_deleted,rev_len,rev_parent_id,rev_sha1,comment_rev_comment.comment_text AS `rev_comment_text`,comment_rev_comment.comment_data AS `rev_comment_data`,comment_rev_comment.comment_id AS `rev_comment_cid`,actor_rev_user.actor_user AS `rev_user`,actor_rev_user.actor_name AS `rev_user_text`,temp_rev_user.revactor_actor AS [18:18:44] `rev_actor`,page_namespace,page_title,page_id,page_latest,page_is_redirect,page_len,user_name FROM `bw_page` JOIN `bw_revision` ON ((page_id = rev_page)) JOIN `bw_revision_comment_temp` `temp_rev_comment` ON ((temp_rev_comment.revcomment_rev = rev_id)) JOIN `bw_comment` `comment_rev_comment` ON ((comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id)) JOIN `bw_revision_actor_temp` `temp_rev_user` ON ((temp_rev_user.revactor_rev = [18:18:44] rev_id)) JOIN `bw_actor` `actor_rev_user` ON ((actor_rev_user.actor_id = temp_rev_user.revactor_actor)) LEFT JOIN `bw_user` ON ((actor_rev_user.actor_user != 0) AND (user_id = actor_rev_user.actor_user)) WHERE page_is_redirect = '0' AND page_namespace = '8' AND (page_title NOT LIKE '%/%' ESCAPE '`' ) AND (page_len <= 10000) AND (page_latest = rev_id): [18:19:16] If that works and you don't feel comfortable putting together the patch, I can do that part. [18:20:44] anomie: yeah it seems to be about as fast [19:24:27] Nikerabbit: In case you didn't see it already, I submitted a patch for the issue and added you (and a few others) as a reviewer. [19:25:57] :+1: