for (;;);{"error":null,"payload":{"timeline":"\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_126\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5020793\" id=\"5020793\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-pencil phui-timeline-icon\" data-meta=\"0_125\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_0\"\u003eKrinkle\u003c\/a\u003e created this task.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5020793\" data-sigil=\"has-tooltip\" data-meta=\"0_124\"\u003e\u003cspan class=\"screen-only\"\u003eMar 13 2019, 1:52 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-13 13:52:32 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_129\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"display: none;\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5020804\" id=\"5020804\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_128\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_45\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-lock lightgreytext\" data-meta=\"0_46\" aria-hidden=\"true\"\u003e\u003c\/span\u003eRestricted Application\u003c\/span\u003e added a subscriber: \u003ca href=\"\/p\/Aklapper\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_47\"\u003eAklapper\u003c\/a\u003e. \u003cspan class=\"phui-timeline-extra-information\"\u003e \u00b7 \u003ca href=\"\/herald\/transcript\/3019170\/\"\u003eView Herald Transcript\u003c\/a\u003e\u003c\/span\u003e\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5020804\" data-sigil=\"has-tooltip\" data-meta=\"0_127\"\u003e\u003cspan class=\"screen-only\"\u003eMar 13 2019, 1:52 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-13 13:52:32 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_140\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_138\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_139\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5020805\" id=\"5020805\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-columns phui-timeline-icon\" data-meta=\"0_137\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_48\"\u003eKrinkle\u003c\/a\u003e moved this task from \u003ca href=\"\/project\/board\/2923\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_49\"\u003eLimbo\u003c\/a\u003e to \u003ca href=\"\/project\/board\/2923\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_50\"\u003ePerf recommendation\u003c\/a\u003e on the \u003ca href=\"\/project\/view\/2923\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_51\"\u003ePerformance-Team (Radar)\u003c\/a\u003e board.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5020805\" data-sigil=\"has-tooltip\" data-meta=\"0_136\"\u003e\u003cspan class=\"screen-only\"\u003eMar 13 2019, 1:52 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-13 13:52:47 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_134\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_135\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_52\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eCore Platform Team: From a product perspective, do you see this as a desirable change? Do we know of third parties that have raised concerns with the defaults and\/or specifically prefer it?\u003c\/p\u003e\n\n\u003cp\u003eLanguage Team: Do we know of known issues with file-based LCStore, e.g. something that is fine for WMF but could be a problem for third parties?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_149\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/chvngxnqoko6t3z6hc6b\/PHID-FILE-apmfbzbqf4i24fx5ac7l\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Nikerabbit\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5021142\" id=\"5021142\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_148\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Nikerabbit\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_54\"\u003eNikerabbit\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5021142\" data-sigil=\"has-tooltip\" data-meta=\"0_147\"\u003e\u003cspan class=\"screen-only\"\u003eMar 13 2019, 3:27 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-13 15:27:21 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_145\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_146\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_53\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eThis would essentially mean making \u003ctt class=\"remarkup-monospaced\"\u003e$wgCacheDirectory\u003c\/tt\u003e mandatory. Currently it is optional.\u003c\/p\u003e\n\n\u003cp\u003eFrom personal experiences, setting up a cache directory with write access from admin users (for command line scripts) and web server simultaneously (and in a safe manner) is not very easy. For simple web hotels or shared hosting, is it even possible?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_161\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/v5wmnfiaelrd6nztxd3a\/PHID-FILE-s57znldbv3qchtewuryd\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/daniel\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-indigo \" href=\"\/badges\/view\/14\/\" aria-label=\"Nerd Sniper\" data-sigil=\"has-tooltip\" data-meta=\"0_159\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-empire\" data-meta=\"0_160\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5035881\" id=\"5035881\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_158\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/daniel\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_56\"\u003edaniel\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5035881\" data-sigil=\"has-tooltip\" data-meta=\"0_157\"\u003e\u003cspan class=\"screen-only\"\u003eMar 19 2019, 1:47 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-19 13:47:40 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_155\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_156\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_55\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote\u003e\u003cp\u003eFrom personal experiences, setting up a cache directory with write access from admin users (for command line scripts) and web server simultaneously (and in a safe manner) is not very easy.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI keep running into this annoying issue with my local development environment. Whatever we use per default should work without the need to fiddle with file permissions.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_170\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/xfpo7764mzhw24fxdxpi\/PHID-FILE-anrie3fu7jeg4446msm3\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/EvanProdromou\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5036116\" id=\"5036116\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_169\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/EvanProdromou\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_58\"\u003eEvanProdromou\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5036116\" data-sigil=\"has-tooltip\" data-meta=\"0_168\"\u003e\u003cspan class=\"screen-only\"\u003eMar 19 2019, 2:27 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-19 14:27:38 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_166\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_167\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_57\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eIt seems like this would be a change that would break at least some upgrades, and would require some documentation for third-party admins. Do we have any data that says that the performance advantage between PHP array files and CDB justifies this breakage?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_177\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3ndsxtl44eofytwep42p\/PHID-FILE-4ybkrghfwjvx4ndzbgkv\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/kchapman\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5036122\" id=\"5036122\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-columns phui-timeline-icon\" data-meta=\"0_172\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/kchapman\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_59\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e kchapman\u003c\/a\u003e moved this task from \u003ca href=\"\/project\/board\/3654\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_60\"\u003eInbox\u003c\/a\u003e to \u003ca href=\"\/project\/board\/3654\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_61\"\u003eNeeds Cleaning - Security, stability, performance, and scalability (TEC1)\u003c\/a\u003e on the \u003ca href=\"\/tag\/platform_engineering\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_62\"\u003ePlatform Engineering\u003c\/a\u003e board.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5036122\" data-sigil=\"has-tooltip\" data-meta=\"0_171\"\u003e\u003cspan class=\"screen-only\"\u003eMar 19 2019, 2:29 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-19 14:29:00 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-link phui-timeline-icon\" data-meta=\"0_173\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/kchapman\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_63\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e kchapman\u003c\/a\u003e edited projects, added \u003ca href=\"\/project\/view\/3666\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_64\"\u003ePlatform Engineering (Needs Cleaning - Security, stability, performance, and scalability (TEC1))\u003c\/a\u003e; removed \u003ca href=\"\/tag\/platform_engineering\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_65\"\u003ePlatform Engineering\u003c\/a\u003e.\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-link phui-timeline-icon\" data-meta=\"0_174\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/kchapman\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_66\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e kchapman\u003c\/a\u003e added a project: \u003ca href=\"\/tag\/platform_team_legacy\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_67\"\u003ePlatform Team Legacy\u003c\/a\u003e.\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-columns phui-timeline-icon\" data-meta=\"0_175\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/kchapman\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_68\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e kchapman\u003c\/a\u003e moved this task from \u003ca href=\"\/project\/board\/3634\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_69\"\u003eInbox\u003c\/a\u003e to \u003ca href=\"\/project\/board\/3634\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_70\"\u003eLater\u003c\/a\u003e on the \u003ca href=\"\/tag\/platform_team_legacy\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_71\"\u003ePlatform Team Legacy\u003c\/a\u003e board.\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-link phui-timeline-icon\" data-meta=\"0_176\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/kchapman\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_72\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e kchapman\u003c\/a\u003e edited projects, added \u003ca href=\"\/project\/view\/3635\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_73\"\u003ePlatform Team Legacy (Later)\u003c\/a\u003e; removed \u003ca href=\"\/tag\/platform_team_legacy\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_74\"\u003ePlatform Team Legacy\u003c\/a\u003e.\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_186\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/xfpo7764mzhw24fxdxpi\/PHID-FILE-anrie3fu7jeg4446msm3\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/EvanProdromou\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5036130\" id=\"5036130\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_185\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/EvanProdromou\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_75\"\u003eEvanProdromou\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5036130\" data-sigil=\"has-tooltip\" data-meta=\"0_184\"\u003e\u003cspan class=\"screen-only\"\u003eMar 19 2019, 2:30 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-19 14:30:06 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_182\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_183\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_76\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003e\u003ca href=\"https:\/\/phabricator.wikimedia.org\/T99740#4628985\" class=\"phui-tag-view phui-tag-type-shade phui-tag-blue phui-tag-shade phui-tag-icon-view \" data-sigil=\"hovercard\" data-meta=\"0_3\"\u003e\u003cspan class=\"phui-tag-core \"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-anchor\" data-meta=\"0_2\" aria-hidden=\"true\"\u003e\u003c\/span\u003ehttps:\/\/phabricator.wikimedia.org\/T99740#4628985\u003c\/span\u003e\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cp\u003eData here, pretty impressive\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_198\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/v5wmnfiaelrd6nztxd3a\/PHID-FILE-s57znldbv3qchtewuryd\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/daniel\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-indigo \" href=\"\/badges\/view\/14\/\" aria-label=\"Nerd Sniper\" data-sigil=\"has-tooltip\" data-meta=\"0_196\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-empire\" data-meta=\"0_197\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5036325\" id=\"5036325\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_195\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/daniel\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_77\"\u003edaniel\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5036325\" data-sigil=\"has-tooltip\" data-meta=\"0_194\"\u003e\u003cspan class=\"screen-only\"\u003eMar 19 2019, 3:03 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-19 15:03:09 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_192\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_193\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_78\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5036130\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_4\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5036130\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/EvanProdromou\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_7\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@EvanProdromou\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003e\u003ca href=\"https:\/\/phabricator.wikimedia.org\/T99740#4628985\" class=\"phui-tag-view phui-tag-type-shade phui-tag-blue phui-tag-shade phui-tag-icon-view \" data-sigil=\"hovercard\" data-meta=\"0_6\"\u003e\u003cspan class=\"phui-tag-core \"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-anchor\" data-meta=\"0_5\" aria-hidden=\"true\"\u003e\u003c\/span\u003ehttps:\/\/phabricator.wikimedia.org\/T99740#4628985\u003c\/span\u003e\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cp\u003eData here, pretty impressive\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThese are for generating - the more relevant question is how this impacts read performance. Though in practice, it probably doesn't, since it just sits in the op code cache either way.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_210\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_208\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_209\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5051252\" id=\"5051252\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_207\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_79\"\u003eKrinkle\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5051252\" data-sigil=\"has-tooltip\" data-meta=\"0_206\"\u003e\u003cspan class=\"screen-only\"\u003eMar 23 2019, 11:20 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-03-23 23:20:03 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_204\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_205\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_80\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5021141\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_8\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5021141\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Nikerabbit\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_12\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Nikerabbit\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eFrom personal experiences, setting up a cache directory with write access from [..] command line scripts [..] and web server simultaneously [..] is not very easy.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eWe do this already for \u003ctt class=\"remarkup-monospaced\"\u003e$wgUploadDirectory\u003c\/tt\u003e (for media uploads by users), and \u003ctt class=\"remarkup-monospaced\"\u003e$wgFileCacheDirectory\u003c\/tt\u003e (for the "FileCache" feature which stores HTTP responses), and \u003ctt class=\"remarkup-monospaced\"\u003e$wgTmpDirectory\u003c\/tt\u003e. Should be simple enough to do the same for \u003ctt class=\"remarkup-monospaced\"\u003e$wgCacheDirectory\u003c\/tt\u003e.\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5036130\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_10\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5036130\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/EvanProdromou\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_13\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@EvanProdromou\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003e\u003ca href=\"\/T99740#4628985\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_9\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT99740#4628985\u003c\/span\u003e\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cp\u003eData here, pretty impressive\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThe impact of switching the default will be even bigger. The above comparison was for WMF, between the CDB file format it currently uses, and the static PHP array file format it will be using next.\u003c\/p\u003e\n\n\u003cp\u003eThe MediaWiki default currently, however, is not any local file format (not JSON, CDB, or PHP array). The MediaWiki default is to store localisation cache in a relational database table. The cost of writing and reading from the database is significantly more expensive than pretty much any kind of local file.\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5036115\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_11\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5036115\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/EvanProdromou\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_14\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@EvanProdromou\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eIt seems like this would be a change that would break at least some upgrades [..]\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThe various LCStore backends MediaWiki supports (SQL, JSON, PHP, CDB) already have their readers and writers ship with MediaWiki core, and are compatible with all run-times and platforms MediaWiki itself supports.\u003c\/p\u003e\n\n\u003cp\u003eIn fact, for many third-party wikis, localisation cache already defaults to being stored on disk instead of a relational database. This is because the LCStore system automatically detects if you have \u003ctt class=\"remarkup-monospaced\"\u003e$wgCacheDirectory\u003c\/tt\u003e configured in LocalSettings.php. If you do, then LCStore (as various other systems in MediaWiki) automatically start using it.\u003c\/p\u003e\n\n\u003cp\u003eThis task is about enabling \u003ctt class=\"remarkup-monospaced\"\u003e$wgCacheDirectory\u003c\/tt\u003e by default so that it isn't just for third-party admins that read \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/Manual:Performance_tuning\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003ePerformance tuning manual\u003c\/a\u003e, or \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/User:Ilmari_Karonen\/Performance_tuning#Optimize_interface_messages\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003eKaronen's guide\u003c\/a\u003e, or \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/User:Aaron_Schulz\/How_to_make_MediaWiki_fast\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003eAaron's guide\u003c\/a\u003e.\u003c\/p\u003e\n\n\u003cp\u003eSwitching between backends, either by site administrator choice in configuration, or by automatic discovery, or by changing the default, has no impact on anything outside LCStore. It just works. Other parts of core and extensions interact with the localisation cache through a generic interface \u2013 neutral to the currently configured backend.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_219\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/kd4xv6kmiqlmbg5i3ynf\/PHID-FILE-q756a47n7hkxmwqviotl\/profile-profile.jpg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/aaron\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5094863\" id=\"5094863\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_218\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/aaron\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_82\"\u003eaaron\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5094863\" data-sigil=\"has-tooltip\" data-meta=\"0_217\"\u003e\u003cspan class=\"screen-only\"\u003eApr 8 2019, 6:09 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-08 18:09:19 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_215\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_216\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_81\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eHave you compared LCStore with sqlite (as defined by the current installer) vs cdb?\u003c\/p\u003e\n\n\u003cp\u003eI think making $wgCacheDirectory mandatory and writable\/readable in the installer would be a start, in any case.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell phui-timeline-green\" data-sigil=\"transaction anchor-container\" data-meta=\"0_230\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_228\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_229\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5124420\" id=\"5124420\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill fill-has-color phui-timeline-icon-fill-green\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user phui-timeline-icon\" data-meta=\"0_227\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_83\"\u003eKrinkle\u003c\/a\u003e claimed this task.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5124420\" data-sigil=\"has-tooltip\" data-meta=\"0_226\"\u003e\u003cspan class=\"screen-only\"\u003eApr 18 2019, 11:23 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-18 23:23:22 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_224\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_225\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_84\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eAssigning to self, to do perf comparison for page view reads with a local install. Comparing the stock default of a db table on sqlite, vs cdb vs static-array. This is an interesting comparison because unlike for MySQL, sqlite would technically be a local disk read just as a file-based l10n cache would be. I would imagine the static array read to be far more efficient (which is the one we proposed). I can still compare cdb file open-read perf between sqlite3 file open-read performance, though.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_233\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5124422\" id=\"5124422\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-link phui-timeline-icon\" data-meta=\"0_232\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_85\"\u003eKrinkle\u003c\/a\u003e edited projects, added \u003ca href=\"\/tag\/performance-team\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_86\"\u003ePerformance-Team\u003c\/a\u003e; removed \u003ca href=\"\/project\/view\/2923\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_87\"\u003ePerformance-Team (Radar)\u003c\/a\u003e.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5124422\" data-sigil=\"has-tooltip\" data-meta=\"0_231\"\u003e\u003cspan class=\"screen-only\"\u003eApr 18 2019, 11:23 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-18 23:23:38 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_236\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/bxdymb7zqtipuiytbor5\/PHID-FILE-hh7qwoflwjmrunovgr5a\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jdforrester-WMF\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5124442\" id=\"5124442\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_235\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jdforrester-WMF\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_88\"\u003eJdforrester-WMF\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5124442\" data-sigil=\"has-tooltip\" data-meta=\"0_234\"\u003e\u003cspan class=\"screen-only\"\u003eApr 18 2019, 11:26 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-18 23:26:03 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell phui-timeline-green\" data-sigil=\"transaction anchor-container\" data-meta=\"0_239\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5131858\" id=\"5131858\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill fill-has-color phui-timeline-icon-fill-green\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-arrow-right phui-timeline-icon\" data-meta=\"0_238\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_89\"\u003eKrinkle\u003c\/a\u003e triaged this task as \u003cspan class=\"phui-timeline-value\"\u003eMedium\u003c\/span\u003e priority.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5131858\" data-sigil=\"has-tooltip\" data-meta=\"0_237\"\u003e\u003cspan class=\"screen-only\"\u003eApr 23 2019, 5:40 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-23 17:40:00 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_242\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/abnv6m2xoqjroqyladvh\/PHID-FILE-yryhnwq73gr36rjgrz4m\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Gilles\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5132245\" id=\"5132245\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-columns phui-timeline-icon\" data-meta=\"0_241\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Gilles\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_90\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Gilles\u003c\/a\u003e moved this task from \u003ca href=\"\/project\/board\/1212\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_91\"\u003eInbox, needs triage\u003c\/a\u003e to \u003ca href=\"\/project\/board\/1212\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_92\"\u003eBacklog: Maintenance, non-prioritized\u003c\/a\u003e on the \u003ca href=\"\/tag\/performance-team\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_93\"\u003ePerformance-Team\u003c\/a\u003e board.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5132245\" data-sigil=\"has-tooltip\" data-meta=\"0_240\"\u003e\u003cspan class=\"screen-only\"\u003eApr 23 2019, 7:45 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-23 19:45:23 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_245\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5132325\" id=\"5132325\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-columns phui-timeline-icon\" data-meta=\"0_244\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_94\"\u003eKrinkle\u003c\/a\u003e moved this task from \u003ca href=\"\/project\/board\/1212\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_95\"\u003eBacklog: Maintenance, non-prioritized\u003c\/a\u003e to \u003ca href=\"\/project\/board\/1212\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_96\"\u003eTo-do: Goals, prioritized next 4 Quarters\u003c\/a\u003e on the \u003ca href=\"\/tag\/performance-team\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_97\"\u003ePerformance-Team\u003c\/a\u003e board.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5132325\" data-sigil=\"has-tooltip\" data-meta=\"0_243\"\u003e\u003cspan class=\"screen-only\"\u003eApr 23 2019, 8:06 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-23 20:06:22 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_257\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_255\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_256\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5138303\" id=\"5138303\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_254\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_98\"\u003eKrinkle\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5138303\" data-sigil=\"has-tooltip\" data-meta=\"0_253\"\u003e\u003cspan class=\"screen-only\"\u003eApr 25 2019, 5:26 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-25 17:26:07 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_251\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_252\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_99\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003ch3 class=\"remarkup-header\"\u003eTest cases\u003c\/h3\u003e\n\n\u003cp\u003eThree performance costs around writing to \/ reading from the localisation cache:\u003c\/p\u003e\n\n\u003col class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003ePopulate LCStore for 1 language. \u2013 This is what happens on most third-party wikis, whenever a user first visits the wiki in a given language after a site admin has upgraded MediaWiki and purged the server caches. This represents the amount of time a user page view can be delayed by.\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cp\u003eI measure this by running \u003ctt class=\"remarkup-monospaced\"\u003eupdate.php\u003c\/tt\u003e to purge all object caches, truncating the \u003ctt class=\"remarkup-monospaced\"\u003el10n_cache\u003c\/tt\u003e table, and clearing the \u003ctt class=\"remarkup-monospaced\"\u003etmp\u003c\/tt\u003e directory. Then, run \u003ctt class=\"remarkup-monospaced\"\u003ephp maintenance\/rebuildLocalisationCache.php --lang de\u003c\/tt\u003e to populate the cache for one language.\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003col class=\"remarkup-list\" start=\"2\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003ePopulate LCStore for all languages. \u2013 This is what happens on large-scale wiki farms like WMF, which populate the cache for all languages at once as part of the deployment process.\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cp\u003eMeasured similar to 1, except running \u003ctt class=\"remarkup-monospaced\"\u003ephp maintenance\/rebuildLocalisationCache.php\u003c\/tt\u003e for all languages (no lang param), and with threads=4.\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003col class=\"remarkup-list\" start=\"3\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eMeasure TTFB from loading the main page . \u2013\u00a0This measures the time it takes to read localisation messages from LCStore. This is the most important one and represents the cost applied to all page views after the server caches have been populated.\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cp\u003eMeasured by generating all languages first, then running \u003ctt class=\"remarkup-monospaced\"\u003eupdate.php\u003c\/tt\u003e to purge object caches, and then viewing one page. In between page views, running \u003ctt class=\"remarkup-monospaced\"\u003eupdate.php\u003c\/tt\u003e again to purge object caches.\u003c\/p\u003e\n\n\u003cp\u003eThis because LCStore has another layer of caching on top from MessageCache, which uses db-objectcache as "clusterCache" by default. The MessageCache also has optional WANObjectCache (disabled by default) and llocalServerCache (APC) also disabled by default (wgUseLocalMessageCache).\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003ch4 class=\"remarkup-header\"\u003eEnvironment\u003c\/h4\u003e\n\n\u003cp\u003eFrom \u003ca href=\"https:\/\/github.com\/addshore\/mediawiki-docker-dev\/tree\/f12a8f9fc162cbb8190bacf2cfecc7fcb5f48dd3\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003eaddshore\/mediawiki-docker-dev\u003c\/a\u003e (master at \u003ctt class=\"remarkup-monospaced\"\u003ef12a8f9\u003c\/tt\u003e). Using PHP setting \u003ctt class=\"remarkup-monospaced\"\u003eRUNTIMEVERSION=7.2\u003c\/tt\u003e, on Docker for Mac, with 4 CPU cores given to Docker \u2013 verified on the guest via \u003ctt class=\"remarkup-monospaced\"\u003epython; import multiprocessing multiprocessing.cpu_count()\u003c\/tt\u003e.\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003emw\/core at \u003ca href=\"\/rMW6b89deff202b6b89d671b5da6beb04cd75f179ab\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_15\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003e6b89deff202b6b89d671b5da6beb04cd75f179ab\u003c\/span\u003e\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003emw\/skins\/Vector at \u003ca href=\"\/rSVEC0ce056c909aa0e7d4c43faaafac3baa78b6928f2\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_16\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003e0ce056c909aa0e7d4c43faaafac3baa78b6928f2\u003c\/span\u003e\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003emw\/ext\/Cite at \u003ca href=\"\/rECITc663a136dffadc3a1936946bd8a104a5841cddbf\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_17\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003ec663a136dffadc3a1936946bd8a104a5841cddbf\u003c\/span\u003e\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003emw\/ext\/Gadgets at \u003ca href=\"\/rEGADd9fab0989f3a58c9e52f592314c5ed5d86451bb3\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_18\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003ed9fab0989f3a58c9e52f592314c5ed5d86451bb3\u003c\/span\u003e\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003emw\/ext\/Interwiki at \u003ca href=\"\/rECTR5e13de9b57a77e95bae8f6660c53d826e948a9a6\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_19\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003e5e13de9b57a77e95bae8f6660c53d826e948a9a6\u003c\/span\u003e\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003emw\/ext\/ParserFunctions at \u003ca href=\"\/rEPFNed461b1065935160fbe3d6fea7e303ebeefa429d\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_20\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eed461b1065935160fbe3d6fea7e303ebeefa429d\u003c\/span\u003e\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003emw\/ext\/WikiEditor at \u003ca href=\"\/rEWED772f461eb428d59ac1de3b548ef6feabb8aabf6c\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_21\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003e772f461eb428d59ac1de3b548ef6feabb8aabf6c\u003c\/span\u003e\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003emw\/ext\/CategoryTree at \u003ca href=\"\/rECTR5e13de9b57a77e95bae8f6660c53d826e948a9a6\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_22\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003e5e13de9b57a77e95bae8f6660c53d826e948a9a6\u003c\/span\u003e\u003c\/a\u003e.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"php\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest A - LCStore as database table (current MW stock default)\u003c\/div\u003e\u003cpre class=\"remarkup-code\" style=\" max-height: 12em; overflow: auto;\"\u003e\u003cspan class=\"c\"\u003e# This let's MediaWiki core decide,\u003c\/span\u003e\n\u003cspan class=\"c\"\u003e# The stock default it picks is to use a "l10n_cache" database table.\u003c\/span\u003e\n\u003cspan class=\"c\"\u003e# -------\u003c\/span\u003e\n\n\u003cspan class=\"c\"\u003e# Database (from mdd\/LocalSettings)\u003c\/span\u003e\n\u003cspan class=\"c\"\u003e\/\/ [mysql database settings]\u003c\/span\u003e\n\n\u003cspan class=\"c\"\u003e# Database (from core\/DevelopmentSettings)\u003c\/span\u003e\n\u003cspan class=\"nv\"\u003e$wgSQLMode\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"s1\"\u003e'TRADITIONAL'\u003c\/span\u003e\u003cspan class=\"o\"\u003e;\u003c\/span\u003e \u003cspan class=\"c\"\u003e\/\/ strict mode\u003c\/span\u003e\n\n\u003cspan class=\"c\"\u003e# Disk (from mdd\/LocalSettings)\u003c\/span\u003e\n\u003cspan class=\"nv\"\u003e$wgTmpDirectory\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"s2\"\u003e"{$wgUploadDirectory}\/tmp"\u003c\/span\u003e\u003cspan class=\"o\"\u003e;\u003c\/span\u003e\n\n\u003cspan class=\"c\"\u003e# Language (from mdd\/LocalSettings)\u003c\/span\u003e\n\u003cspan class=\"nv\"\u003e$wgLanguageCode\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"s2\"\u003e"en"\u003c\/span\u003e\u003cspan class=\"o\"\u003e;\u003c\/span\u003e\n\n\u003cspan class=\"c\"\u003e# Extensions (from my own LocalSettings)\u003c\/span\u003e\n\u003cspan class=\"nf\" data-symbol-name=\"wfLoadSkin\"\u003ewfLoadSkin\u003c\/span\u003e\u003cspan class=\"o\"\u003e(\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'Vector'\u003c\/span\u003e\u003cspan class=\"o\"\u003e);\u003c\/span\u003e\n\u003cspan class=\"nf\" data-symbol-name=\"wfLoadExtension\"\u003ewfLoadExtension\u003c\/span\u003e\u003cspan class=\"o\"\u003e(\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'Cite'\u003c\/span\u003e\u003cspan class=\"o\"\u003e);\u003c\/span\u003e\n\u003cspan class=\"nf\" data-symbol-name=\"wfLoadExtension\"\u003ewfLoadExtension\u003c\/span\u003e\u003cspan class=\"o\"\u003e(\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'Gadgets'\u003c\/span\u003e\u003cspan class=\"o\"\u003e);\u003c\/span\u003e\n\u003cspan class=\"nf\" data-symbol-name=\"wfLoadExtension\"\u003ewfLoadExtension\u003c\/span\u003e\u003cspan class=\"o\"\u003e(\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'Interwiki'\u003c\/span\u003e\u003cspan class=\"o\"\u003e);\u003c\/span\u003e\n\u003cspan class=\"nf\" data-symbol-name=\"wfLoadExtension\"\u003ewfLoadExtension\u003c\/span\u003e\u003cspan class=\"o\"\u003e(\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'ParserFunctions'\u003c\/span\u003e\u003cspan class=\"o\"\u003e);\u003c\/span\u003e\n\u003cspan class=\"nf\" data-symbol-name=\"wfLoadExtension\"\u003ewfLoadExtension\u003c\/span\u003e\u003cspan class=\"o\"\u003e(\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'WikiEditor'\u003c\/span\u003e\u003cspan class=\"o\"\u003e);\u003c\/span\u003e\n\u003cspan class=\"nf\" data-symbol-name=\"wfLoadExtension\"\u003ewfLoadExtension\u003c\/span\u003e\u003cspan class=\"o\"\u003e(\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'CategoryTree'\u003c\/span\u003e\u003cspan class=\"o\"\u003e);\u003c\/span\u003e\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"php\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest B - LCStore as CDB on disk (current WMF use)\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003e\u003cspan class=\"c\"\u003e# Change $wgCacheDirectory from the default false to a writable tmp directory.\u003c\/span\u003e\n\u003cspan class=\"c\"\u003e# With this in place, MediaWiki automatically starts using a disk-based LCStore\u003c\/span\u003e\n\u003cspan class=\"c\"\u003e# instead of in the database. The file format it currently picks is CDB.\u003c\/span\u003e\n\n\u003cspan class=\"nv\"\u003e$wgCacheDirectory\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"nv\"\u003e$wgTmpDirectory\u003c\/span\u003e\u003cspan class=\"o\"\u003e;\u003c\/span\u003e\n\n\u003cspan class=\"c\"\u003e# \u2026 rest same as Test A\u003c\/span\u003e\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"php\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest C - LCStore as static array on disk (proposed)\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003e\u003cspan class=\"nv\"\u003e$wgCacheDirectory\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"nv\"\u003e$wgTmpDirectory\u003c\/span\u003e\u003cspan class=\"o\"\u003e;\u003c\/span\u003e\n\u003cspan class=\"nv\"\u003e$wgLocalisationCacheConf\u003c\/span\u003e\u003cspan class=\"o\"\u003e[\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'store'\u003c\/span\u003e\u003cspan class=\"o\"\u003e]\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"s1\"\u003e'array'\u003c\/span\u003e\u003cspan class=\"o\"\u003e;\u003c\/span\u003e\n\n\u003cspan class=\"c\"\u003e# \u2026 rest same as Test A\u003c\/span\u003e\u003c\/pre\u003e\u003c\/div\u003e\n\n\n\n\u003ch4 class=\"remarkup-header\"\u003eResults\u003c\/h4\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eRaw results\u003c\/div\u003e\u003cpre class=\"remarkup-code\" style=\" max-height: 12em; overflow: auto;\"\u003e\n## Results A1 (database table \/ one language)\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m3.782s\nuser\t0m0.560s\nsys\t0m0.310s\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m4.000s\nuser\t0m0.630s\nsys\t0m0.330s\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m3.981s\nuser\t0m0.510s\nsys\t0m0.450s\n\n## Results A2 (database table \/ all languages)\n\nRebuilding...\nreal\t1m51.781s\nuser\t1m34.650s\nsys\t1m0.540s\n\nRebuilding...\nreal\t1m47.267s\nuser\t1m32.090s\nsys\t0m57.790s\n\nRebuilding...\nreal\t1m33.337s\nuser\t0m44.470s\nsys\t0m26.440s\n\n## Results A3 (database table \/ page load)\n\nresponseStart: 2013.925 ms\nresponseStart: 2049.880 ms\nresponseStart: 2049.881 ms\n\n## Results B1 (CDB files \/ one language)\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m4.630s\nuser\t0m1.310s\nsys\t0m0.720s\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m4.635s\nuser\t0m1.280s\nsys\t0m0.800s\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m4.391s\nuser\t0m1.140s\nsys\t0m0.800s\n\n## Results B2 (CDB files \/ all languages)\n\nRebuilding..\nreal\t4m10.834s\nuser\t8m35.780s\nsys\t5m52.070s\n\nRebuilding..\nreal\t4m20.847s\nuser\t9m4.440s\nsys\t6m3.750s\n\nRebuilding...\nreal\t4m16.865s\nuser\t8m50.060s\nsys\t5m56.830s\n\n## Results B3 (CDB files \/ page load)\n\nresponseStart: 1853.005 ms\nresponseStart: 1907.499 ms\nresponseStart: 1869.214 ms\n\n## Results C1 (static array files \/ one language)\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m3.118s\nuser\t0m0.400s\nsys\t0m0.220s\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m3.161s\nuser\t0m0.320s\nsys\t0m0.290s\n\nRebuilding de... 1 languages rebuilt out of 1\nreal\t0m3.041s\nuser\t0m0.350s\nsys\t0m0.280s\n\n## Results C2 (static array files \/ all languages)\n\nRebuilding...\nreal\t1m13.084s\nuser\t1m35.640s\nsys\t1m17.810s\n\nRebuilding...\nreal\t1m13.043s\nuser\t1m37.700s\nsys\t1m14.950s\n\nRebuilding...\nreal\t1m10.789s\nuser\t1m35.650s\nsys\t1m11.540s\n\n## Results C3 (static array files \/ page load)\n\nresponseStart: 1771.395 ms\nresponseStart: 1628.985 ms\nresponseStart: 1809.974 ms\u003c\/pre\u003e\u003c\/div\u003e\n\n\n\n\u003cdiv class=\"remarkup-table-wrap\"\u003e\u003ctable class=\"remarkup-table\"\u003e\n\u003ctr\u003e\u003ctd\u003eTest case \/ LCStore\u003c\/td\u003e\u003cth\u003eA (database table, current MW default)\u003c\/th\u003e\u003cth\u003eB (CDB files, current WMF)\u003c\/th\u003e\u003cth\u003eC (static array files, proposed)\u003c\/th\u003e\u003c\/tr\u003e\n\u003ctr\u003e\u003cth\u003e1 (Populate 1 language)\u003c\/th\u003e\u003ctd\u003e3.782s, 4.000s, 3.981s\u003c\/td\u003e\u003ctd\u003e4.630s, 4.635s, 4.391s \u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-arrow-circle-o-up red\" data-meta=\"0_26\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/td\u003e\u003ctd\u003e3.118s, 3.161s, 3.041s \u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-arrow-circle-o-down green\" data-meta=\"0_27\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\u003ctr\u003e\u003cth\u003e2 (Populate all languages)\u003c\/th\u003e\u003ctd\u003e1m51s, 1m47s, 1m33s\u003c\/td\u003e\u003ctd\u003e4m10s, 4m20s, 4m16s \u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-arrow-circle-o-up red\" data-meta=\"0_28\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/td\u003e\u003ctd\u003e1m13s, 1m13s, 1m10s \u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-arrow-circle-o-down green\" data-meta=\"0_29\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\u003ctr\u003e\u003cth\u003e3 (Page load time)\u003c\/th\u003e\u003ctd\u003e2013 ms, 2049 ms, 2049 ms\u003c\/td\u003e\u003ctd\u003e1853 ms, 1907 ms, 1869 ms \u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-arrow-circle-o-down green\" data-meta=\"0_30\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/td\u003e\u003ctd\u003e1771 ms, 1628 ms, 1809 ms \u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-arrow-circle-o-down green\" data-meta=\"0_31\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\u003ctr\u003e\u003c\/tr\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\n\u003cp\u003eThe most important one for end-users is the page load time as that cost may be paid by users on any page view, as opposed to only when upgrading the site. Both of the disk-based caches came out better than the database table, thus confirming out hypothesis.\u003c\/p\u003e\n\n\u003cp\u003eAmong the two file formats for on-disk caching, the the static array file format came out better than the CDB file format. This matches our expectation and tests we ran in 2015 in WMF production when we first started the migration from CDB files to PHP files (\u003ca href=\"\/T212460\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_23\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT212460\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/T99740\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_24\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT99740\u003c\/span\u003e\u003c\/a\u003e). We've completed most of that migration in WMF production. The only remaining disk-based caching we have that isn't yet using static arrays instead of CDB is the localisation cache.\u003c\/p\u003e\n\n\u003cp\u003eThe comparison between CDB and static arrays for populating the caches (for site admins during upgrades and deployments) also came out as expected and matching our 2015 tests, favouring the static array format.\u003c\/p\u003e\n\n\u003cp\u003eThe surprising bit to me, although not particularly important for this task, is that the CDB files were much slower to fill than the database tables (4 minutes vs 1 minute). This is a good reason to stick with our proposal to switch from database tables toward static array files, and never use CDB files by default for third parties.\u003c\/p\u003e\n\n\u003cp\u003eAt WMF the cost of slowly generating CDB files (over db tables) was justified many years ago because our focus is on the end user and the page load performance. We're happy to pay a few minutes during deployment so as to not require database load for localisation messages. Having said that, once we switch from CDB to static array files at WMF as well, it'll be nice to know our deployment process will likely be much faster. The ticket for that is \u003ca href=\"\/T99740\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_25\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT99740\u003c\/span\u003e\u003c\/a\u003e.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_269\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_267\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_268\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5138344\" id=\"5138344\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_266\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_100\"\u003eKrinkle\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5138344\" data-sigil=\"has-tooltip\" data-meta=\"0_265\"\u003e\u003cspan class=\"screen-only\"\u003eApr 25 2019, 5:42 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-25 17:42:15 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_263\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_264\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_101\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eNext step here is deciding what \u003ctt class=\"remarkup-monospaced\"\u003e$wgCacheDirectory\u003c\/tt\u003e should default to. Note that in order to uphold our current guarantees to third parties, this directory must vary by wiki or be within the installation path.\u003c\/p\u003e\n\n\u003cp\u003eIt must vary by wiki, because there can be multiple wikis on the same server that each have similar but incompatible extension installed. At WMF, we explicitly don't support this and thus share our cache directory between wikis as optimisation (thus sharing computed cache files much better), but we can't do that for MW default. This isn't a big deal, because we're going from no caching to some caching, so it's an improvement either way.\u003c\/p\u003e\n\n\u003cp\u003eThere's a few candidates we can pick from:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ctt class=\"remarkup-monospaced\"\u003e$wgTmpDirectory\u003c\/tt\u003e \u2013 we can rely on this to be a writable path, used for lots of ad-hoc purposes currently. We should carve out a sub directory under this, because it is set to a system-wide directory by default. E.g. \u003ctt class=\"remarkup-monospaced\"\u003e$tmpDir\/mw-cache\u003c\/tt\u003e.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ctt class=\"remarkup-monospaced\"\u003e$wgUploadDirectory\u003c\/tt\u003e - we can rely on this to be a writable path, already used for HTML-FileCache (\u003ctt class=\"remarkup-monospaced\"\u003e$wgFileCacheDirectory\u003c\/tt\u003e) and for \u003ctt class=\"remarkup-monospaced\"\u003e$wgReadOnlyFile\u003c\/tt\u003e. Adding \u003ctt class=\"remarkup-monospaced\"\u003ewgCacheDirectory\u003c\/tt\u003e to that, seems straight forward and should naturally deal with the by-version\/by-wiki variance. On wiki farms, site admins already have this set to vary accordingly.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eConcerns, preferences, other ideas?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_278\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/kd4xv6kmiqlmbg5i3ynf\/PHID-FILE-q756a47n7hkxmwqviotl\/profile-profile.jpg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/aaron\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5141353\" id=\"5141353\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_277\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/aaron\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_102\"\u003eaaron\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5141353\" data-sigil=\"has-tooltip\" data-meta=\"0_276\"\u003e\u003cspan class=\"screen-only\"\u003eApr 26 2019, 7:44 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-26 19:44:31 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_274\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_275\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_103\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eDid you try sqlite LCStore (with journal_mode = WAL and synchronous = NORMAL? like the installer uses)?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_287\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/chvngxnqoko6t3z6hc6b\/PHID-FILE-apmfbzbqf4i24fx5ac7l\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Nikerabbit\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5142248\" id=\"5142248\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_286\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Nikerabbit\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_104\"\u003eNikerabbit\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5142248\" data-sigil=\"has-tooltip\" data-meta=\"0_285\"\u003e\u003cspan class=\"screen-only\"\u003eApr 28 2019, 8:04 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-04-28 08:04:33 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_283\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_284\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_105\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eDid the CDB test use the PHP CDB implementation or the implementation using dba_* functions?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_299\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_297\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_298\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5157534\" id=\"5157534\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_296\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_106\"\u003eKrinkle\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5157534\" data-sigil=\"has-tooltip\" data-meta=\"0_295\"\u003e\u003cspan class=\"screen-only\"\u003eMay 4 2019, 5:50 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-04 17:50:17 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_293\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_294\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_107\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5142248\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_32\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5142248\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Nikerabbit\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_33\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Nikerabbit\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eDid the CDB test use the PHP CDB implementation or the implementation using dba_* functions?\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eAye, this was with php72 as provided by the \u003ca href=\"https:\/\/github.com\/docker-library\/php\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003ephp:7.2\u003c\/a\u003e image on DockerHub, used via webdevops' php-nginx image, via \u003ca href=\"https:\/\/github.com\/addshore\/mediawiki-docker-dev\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003eMDD: mediawiki-docker-dev\u003c\/a\u003e. And that installs php without \u003ctt class=\"remarkup-monospaced\"\u003e--with-cdb\u003c\/tt\u003e or \u003ctt class=\"remarkup-monospaced\"\u003e--with-dba=shared\u003c\/tt\u003e. I've confirmed via \u003ctt class=\"remarkup-monospaced\"\u003emwscript eval.php\u003c\/tt\u003e that \u003ctt class=\"remarkup-monospaced\"\u003eCdb\\Writer::open( '\/tmp\/foo.cdb' );\u003c\/tt\u003e on this installation results in a \u003ctt class=\"remarkup-monospaced\"\u003eCdb\\Writer\\PHP\u003c\/tt\u003e instance.\u003c\/p\u003e\n\n\u003cp\u003eI'm curious whether it's generally common for third-parties to lack this as well.\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eDebian 9 Stretch: php 7.0, without dba functions.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eDebian 10 Buster: php 7.3, without dba functions.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eUbuntu 16.04 Xenial, php 7.0, without dba functions.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eUbuntu 18.04 Bionic, php 7.2, without dba functions.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"console\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eLog\u003c\/div\u003e\u003cpre class=\"remarkup-code\" style=\" max-height: 12em; overflow: auto;\"\u003e\u003cspan class=\"gp\"\u003e$ docker run --rm -i -t debian:stretch sh -c "bash"\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# apt-get update \u2026\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# apt-get install php \u2026 php7.0 (7.0.33-0+deb9u3)\u003c\/span\u003e\n\u003cspan class=\"go\"\u003ephp -a\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e> var_dump(dba_handlers());\u003c\/span\u003e\n\u003cspan class=\"go\"\u003eUncaught Error: Call to undefined function dba_handlers()\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e\u003c\/span\u003e\n\u003cspan class=\"gp\"\u003e$ docker run --rm -i -t debian:buster sh -c "bash"\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# apt-get update \u2026\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# apt-get install php \u2026 php7.3 (7.3.4-2)\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# php -a\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e> var_dump(dba_handlers());\u003c\/span\u003e\n\u003cspan class=\"go\"\u003eUncaught Error: Call to undefined function dba_handlers()\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e\u003c\/span\u003e\n\u003cspan class=\"gp\"\u003e$ docker run --rm -i -t ubuntu:16.04 sh -c "bash"\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# apt-get update \u2026\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# apt-get install php \u2026 php7.0 (7.0.33-0ubuntu0.16.04.3)\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# php -a\u003c\/span\u003e\n\u003cspan class=\"go\"\u003ephp > var_dump(dba_handlers());\u003c\/span\u003e\n\u003cspan class=\"go\"\u003eUncaught Error: Call to undefined function dba_handlers()\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e\u003c\/span\u003e\n\u003cspan class=\"gp\"\u003e$ docker run --rm -i -t ubuntu:18.04 sh -c "bash"\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# apt-get update \u2026\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# apt-get install php \u2026 php7.2 (7.2.17-0ubuntu0.18.04.1)\u003c\/span\u003e\n\u003cspan class=\"go\"\u003e# php -a\u003c\/span\u003e\n\u003cspan class=\"go\"\u003ephp > var_dump(dba_handlers());\u003c\/span\u003e\n\u003cspan class=\"go\"\u003eUncaught Error: Call to undefined function dba_handlers()\u003c\/span\u003e\u003c\/pre\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_310\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_308\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_309\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5157561\" id=\"5157561\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_307\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_108\"\u003eKrinkle\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5157561\" data-sigil=\"has-tooltip\" data-meta=\"0_306\"\u003e\u003cspan class=\"screen-only\"\u003eMay 4 2019, 6:41 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-04 18:41:51 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_304\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_305\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_109\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5142248\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_34\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5142248\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Nikerabbit\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_37\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Nikerabbit\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eDid the CDB test use the PHP CDB implementation or the implementation using dba_* functions?\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThese are not installed by default on popular distros per \u003ca href=\"\/T218207#5157534\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_35\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5157534\u003c\/span\u003e\u003c\/a\u003e. However, the native is indeed known to be faster.\u003c\/p\u003e\n\n\u003cp\u003eIn the unlikely event that Cdb-Dba (as opposed to Cdb-Php) is also faster than StaticArray, I still do not think we default to "Cdb" over "StaticArray" as that would mean for most wikis it would be slow by default. If an administrator is customising their environment by installing php7.2-dba and wants to use Cdb for MW, they can still set \u003ctt class=\"remarkup-monospaced\"\u003e$wgLocalisationCacheConf['store'] = 'cdb';\u003c\/tt\u003e. Which is actually what those administrators would already be doing today. We're only changing the default. We are not removing support for anything.\u003c\/p\u003e\n\n\u003cp\u003eAnyhow, here's a comparison, same methods and environment as per \u003ca href=\"\/T218207#5138303\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_36\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5138303\u003c\/span\u003e\u003c\/a\u003e. I'm re-testing Cdb-Php and StaticArray here to give it a fresh baseline, because absolute numbers may no longer compare.\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003e\u003cstrong\u003eCdb-Php\u003c\/strong\u003e\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest: Page load time\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003eresponseStart: 2762 ms, 3298 ms, 3004 ms\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest: Deploy one language\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003ereal\t0m4.832s, 0m4.939s, 0m4.881s\u003c\/pre\u003e\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThe Dba functions were installed by using \u003ctt class=\"remarkup-monospaced\"\u003edocker-php-ext-install dba\u003c\/tt\u003e. Confirmed by \u003ctt class=\"remarkup-monospaced\"\u003edba_handlers()\u003c\/tt\u003e from eval.\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003e\u003cstrong\u003eCdb-Dba\u003c\/strong\u003e\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest: Page load time\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003eresponseStart: 2504 ms, 3078 ms, 3149 ms\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest: Deploy one language\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003ereal\t0m3.298s, 0m3.225s, 0m3.015s\u003c\/pre\u003e\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003e\u003cstrong\u003eStaticArray\u003c\/strong\u003e\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest: Page load time\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003eresponseStart: 2546 ms, 2728 ms, 2753 ms\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest: Deploy one language\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003ereal\t0m3.322s, 0m3.224s, 0m3.055s\u003c\/pre\u003e\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eCdb-Dba is faster than Cdb-Php both for writing and for reading cache values, as expected.\u003c\/p\u003e\n\n\u003cp\u003eCompared to StaticArray, Cdb-Dba is on-par on both accounts. Cdb-Dba has more outliers for user-perceived metrics, and StaticArray has one outlier for the deploy runtime. Both both had the same range of values. And in any case, we cannot assume Dba to be installed, so StaticArray remains the better choice as our default. It also helps generally, I think, whenever we can use the WMF production setting as MW default, as third-parties then benefit all optimisations and resources dedicated to its maintenance and performance.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_321\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_319\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_320\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5157583\" id=\"5157583\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_318\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_110\"\u003eKrinkle\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5157583\" data-sigil=\"has-tooltip\" data-meta=\"0_317\"\u003e\u003cspan class=\"screen-only\"\u003eMay 4 2019, 7:14 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-04 19:14:44 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_315\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_316\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_111\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5141353\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_38\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5141353\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/aaron\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_39\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@aaron\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eDid you try sqlite LCStore (with journal_mode = WAL and synchronous = NORMAL? like the installer uses)?\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eInteresting. In the specific case of SQLite, "cache in database" and "cache on disk" are effectively both use the disk. Some quick comparisons using \u003ca href=\"https:\/\/wikitech.wikimedia.org\/wiki\/Performance\/Fresnel#Quick_MediaWiki\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003eQuick MediaWiki\u003c\/a\u003e to install MediaWiki with SQLite (macOS, on-disk \u003ctt class=\"remarkup-monospaced\"\u003e\/private\/tmp\/quickmw\u003c\/tt\u003e, PHP 7.1.26 from Homebrew).\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003e\u003cstrong\u003eSQLite\u003c\/strong\u003e (default installation)\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"php\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eLocalSettings.php (generated)\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003e\u003cspan class=\"nv\"\u003e$wgLocalisationCacheConf\u003c\/span\u003e\u003cspan class=\"o\"\u003e[\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'storeServer'\u003c\/span\u003e\u003cspan class=\"o\"\u003e]\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"o\"\u003e[\u003c\/span\u003e\n\t\u003cspan class=\"s1\"\u003e'type'\u003c\/span\u003e \u003cspan class=\"o\"\u003e=>\u003c\/span\u003e \u003cspan class=\"s1\"\u003e'sqlite'\u003c\/span\u003e\u003cspan class=\"o\"\u003e,\u003c\/span\u003e\n\t\u003cspan class=\"s1\"\u003e'dbname'\u003c\/span\u003e \u003cspan class=\"o\"\u003e=>\u003c\/span\u003e \u003cspan class=\"s2\"\u003e"{$wgDBname}_l10n_cache"\u003c\/span\u003e\u003cspan class=\"o\"\u003e,\u003c\/span\u003e\n\t\u003cspan class=\"s1\"\u003e'tablePrefix'\u003c\/span\u003e \u003cspan class=\"o\"\u003e=>\u003c\/span\u003e \u003cspan class=\"s1\"\u003e''\u003c\/span\u003e\u003cspan class=\"o\"\u003e,\u003c\/span\u003e\n\t\u003cspan class=\"s1\"\u003e'variables'\u003c\/span\u003e \u003cspan class=\"o\"\u003e=>\u003c\/span\u003e \u003cspan class=\"o\"\u003e[\u003c\/span\u003e \u003cspan class=\"s1\"\u003e'synchronous'\u003c\/span\u003e \u003cspan class=\"o\"\u003e=>\u003c\/span\u003e \u003cspan class=\"s1\"\u003e'NORMAL'\u003c\/span\u003e \u003cspan class=\"o\"\u003e],\u003c\/span\u003e\n\t\u003cspan class=\"s1\"\u003e'dbDirectory'\u003c\/span\u003e \u003cspan class=\"o\"\u003e=>\u003c\/span\u003e \u003cspan class=\"nv\"\u003e$wgSQLiteDataDir\u003c\/span\u003e\u003cspan class=\"o\"\u003e,\u003c\/span\u003e\n\t\u003cspan class=\"s1\"\u003e'trxMode'\u003c\/span\u003e \u003cspan class=\"o\"\u003e=>\u003c\/span\u003e \u003cspan class=\"s1\"\u003e'IMMEDIATE'\u003c\/span\u003e\u003cspan class=\"o\"\u003e,\u003c\/span\u003e\n\t\u003cspan class=\"s1\"\u003e'flags'\u003c\/span\u003e \u003cspan class=\"o\"\u003e=>\u003c\/span\u003e \u003cspan class=\"mi\"\u003e0\u003c\/span\u003e\n\u003cspan class=\"o\"\u003e];\u003c\/span\u003e\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest: Deploy one language\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003etime php maintenance\/rebuildLocalisationCache.php --lang de --force\nreal\t0m0.404s, 0m0.416s, 0m0.407s\u003c\/pre\u003e\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003e\u003cstrong\u003eStaticArray\u003c\/strong\u003e\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"php\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eLocalSettings.php (appendix)\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003e\u003cspan class=\"nv\"\u003e$wgCacheDirectory\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"nv\"\u003e$wgSQLiteDataDir\u003c\/span\u003e\u003cspan class=\"o\"\u003e;\u003c\/span\u003e\n\u003cspan class=\"nv\"\u003e$wgLocalisationCacheConf\u003c\/span\u003e\u003cspan class=\"o\"\u003e[\u003c\/span\u003e\u003cspan class=\"s1\"\u003e'store'\u003c\/span\u003e\u003cspan class=\"o\"\u003e]\u003c\/span\u003e \u003cspan class=\"o\"\u003e=\u003c\/span\u003e \u003cspan class=\"s1\"\u003e'array'\u003c\/span\u003e\u003cspan class=\"o\"\u003e;\u003c\/span\u003e\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cdiv class=\"remarkup-code-header\"\u003eTest: Deploy one language\u003c\/div\u003e\u003cpre class=\"remarkup-code\"\u003ereal\t0m0.140s, 0m0.156s, 0m0.148s\u003c\/pre\u003e\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eLooks like Static Array beats SQLite as well. We've shown in all previous benchmarks that the "All languages" and "Page load time" use cases always align with the "One language" use case, so I won't bother re-running those. Besides, I don't think this would inform our decision here, as I don't think we should optimise the stock MW default for SQLite against MySQL and other RDBMS'es.\u003c\/p\u003e\n\n\u003cp\u003eIn the unlikely event someone finds that sqlite3-based writing or reading outperforms opcache-backed arrays, it will still work by default, and can be optimised by setting \u003ctt class=\"remarkup-monospaced\"\u003ewgLocalisationCacheConf\u003c\/tt\u003e directly.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_332\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_330\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_331\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5157598\" id=\"5157598\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_329\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_112\"\u003eKrinkle\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5157598\" data-sigil=\"has-tooltip\" data-meta=\"0_328\"\u003e\u003cspan class=\"screen-only\"\u003eMay 4 2019, 9:25 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-04 21:25:47 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_326\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_327\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_113\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5138344\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_40\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5138344\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Krinkle\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_41\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Krinkle\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eNext step here is deciding what \u003ctt class=\"remarkup-monospaced\"\u003e$wgCacheDirectory\u003c\/tt\u003e should default to. [..] There's a few candidates we can pick from:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ctt class=\"remarkup-monospaced\"\u003e$wgTmpDirectory\u003c\/tt\u003e \u2013 we can rely on this to be a writable path, used for [..]\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ctt class=\"remarkup-monospaced\"\u003e$wgUploadDirectory\u003c\/tt\u003e - we can rely on this to be a writable path, already used for [..]\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eConcerns, preferences, other ideas?\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_341\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/chvngxnqoko6t3z6hc6b\/PHID-FILE-apmfbzbqf4i24fx5ac7l\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Nikerabbit\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5160048\" id=\"5160048\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_340\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Nikerabbit\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_114\"\u003eNikerabbit\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5160048\" data-sigil=\"has-tooltip\" data-meta=\"0_339\"\u003e\u003cspan class=\"screen-only\"\u003eMay 6 2019, 2:17 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-06 14:17:37 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_337\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_338\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_115\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eStoring executable files in $wgUploadDirectory which is usually web-accessible sounds scary to me. Sub-directory of $wgTmpDirectory sounds a better option to me. One small thing might be that perhaps $wgUploadDirectory might play better with selinux if it is inside mediawiki installation directory, unlike $wgTmpDirectory. More generally, the concept of "executable code generated during runtime" is now being introduced (or did I miss a precedence?) and probably could benefit from documentation to help people who try to secure MediaWiki deployments or for people doing MediaWiki deployment systems in general.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_353\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/q4xtskw4ul5dvrupkmqs\/PHID-FILE-ezxrezgeehrb4vjobxgz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Krinkle\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" aria-label=\"Continuous Integrator\" data-sigil=\"has-tooltip\" data-meta=\"0_351\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_352\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5160934\" id=\"5160934\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_350\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_116\"\u003eKrinkle\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5160934\" data-sigil=\"has-tooltip\" data-meta=\"0_349\"\u003e\u003cspan class=\"screen-only\"\u003eMay 6 2019, 4:48 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-06 16:48:52 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_347\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_348\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_117\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T218207#5160048\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_42\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT218207#5160048\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Nikerabbit\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_44\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Nikerabbit\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eStoring executable files in $wgUploadDirectory which is usually web-accessible sounds scary to me.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\n\n\u003ch6 class=\"remarkup-header\"\u003e1: Re-use wgUploadDirectory\u003c\/h6\u003e\n\n\u003cp\u003eThere would have to be several security compromises before this is a risk, though. One would need to have 1) explicitly disabled $wgHashedUploadDirectory (it is enabled by default), and 2) to whitelist \u003ctt class=\"remarkup-monospaced\"\u003e.php\u003c\/tt\u003e file extension for user uploads or somehow breach the $wgProhibitedFileExtensions restriction, and 3) to also breach the content filter in $wgMimeTypeExclusions and MimeAnalyzer which rejects uploads containing PHP code, and 4) breach file type restriction to have no slashes in user-uploaded file names, 5) breach the step where file names are converted to start with an uppercase letter and trick MediaWiki into creating a file name starting with a with a lowercase lowercase letter. All in all, what you need is to write a file like \u003ctt class=\"remarkup-monospaced\"\u003e\/uploads\/mw-cache\/l10n-en.php\u003c\/tt\u003e instead of \u003ctt class=\"remarkup-monospaced\"\u003e\/uploads\/a\/a0\/Filename.png\u003c\/tt\u003e.\u003c\/p\u003e\n\n\u003cp\u003eAs such, it seems \u003ctt class=\"remarkup-monospaced\"\u003e$wgUploadDirectory\u003c\/tt\u003e is safe to use for this by default.\u003c\/p\u003e\n\n\u003cp\u003eIf we want further hardening, we could for example do \u003ca href=\"\/T199590\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_43\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT199590: Deprecate and remove $wgHashedUploadDirectory feature (always on)\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e with a migration script in upgrade.php for third-party wikis that previously disabled this. The only way to compromise it then, is if someone can make the server create files in arbitrary paths that PHP can write to, in which case nothing we pick is safe.\u003c\/p\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003e2: Re-use wgTmpDirectory\u003c\/h6\u003e\n\n\u003cp\u003eThe downside of \u003ctt class=\"remarkup-monospaced\"\u003e$wgTmpDirectory\u003c\/tt\u003e is resource management. We would need to (by default) make sure we have a 1-to-1 mapping between MW installs and tmp directories.\u003c\/p\u003e\n\n\u003cp\u003eThis is because caches can vary by which extensions are installed, and configuration etc. So we can't just use \u003ctt class=\"remarkup-monospaced\"\u003e\/tmp\u003c\/tt\u003e or even \u003ctt class=\"remarkup-monospaced\"\u003e\/tmp-cache-{mw_version}\u003c\/tt\u003e. It would need to be something like \u003ctt class=\"remarkup-monospaced\"\u003e\/tmp\/mw-cache-{wiki_id}-{mw_version}-{hash of $InstallPath}\u003c\/tt\u003e. The downside then, is that they would always stay behind and consume disk space after upgrades.\u003c\/p\u003e\n\n\u003cp\u003eIt also means that while nothing is broken by default, it would be quite inefficient for multi-wiki set ups that share the same code base across multiple wikis. Each wiki would have its own cache directory by default. Whereas today our default for when multiple wikis share the same code, is to assume cache should be shared and site admins have to specifically opt-out if they don't want that (by setting the configuration accordingly, like they would already do for various other configs).\u003c\/p\u003e\n\n\u003cp\u003eHistorically, all use of \u003ctt class=\"remarkup-monospaced\"\u003e\/tmp\u003c\/tt\u003e in MediaWiki has been self-cleaning. This would depart from that.\u003c\/p\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003e3: Re-use $IP\/cache\u003c\/h6\u003e\n\n\u003cp\u003eAnother option is to use \u003ctt class=\"remarkup-monospaced\"\u003e:mw\/cache\/\u003c\/tt\u003e. So no re-use of \u003ctt class=\"remarkup-monospaced\"\u003e\/tmp\u003c\/tt\u003e or \u003ctt class=\"remarkup-monospaced\"\u003e:mw\/uploads\/\u003c\/tt\u003e. The benefit would be that there is no conflict with uploads, and that site admins can easily disable access for all of \u003ctt class=\"remarkup-monospaced\"\u003e\/cache\u003c\/tt\u003e (which we can do by default with \u003ctt class=\"remarkup-monospaced\"\u003e.htaccess\u003c\/tt\u003e for Apache, like we do elsewhere already). This directory is already being used in MW by default for storing SQLite databases. The downside is that it would require more documentation and awareness for site admins using MySQL etc. (Because so far they've been able to ignore our advice to disable web-access to \u003ctt class=\"remarkup-monospaced\"\u003e:mw\/cache\u003c\/tt\u003e.)\u003c\/p\u003e\n\n\u003cp\u003eThis isn't unprecedented, however. We do this already for HTMLFileCache, and for private\/deleted uploads - which are also stored in such a directory and are also web-accessible by default if the site admin doesn't configure them properly.\u003c\/p\u003e\n\n\u003cp\u003eOn the other hand, if it requires awareness of the site administrator to manually do something, it might also make sense to have it be an advertised and well-documented opt-in that is technically disabled by default. E.g. the technical default would be \u003ctt class=\"remarkup-monospaced\"\u003e\/tmp\u003c\/tt\u003e but we can have the installer check if \u003ctt class=\"remarkup-monospaced\"\u003e:mw\/cache\u003c\/tt\u003e is web-accessible and if not, warn against that, and if it has been disabled already (as it should be) generate LocalSettings to use \u003ctt class=\"remarkup-monospaced\"\u003e:mw\/cache\u003c\/tt\u003e instead. This is a compromise of both. Thoughts?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_356\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/l35zuvzndix63qy6mepk\/PHID-FILE-av27timtzzfb5jv7kmvh\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Paladox\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5160951\" id=\"5160951\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_355\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Paladox\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_118\"\u003ePaladox\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5160951\" data-sigil=\"has-tooltip\" data-meta=\"0_354\"\u003e\u003cspan class=\"screen-only\"\u003eMay 6 2019, 4:52 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-06 16:52:26 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_365\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/6vn6slgby7ia62ouikut\/PHID-FILE-ay56qvafgaxajuctgtw3\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/gerritbot\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5162693\" id=\"5162693\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_364\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/gerritbot\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_119\"\u003egerritbot\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5162693\" data-sigil=\"has-tooltip\" data-meta=\"0_363\"\u003e\u003cspan class=\"screen-only\"\u003eMay 6 2019, 9:52 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-06 21:52:50 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_361\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_362\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_120\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eChange 508422 had a related patch set uploaded (by Krinkle; owner: Krinkle):\u003cbr \/\u003e\n[mediawiki\/core@master] localisation: Improve documentation around wgLocalisationCacheConf\u003c\/p\u003e\n\n\u003cp\u003e\u003ca href=\"https:\/\/gerrit.wikimedia.org\/r\/508422\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/gerrit.wikimedia.org\/r\/508422\u003c\/a\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_374\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/6vn6slgby7ia62ouikut\/PHID-FILE-ay56qvafgaxajuctgtw3\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/gerritbot\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5162694\" id=\"5162694\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-link phui-timeline-icon\" data-meta=\"0_373\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/gerritbot\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_121\"\u003egerritbot\u003c\/a\u003e added a project: \u003ca href=\"\/tag\/patch-for-review\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_122\"\u003ePatch-For-Review\u003c\/a\u003e.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5162694\" data-sigil=\"has-tooltip\" data-meta=\"0_372\"\u003e\u003cspan class=\"screen-only\"\u003eMay 6 2019, 9:52 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-05-06 21:52:51 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_370\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_371\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_123\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eChange 508423 had a related patch set uploaded (by Krinkle; owner: Krinkle):\u003cbr \/\u003e\n[mediawiki\/core@master] localisation: Inject 'directory' option to LCStore classes\u003c\/p\u003e\n\n\u003cp\u003e\u003ca href=\"https:\/\/gerrit.wikimedia.org\/r\/508423\" class=\"remarkup-link remarkup-link-ext\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/gerrit.wikimedia.org\/r\/508423\u003c\/a\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e"},"javelin_metadata":[{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},[],{"hovercardSpec":{"objectPHID":"PHID-TASK-tscshki5slbwkw5bwdyd"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},[],{"hovercardSpec":{"objectPHID":"PHID-TASK-tscshki5slbwkw5bwdyd"}},{"hovercardSpec":{"objectPHID":"PHID-USER-2e3ss3dyx27wu7wkk3qw","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-tscshki5slbwkw5bwdyd"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-USER-732lqsmz4v6bss3kln2v","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-USER-2e3ss3dyx27wu7wkk3qw","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-USER-2e3ss3dyx27wu7wkk3qw","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-CMIT-3fsrkkiplj6l6mn3eagn"}},{"hovercardSpec":{"objectPHID":"PHID-CMIT-pheiqukrazq32xasdxtj"}},{"hovercardSpec":{"objectPHID":"PHID-CMIT-ujwv74vm65obm74k5kb2"}},{"hovercardSpec":{"objectPHID":"PHID-CMIT-zaate5xitdflctiqwope"}},{"hovercardSpec":{"objectPHID":"PHID-CMIT-fjbgv2e6gomegvljrft3"}},{"hovercardSpec":{"objectPHID":"PHID-CMIT-gqxmhydwrj3swnfhuush"}},{"hovercardSpec":{"objectPHID":"PHID-CMIT-kj4abx7n7momfgoesiqs"}},{"hovercardSpec":{"objectPHID":"PHID-CMIT-fjbgv2e6gomegvljrft3"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-sl74wp5erjsfhzqi27ps"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-tscshki5slbwkw5bwdyd"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-tscshki5slbwkw5bwdyd"}},[],[],[],[],[],[],{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-USER-732lqsmz4v6bss3kln2v","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-USER-732lqsmz4v6bss3kln2v","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-USER-bmbmvb2e5bg6ztcangbq","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-efcbs3hyias5ofiqe235"}},{"hovercardSpec":{"objectPHID":"PHID-USER-732lqsmz4v6bss3kln2v","contextPHID":"PHID-TASK-v7kvv7nlhalpsnfc2fdu"}},{"hovercardSpec":{"objectPHID":"PHID-APPS-PhabricatorHeraldApplication"}},[],{"hovercardSpec":{"objectPHID":"PHID-USER-hgn5uw2jafgjgfvxibhh"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-27kdwzvrc74fzrnjl6sr"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-l7ufebspgxkzefbiuawg"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-cm6l3muxcwmitvpzcc4u"}},{"phid":"PHID-XACT-TASK-haq5a4c5mgf7loy"},{"phid":"PHID-XACT-TASK-v2eqnbdcir6mezc"},{"hovercardSpec":{"objectPHID":"PHID-USER-732lqsmz4v6bss3kln2v"}},{"phid":"PHID-XACT-TASK-wvq6dfz6u6e4rp5"},{"hovercardSpec":{"objectPHID":"PHID-USER-5dqihbanu3caaj7pigif"}},{"phid":"PHID-XACT-TASK-jgx6gp2wks7hmcw"},{"hovercardSpec":{"objectPHID":"PHID-USER-2e3ss3dyx27wu7wkk3qw"}},{"hovercardSpec":{"objectPHID":"PHID-USER-a3ndrbmqqq7sb7olfps4"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-y7k6c7zwrcb62hzgiulu"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-d2s4hyfykrv3r6lt5txg"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-2b7oz62ylk3jk4aus262"}},{"hovercardSpec":{"objectPHID":"PHID-USER-a3ndrbmqqq7sb7olfps4"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-a66mfxgb6yhoyqgrges6"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-2b7oz62ylk3jk4aus262"}},{"hovercardSpec":{"objectPHID":"PHID-USER-a3ndrbmqqq7sb7olfps4"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-gsbksa2xxdcongizrfbm"}},{"hovercardSpec":{"objectPHID":"PHID-USER-a3ndrbmqqq7sb7olfps4"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-f7a4cwag6sr4wnsf6urq"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-fieazx3yp43vx3rjuyll"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-gsbksa2xxdcongizrfbm"}},{"hovercardSpec":{"objectPHID":"PHID-USER-a3ndrbmqqq7sb7olfps4"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-7ihdeqzhrbpqho67o7gc"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-gsbksa2xxdcongizrfbm"}},{"hovercardSpec":{"objectPHID":"PHID-USER-2e3ss3dyx27wu7wkk3qw"}},{"phid":"PHID-XACT-TASK-ioozvimnwuvhcdb"},{"hovercardSpec":{"objectPHID":"PHID-USER-5dqihbanu3caaj7pigif"}},{"phid":"PHID-XACT-TASK-pwzaqdqimf24lo4"},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-fyipiapgk424gxo"},{"phid":"PHID-XACT-TASK-7sqljotmlxasm4g"},{"hovercardSpec":{"objectPHID":"PHID-USER-bmbmvb2e5bg6ztcangbq"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-lozdanrcvifg2ow"},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-lci7ze4lrwahssnfkt7u"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-cm6l3muxcwmitvpzcc4u"}},{"hovercardSpec":{"objectPHID":"PHID-USER-ydswvwhh5pm4lshahjje"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"hovercardSpec":{"objectPHID":"PHID-USER-papbtlagfolot4dzerne"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-ylarhsvhxcxqbur6pbmv"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-4hnpc5ihvpxbag7deejp"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-lci7ze4lrwahssnfkt7u"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-4hnpc5ihvpxbag7deejp"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-mzxlpm2u56pgpkqn3onq"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-lci7ze4lrwahssnfkt7u"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-2xz7qw75cr5yyju"},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-vnx7mb5meayvd7w"},{"hovercardSpec":{"objectPHID":"PHID-USER-bmbmvb2e5bg6ztcangbq"}},{"phid":"PHID-XACT-TASK-okxgilc74m3ctci"},{"hovercardSpec":{"objectPHID":"PHID-USER-732lqsmz4v6bss3kln2v"}},{"phid":"PHID-XACT-TASK-2vylkk4pz2ezwda"},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-f4ypyx542n7vbs7"},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-wyfzav6wmebfm6l"},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-bco5w4m7l3optvo"},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-74s22brdocgdnso"},{"hovercardSpec":{"objectPHID":"PHID-USER-732lqsmz4v6bss3kln2v"}},{"phid":"PHID-XACT-TASK-3zwyph7bncocxrv"},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"phid":"PHID-XACT-TASK-iyoqtwqcah4x3ws"},{"hovercardSpec":{"objectPHID":"PHID-USER-bxp7xrbobtrp5o3q3swv"}},{"hovercardSpec":{"objectPHID":"PHID-USER-idceizaw6elwiwm5xshb"}},{"phid":"PHID-XACT-TASK-zhkdxhczgptsnhp"},{"hovercardSpec":{"objectPHID":"PHID-USER-idceizaw6elwiwm5xshb"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-onnxucoedheq3jevknyr"}},{"phid":"PHID-XACT-TASK-q4hexz5cqhy34kg"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-ikxnlizywhnp3a7","anchor":"5020793"},{"tip":"Via Herald"},[],{"phid":"PHID-XACT-TASK-i2zawso2vfvjtmx","anchor":"5020804"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-haq5a4c5mgf7loy\/","ref":"T218207#5020805"},[],{"anchor":"5020805"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_1\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_130\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_131\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_3\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-haq5a4c5mgf7loy\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_132\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_133\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-qy6ljldzh53lsr3","anchor":"5020805"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-v2eqnbdcir6mezc\/","ref":"T218207#5021142"},[],{"anchor":"5021142"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_5\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_141\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_142\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_7\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-v2eqnbdcir6mezc\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_143\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_144\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-v2eqnbdcir6mezc","anchor":"5021142"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-wvq6dfz6u6e4rp5\/","ref":"T218207#5035881"},[],{"anchor":"5035881"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_9\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_150\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_151\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_11\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-wvq6dfz6u6e4rp5\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_152\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_153\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_13\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-wvq6dfz6u6e4rp5\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_154\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Nerd Sniper","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-wvq6dfz6u6e4rp5","anchor":"5035881"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-jgx6gp2wks7hmcw\/","ref":"T218207#5036116"},[],{"anchor":"5036116"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_15\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_162\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_163\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_17\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-jgx6gp2wks7hmcw\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_164\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_165\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-jgx6gp2wks7hmcw","anchor":"5036116"},{"tip":"Via Web"},[],[],[],[],[],{"phid":"PHID-XACT-TASK-gla3ng5exg6kyk7","anchor":"5036122"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-ioozvimnwuvhcdb\/","ref":"T218207#5036130"},[],{"anchor":"5036130"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_19\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_178\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_179\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_21\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-ioozvimnwuvhcdb\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_180\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_181\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-ioozvimnwuvhcdb","anchor":"5036130"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-pwzaqdqimf24lo4\/","ref":"T218207#5036325"},[],{"anchor":"5036325"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_23\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_187\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_188\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_25\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-pwzaqdqimf24lo4\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_189\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_190\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_27\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-pwzaqdqimf24lo4\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_191\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Nerd Sniper","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-pwzaqdqimf24lo4","anchor":"5036325"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-fyipiapgk424gxo\/","ref":"T218207#5051252"},[],{"anchor":"5051252"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_29\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_199\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_200\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_31\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-fyipiapgk424gxo\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_201\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_202\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_33\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-fyipiapgk424gxo\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_203\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-fyipiapgk424gxo","anchor":"5051252"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-7sqljotmlxasm4g\/","ref":"T218207#5094863"},[],{"anchor":"5094863"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_35\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_211\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_212\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_37\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-7sqljotmlxasm4g\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_213\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_214\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-7sqljotmlxasm4g","anchor":"5094863"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-lozdanrcvifg2ow\/","ref":"T218207#5124420"},[],{"anchor":"5124420"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_39\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_220\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_221\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_41\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-lozdanrcvifg2ow\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_222\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_223\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-3xwuh2vep7vvey5","anchor":"5124420"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-m4o76wde7kgpflc","anchor":"5124422"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-n5xjanrudohowkl","anchor":"5124442"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-u3n4pnwi7ds7h3h","anchor":"5131858"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-wix4ssifgiyzv2m","anchor":"5132245"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-npeodfgqxbwqus2","anchor":"5132325"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-2xz7qw75cr5yyju\/","ref":"T218207#5138303"},[],{"anchor":"5138303"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_43\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_246\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_247\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_45\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-2xz7qw75cr5yyju\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_248\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_249\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_47\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-2xz7qw75cr5yyju\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_250\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-2xz7qw75cr5yyju","anchor":"5138303"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-vnx7mb5meayvd7w\/","ref":"T218207#5138344"},[],{"anchor":"5138344"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_49\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_258\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_259\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_51\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-vnx7mb5meayvd7w\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_260\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_261\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_53\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-vnx7mb5meayvd7w\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_262\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-vnx7mb5meayvd7w","anchor":"5138344"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-okxgilc74m3ctci\/","ref":"T218207#5141353"},[],{"anchor":"5141353"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_55\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_270\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_271\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_57\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-okxgilc74m3ctci\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_272\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_273\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-okxgilc74m3ctci","anchor":"5141353"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-2vylkk4pz2ezwda\/","ref":"T218207#5142248"},[],{"anchor":"5142248"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_59\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_279\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_280\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_61\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-2vylkk4pz2ezwda\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_281\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_282\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-2vylkk4pz2ezwda","anchor":"5142248"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-f4ypyx542n7vbs7\/","ref":"T218207#5157534"},[],{"anchor":"5157534"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_63\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_288\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_289\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_65\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-f4ypyx542n7vbs7\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_290\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_291\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_67\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-f4ypyx542n7vbs7\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_292\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-f4ypyx542n7vbs7","anchor":"5157534"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-wyfzav6wmebfm6l\/","ref":"T218207#5157561"},[],{"anchor":"5157561"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_69\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_300\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_301\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_71\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-wyfzav6wmebfm6l\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_302\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_303\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-wyfzav6wmebfm6l","anchor":"5157561"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-bco5w4m7l3optvo\/","ref":"T218207#5157583"},[],{"anchor":"5157583"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_73\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_311\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_312\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_75\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-bco5w4m7l3optvo\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_313\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_314\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-bco5w4m7l3optvo","anchor":"5157583"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-74s22brdocgdnso\/","ref":"T218207#5157598"},[],{"anchor":"5157598"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_77\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_322\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_323\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_79\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-74s22brdocgdnso\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_324\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_325\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-74s22brdocgdnso","anchor":"5157598"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-3zwyph7bncocxrv\/","ref":"T218207#5160048"},[],{"anchor":"5160048"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_81\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_333\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_334\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_83\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-3zwyph7bncocxrv\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_335\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_336\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-3zwyph7bncocxrv","anchor":"5160048"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-iyoqtwqcah4x3ws\/","ref":"T218207#5160934"},[],{"anchor":"5160934"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_85\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_342\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_343\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_87\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-iyoqtwqcah4x3ws\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_344\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_345\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_89\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-iyoqtwqcah4x3ws\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_346\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-iyoqtwqcah4x3ws","anchor":"5160934"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-k3dhueoxsg2dhl2","anchor":"5160951"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-zhkdxhczgptsnhp\/","ref":"T218207#5162693"},[],{"anchor":"5162693"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_91\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_357\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_358\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_93\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-zhkdxhczgptsnhp\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_359\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_360\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Conduit"},[],{"phid":"PHID-XACT-TASK-zhkdxhczgptsnhp","anchor":"5162693"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-q4hexz5cqhy34kg\/","ref":"T218207#5162694"},[],{"anchor":"5162694"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_95\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_366\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_367\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_97\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-q4hexz5cqhy34kg\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_368\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_369\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Conduit"},[],{"phid":"PHID-XACT-TASK-hziwfd473zj3nyj","anchor":"5162694"}],"javelin_behaviors":{"phui-hovercards":[],"phabricator-watch-anchor":[],"phabricator-tooltips":[],"phui-dropdown-menu":[]},"javelin_resources":["https:\/\/phab.wmfusercontent.org\/res\/defaultX\/phabricator\/dad1a225\/core.pkg.js","https:\/\/phab.wmfusercontent.org\/res\/defaultX\/phabricator\/98e6504a\/rsrc\/externals\/javelin\/core\/init.js","https:\/\/phab.wmfusercontent.org\/res\/defaultX\/phabricator\/286467bd\/core.pkg.css","https:\/\/phab.wmfusercontent.org\/res\/defaultX\/phabricator\/aa49028c\/rsrc\/css\/phui\/phui-badge.css"]}