From: Aaron Schulz Date: Tue, 22 Mar 2016 21:19:07 +0000 (-0700) Subject: Add templateOverridesBySection to multi LBFactory X-Git-Tag: 1.31.0-rc.0~7327^2 X-Git-Url: http://git.cyclocoop.org/%22%20%20.%20generer_url_ecrire%28%22mots_tous%22%29%20.%20%22?a=commitdiff_plain;h=2121abd76444a00d8e1626d8846401415e1fdc22;p=lhc%2Fweb%2Fwiklou.git Add templateOverridesBySection to multi LBFactory This makes it easier to support pt-heartbeat with shard "channels" since the channel is based on the section name. Change-Id: Ie0128ee2914e8dc0063c759704373b2440df5ed8 --- diff --git a/includes/db/loadbalancer/LBFactoryMulti.php b/includes/db/loadbalancer/LBFactoryMulti.php index f8ddd123f2..3a543acc5b 100644 --- a/includes/db/loadbalancer/LBFactoryMulti.php +++ b/includes/db/loadbalancer/LBFactoryMulti.php @@ -23,7 +23,15 @@ /** * A multi-wiki, multi-master factory for Wikimedia and similar installations. - * Ignores the old configuration globals + * Ignores the old configuration globals. + * + * Template override precedence (highest => lowest): + * - templateOverridesByServer + * - masterTemplateOverrides + * - templateOverridesBySection/templateOverridesByCluster + * - externalTemplateOverrides + * - serverTemplate + * Overrides only work on top level keys (so nested values will not be merged). * * Configuration: * sectionsByDB A map of database names to section names. @@ -63,7 +71,7 @@ * templateOverridesByServer A 2-d map overriding serverTemplate and * externalTemplateOverrides on a server-by-server basis. Applies * to both core and external storage. - * + * templateOverridesBySection A 2-d map overriding the server info by section. * templateOverridesByCluster A 2-d map overriding the server info by external storage cluster. * * masterTemplateOverrides An override array for all master servers. @@ -119,6 +127,9 @@ class LBFactoryMulti extends LBFactory { */ private $templateOverridesByServer; + /** @var array A 2-d map overriding the server info by section */ + private $templateOverridesBySection; + /** @var array A 2-d map overriding the server info by external storage cluster */ private $templateOverridesByCluster; @@ -162,7 +173,7 @@ class LBFactoryMulti extends LBFactory { $required = [ 'sectionsByDB', 'sectionLoads', 'serverTemplate' ]; $optional = [ 'groupLoadsBySection', 'groupLoadsByDB', 'hostsByName', 'externalLoads', 'externalTemplateOverrides', 'templateOverridesByServer', - 'templateOverridesByCluster', 'masterTemplateOverrides', + 'templateOverridesByCluster', 'templateOverridesBySection', 'masterTemplateOverrides', 'readOnlyBySection', 'loadMonitorClass' ]; foreach ( $required as $key ) { @@ -222,8 +233,13 @@ class LBFactoryMulti extends LBFactory { $readOnlyReason = $this->readOnlyBySection[$section]; } + $template = $this->serverTemplate; + if ( isset( $this->templateOverridesBySection[$section] ) ) { + $template = $this->templateOverridesBySection[$section] + $template; + } + return $this->newLoadBalancer( - $this->serverTemplate, + $template, $this->sectionLoads[$section], $groupLoads, $readOnlyReason