jenkins-bot has submitted this change and it was merged.

Change subject: Per-cluster timeouts for ElasticaWrite job
......................................................................


Per-cluster timeouts for ElasticaWrite job

Change-Id: Ifdc928b185349263eba06fb47fc1852c2853ccf9
(cherry picked from commit 2d202aae73c675c79110477542bea486dcb95717)
---
M includes/ClusterSettings.php
M includes/Job/ElasticaWrite.php
M tests/unit/ClusterSettingsTest.php
3 files changed, 42 insertions(+), 2 deletions(-)

Approvals:
  EBernhardson: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/ClusterSettings.php b/includes/ClusterSettings.php
index 3370a4a..f32a04d 100644
--- a/includes/ClusterSettings.php
+++ b/includes/ClusterSettings.php
@@ -60,4 +60,15 @@
                throw new \Exception( "If \$wgCirrusSearchReplicas is " .
                        "an array it must contain all index types." );
        }
+
+       public function getDropDelayedJobsAfter() {
+               $timeout = $this->config->get( 
'CirrusSearchDropDelayedJobsAfter' );
+               if ( is_int( $timeout ) ) {
+                       return $timeout;
+               } elseif ( isset( $timeout[$this->cluster] ) ) {
+                       return $timeout[$this->cluster];
+               }
+               throw new \Exception( "If \$wgCirrusSearchDropDelayedJobsAfter 
is " .
+                       "an array it must contain all configured clusters." );
+       }
 }
diff --git a/includes/Job/ElasticaWrite.php b/includes/Job/ElasticaWrite.php
index e6b936c..caaeceb 100644
--- a/includes/Job/ElasticaWrite.php
+++ b/includes/Job/ElasticaWrite.php
@@ -58,7 +58,6 @@
        }
 
        protected function doJob() {
-               global $wgCirrusSearchDropDelayedJobsAfter;
 
                $connections = $this->decideClusters();
                $clusterNames = implode( ', ', array_keys( $connections ) );
@@ -96,7 +95,8 @@
 
                        if ( $status->hasMessage( 'cirrussearch-indexes-frozen' 
) ) {
                                $diff = time() - $this->params['createdAt'];
-                               if ( $diff > 
$wgCirrusSearchDropDelayedJobsAfter ) {
+                               $dropTimeout = 
$conn->getSettings()->getDropDelayedJobsAfter();
+                               if ( $diff > $dropTimeout ) {
                                        LoggerFactory::getInstance( 
'CirrusSearchChangeFailed' )->warning(
                                                "Dropping delayed job for 
DataSender::{method} in cluster {cluster} after waiting {diff}s",
                                                array(
diff --git a/tests/unit/ClusterSettingsTest.php 
b/tests/unit/ClusterSettingsTest.php
index 8c72d97..d79f96b 100644
--- a/tests/unit/ClusterSettingsTest.php
+++ b/tests/unit/ClusterSettingsTest.php
@@ -78,4 +78,33 @@
                $settings = new ClusterSettings( $config, $cluster );
                $this->assertEquals( $expect, $settings->getReplicaCount( 
$indexType ) );
        }
+
+       public static function provideDropDelayedJobsAfter() {
+               return array(
+                       'Simple integer timeout is returned directly' => array(
+                               60, 'eqiad', 60
+                       ),
+                       'Can set per-cluster timeout' => array(
+                               array( 'eqiad' => 99, 'labsearch' => 42 ),
+                               'labsearch',
+                               42
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideDropDelayedJobsAfter()
+        */
+       public function testDropDelayedJobsAfter( $timeout, $cluster, $expect ) 
{
+               $config = $this->getMockBuilder( 'CirrusSearch\SearchConfig' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $config->expects( $this->any() )
+                       ->method( 'get' )
+                       ->with( 'CirrusSearchDropDelayedJobsAfter' )
+                       ->will( $this->returnValue( $timeout ) );
+
+               $settings = new ClusterSettings( $config, $cluster );
+               $this->assertEquals( $expect, 
$settings->getDropDelayedJobsAfter() );
+       }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/247346
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifdc928b185349263eba06fb47fc1852c2853ccf9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CirrusSearch
Gerrit-Branch: wmf/1.27.0-wmf.2
Gerrit-Owner: EBernhardson <ebernhard...@wikimedia.org>
Gerrit-Reviewer: Chad <ch...@wikimedia.org>
Gerrit-Reviewer: DCausse <dcau...@wikimedia.org>
Gerrit-Reviewer: EBernhardson <ebernhard...@wikimedia.org>
Gerrit-Reviewer: Manybubbles <never...@wikimedia.org>
Gerrit-Reviewer: Smalyshev <smalys...@wikimedia.org>
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