From 2121abd76444a00d8e1626d8846401415e1fdc22 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Tue, 22 Mar 2016 14:19:07 -0700 Subject: [PATCH] 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 --- includes/db/loadbalancer/LBFactoryMulti.php | 24 +++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) 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 -- 2.20.1