jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/392857 )
Change subject: Add "maxLag" parameter to LBFactory sub-classes and LoadBalancer ...................................................................... Add "maxLag" parameter to LBFactory sub-classes and LoadBalancer Change-Id: I2559e81a4a67036a899fec10582ac1ccb3818cf1 --- M includes/libs/rdbms/lbfactory/LBFactoryMulti.php M includes/libs/rdbms/lbfactory/LBFactorySimple.php M includes/libs/rdbms/loadbalancer/ILoadBalancer.php M includes/libs/rdbms/loadbalancer/LoadBalancer.php 4 files changed, 25 insertions(+), 3 deletions(-) Approvals: Krinkle: Looks good to me, approved jenkins-bot: Verified diff --git a/includes/libs/rdbms/lbfactory/LBFactoryMulti.php b/includes/libs/rdbms/lbfactory/LBFactoryMulti.php index 0384588..cfa2647 100644 --- a/includes/libs/rdbms/lbfactory/LBFactoryMulti.php +++ b/includes/libs/rdbms/lbfactory/LBFactoryMulti.php @@ -107,6 +107,12 @@ /** @var string */ private $lastSection; + /** @var int */ + private $maxLag = self::MAX_LAG_DEFAULT; + + /** @var int Default 'maxLag' when unspecified */ + const MAX_LAG_DEFAULT = 10; + /** * @see LBFactory::__construct() * @@ -160,6 +166,7 @@ * storage cluster. * - masterTemplateOverrides Server configuration map overrides for all master servers. * - loadMonitorClass Name of the LoadMonitor class to always use. + * - maxLag Avoid replica DBs with more lag than this many seconds. * - readOnlyBySection A map of section name to read-only message. * Missing or false for read/write. */ @@ -171,7 +178,7 @@ $optional = [ 'groupLoadsBySection', 'groupLoadsByDB', 'hostsByName', 'externalLoads', 'externalTemplateOverrides', 'templateOverridesByServer', 'templateOverridesByCluster', 'templateOverridesBySection', 'masterTemplateOverrides', - 'readOnlyBySection', 'loadMonitorClass' ]; + 'readOnlyBySection', 'maxLag', 'loadMonitorClass' ]; foreach ( $required as $key ) { if ( !isset( $conf[$key] ) ) { @@ -319,6 +326,7 @@ $this->baseLoadBalancerParams(), [ 'servers' => $this->makeServerArray( $template, $loads, $groupLoads ), + 'maxLag' => $this->maxLag, 'loadMonitor' => [ 'class' => $this->loadMonitorClass ], 'readOnlyReason' => $readOnlyReason ] diff --git a/includes/libs/rdbms/lbfactory/LBFactorySimple.php b/includes/libs/rdbms/lbfactory/LBFactorySimple.php index df0a806..9a6aa3a 100644 --- a/includes/libs/rdbms/lbfactory/LBFactorySimple.php +++ b/includes/libs/rdbms/lbfactory/LBFactorySimple.php @@ -41,6 +41,11 @@ /** @var string */ private $loadMonitorClass; + /** @var int */ + private $maxLag; + + /** @var int Default 'maxLag' when unspecified */ + const MAX_LAG_DEFAULT = 10; /** * @see LBFactory::__construct() @@ -72,6 +77,7 @@ $this->loadMonitorClass = isset( $conf['loadMonitorClass'] ) ? $conf['loadMonitorClass'] : 'LoadMonitor'; + $this->maxLag = isset( $conf['maxLag'] ) ? $conf['maxLag'] : self::MAX_LAG_DEFAULT; } /** @@ -128,6 +134,7 @@ $this->baseLoadBalancerParams(), [ 'servers' => $servers, + 'maxLag' => $this->maxLag, 'loadMonitor' => [ 'class' => $this->loadMonitorClass ], ] ) ); diff --git a/includes/libs/rdbms/loadbalancer/ILoadBalancer.php b/includes/libs/rdbms/loadbalancer/ILoadBalancer.php index 22a5805..86c4335 100644 --- a/includes/libs/rdbms/loadbalancer/ILoadBalancer.php +++ b/includes/libs/rdbms/loadbalancer/ILoadBalancer.php @@ -96,6 +96,7 @@ * - loadMonitor : Name of a class used to fetch server lag and load. * - readOnlyReason : Reason the master DB is read-only if so [optional] * - waitTimeout : Maximum time to wait for replicas for consistency [optional] + * - maxLag: Avoid replica DB servers with more lag than this [optional] * - srvCache : BagOStuff object for server cache [optional] * - wanCache : WANObjectCache object [optional] * - chronologyProtector: ChronologyProtector object [optional] diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php b/includes/libs/rdbms/loadbalancer/LoadBalancer.php index 6bb8945..b622ddc 100644 --- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php +++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php @@ -115,11 +115,13 @@ private $disabled = false; /** @var bool */ private $chronProtInitialized = false; + /** @var int */ + private $maxLag = self::MAX_LAG_DEFAULT; /** @var int Warn when this many connection are held */ const CONN_HELD_WARN_THRESHOLD = 10; - /** @var int Default 'max lag' when unspecified */ + /** @var int Default 'maxLag' when unspecified */ const MAX_LAG_DEFAULT = 10; /** @var int Seconds to cache master server read-only status */ const TTL_CACHE_READONLY = 5; @@ -176,6 +178,10 @@ if ( isset( $params['readOnlyReason'] ) && is_string( $params['readOnlyReason'] ) ) { $this->readOnlyReason = $params['readOnlyReason']; + } + + if ( isset( $params['maxLag'] ) ) { + $this->maxLag = $params['maxLag']; } if ( isset( $params['loadMonitor'] ) ) { @@ -275,7 +281,7 @@ # How much lag this server nominally is allowed to have $maxServerLag = isset( $this->mServers[$i]['max lag'] ) ? $this->mServers[$i]['max lag'] - : self::MAX_LAG_DEFAULT; // default + : $this->maxLag; // default # Constrain that futher by $maxLag argument $maxServerLag = min( $maxServerLag, $maxLag ); -- To view, visit https://gerrit.wikimedia.org/r/392857 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I2559e81a4a67036a899fec10582ac1ccb3818cf1 Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org> Gerrit-Reviewer: Krinkle <krinklem...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits