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

Reply via email to