X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fdb%2Floadbalancer%2FLBFactoryMulti.php;h=089dfd36fb00a4d5eacbc6ce7bc925ab988e4f53;hb=52010e6d21d8bdefa1c89fbc9421850185cc5011;hp=92fbccd690193eed426559020bb5d09baae15dbd;hpb=a74baa198cf96178365216a1c5d8c138903c6f40;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/db/loadbalancer/LBFactoryMulti.php b/includes/db/loadbalancer/LBFactoryMulti.php index 92fbccd690..089dfd36fb 100644 --- a/includes/db/loadbalancer/LBFactoryMulti.php +++ b/includes/db/loadbalancer/LBFactoryMulti.php @@ -68,6 +68,8 @@ * * masterTemplateOverrides An override array for all master servers. * + * loadMonitorClass Name of the LoadMonitor class to always use. + * * readOnlyBySection A map of section name to read-only message. * Missing or false for read/write. * @@ -142,6 +144,9 @@ class LBFactoryMulti extends LBFactory { /** @var LoadBalancer[] */ private $extLBs = array(); + /** @var string */ + private $loadMonitorClass; + /** @var string */ private $lastWiki; @@ -153,13 +158,15 @@ class LBFactoryMulti extends LBFactory { * @throws MWException */ public function __construct( array $conf ) { + parent::__construct( $conf ); + $this->chronProt = new ChronologyProtector; $this->conf = $conf; $required = array( 'sectionsByDB', 'sectionLoads', 'serverTemplate' ); $optional = array( 'groupLoadsBySection', 'groupLoadsByDB', 'hostsByName', 'externalLoads', 'externalTemplateOverrides', 'templateOverridesByServer', 'templateOverridesByCluster', 'masterTemplateOverrides', - 'readOnlyBySection' ); + 'readOnlyBySection', 'loadMonitorClass' ); foreach ( $required as $key ) { if ( !isset( $conf[$key] ) ) { @@ -173,13 +180,6 @@ class LBFactoryMulti extends LBFactory { $this->$key = $conf[$key]; } } - - // Check for read-only mode - $section = $this->getSectionForWiki(); - if ( !empty( $this->readOnlyBySection[$section] ) ) { - global $wgReadOnly; - $wgReadOnly = $this->readOnlyBySection[$section]; - } } /** @@ -209,19 +209,27 @@ class LBFactoryMulti extends LBFactory { public function newMainLB( $wiki = false ) { list( $dbName, ) = $this->getDBNameAndPrefix( $wiki ); $section = $this->getSectionForWiki( $wiki ); - $groupLoads = array(); if ( isset( $this->groupLoadsByDB[$dbName] ) ) { $groupLoads = $this->groupLoadsByDB[$dbName]; + } else { + $groupLoads = array(); } if ( isset( $this->groupLoadsBySection[$section] ) ) { $groupLoads = array_merge_recursive( $groupLoads, $this->groupLoadsBySection[$section] ); } + $readOnlyReason = $this->readOnlyReason; + // Use the LB-specific read-only reason if everything isn't already read-only + if ( $readOnlyReason === false && isset( $this->readOnlyBySection[$section] ) ) { + $readOnlyReason = $this->readOnlyBySection[$section]; + } + return $this->newLoadBalancer( $this->serverTemplate, $this->sectionLoads[$section], - $groupLoads + $groupLoads, + $readOnlyReason ); } @@ -259,7 +267,12 @@ class LBFactoryMulti extends LBFactory { $template = $this->templateOverridesByCluster[$cluster] + $template; } - return $this->newLoadBalancer( $template, $this->externalLoads[$cluster], array() ); + return $this->newLoadBalancer( + $template, + $this->externalLoads[$cluster], + array(), + $this->readOnlyReason + ); } /** @@ -283,15 +296,15 @@ class LBFactoryMulti extends LBFactory { * @param array $template * @param array $loads * @param array $groupLoads + * @param string|bool $readOnlyReason * @return LoadBalancer */ - private function newLoadBalancer( $template, $loads, $groupLoads ) { - $servers = $this->makeServerArray( $template, $loads, $groupLoads ); - $lb = new LoadBalancer( array( - 'servers' => $servers, + private function newLoadBalancer( $template, $loads, $groupLoads, $readOnlyReason ) { + return new LoadBalancer( array( + 'servers' => $this->makeServerArray( $template, $loads, $groupLoads ), + 'loadMonitor' => $this->loadMonitorClass, + 'readOnlyReason' => $readOnlyReason ) ); - - return $lb; } /** @@ -319,6 +332,8 @@ class LBFactoryMulti extends LBFactory { $serverInfo = $this->masterTemplateOverrides + $serverInfo; } $master = false; + } else { + $serverInfo['slave'] = true; } if ( isset( $this->templateOverridesByServer[$serverName] ) ) { $serverInfo = $this->templateOverridesByServer[$serverName] + $serverInfo;