[MediaWiki-commits] [Gerrit] mediawiki/core[wmf/1.30.0-wmf.13]: Disallow job pushes from JobQueueGroup to bogus wikis

2017-08-12 Thread Krinkle (Code Review)
Krinkle has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/371643 )

Change subject: Disallow job pushes from JobQueueGroup to bogus wikis
..


Disallow job pushes from JobQueueGroup to bogus wikis

Bug: T171371
Change-Id: I03a5dbd18cf6b5bcacb3ec07cef9e0b051bc147c
(cherry picked from commit df7ec19a120ddcc9e2147808a2f0768a641e89ba)
---
M includes/jobqueue/JobQueueGroup.php
1 file changed, 22 insertions(+), 0 deletions(-)

Approvals:
  Krinkle: Verified; Looks good to me, approved



diff --git a/includes/jobqueue/JobQueueGroup.php 
b/includes/jobqueue/JobQueueGroup.php
index ef0ecb3..addc7fc 100644
--- a/includes/jobqueue/JobQueueGroup.php
+++ b/includes/jobqueue/JobQueueGroup.php
@@ -37,6 +37,8 @@
protected $wiki;
/** @var string|bool Read only rationale (or false if r/w) */
protected $readOnlyReason;
+   /** @var bool Whether the wiki is not recognized in configuration */
+   protected $invalidWiki = false;
 
/** @var array Map of (bucket => (queue => JobQueue, types => list of 
types) */
protected $coalescedQueues;
@@ -68,9 +70,17 @@
 * @return JobQueueGroup
 */
public static function singleton( $wiki = false ) {
+   global $wgLocalDatabases;
+
$wiki = ( $wiki === false ) ? wfWikiID() : $wiki;
+
if ( !isset( self::$instances[$wiki] ) ) {
self::$instances[$wiki] = new self( $wiki, 
wfConfiguredReadOnlyReason() );
+   // Make sure jobs are not getting pushed to bogus 
wikis. This can confuse
+   // the job runner system into spawning endless RPC 
requests that fail (T171371).
+   if ( $wiki !== wfWikiID() && !in_array( $wiki, 
$wgLocalDatabases ) ) {
+   self::$instances[$wiki]->invalidWiki = true;
+   }
}
 
return self::$instances[$wiki];
@@ -120,6 +130,13 @@
 */
public function push( $jobs ) {
global $wgJobTypesExcludedFromDefaultQueue;
+
+   if ( $this->invalidWiki ) {
+   // Do not enqueue job that cannot be run (T171371)
+   $e = new LogicException( "Domain '{$this->wiki}' is not 
recognized." );
+   MWExceptionHandler::logException( $e );
+   return;
+   }
 
$jobs = is_array( $jobs ) ? $jobs : [ $jobs ];
if ( !count( $jobs ) ) {
@@ -171,6 +188,11 @@
 * @since 1.26
 */
public function lazyPush( $jobs ) {
+   if ( $this->invalidWiki ) {
+   // Do not enqueue job that cannot be run (T171371)
+   throw new LogicException( "Domain '{$this->wiki}' is 
not recognized." );
+   }
+
if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' ) {
$this->push( $jobs );
return;

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I03a5dbd18cf6b5bcacb3ec07cef9e0b051bc147c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: wmf/1.30.0-wmf.13
Gerrit-Owner: Krinkle 
Gerrit-Reviewer: Aaron Schulz 
Gerrit-Reviewer: Krinkle 
Gerrit-Reviewer: jenkins-bot <>

___
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits


[MediaWiki-commits] [Gerrit] mediawiki/core[wmf/1.30.0-wmf.13]: Disallow job pushes from JobQueueGroup to bogus wikis

2017-08-12 Thread Krinkle (Code Review)
Krinkle has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/371643 )

Change subject: Disallow job pushes from JobQueueGroup to bogus wikis
..

Disallow job pushes from JobQueueGroup to bogus wikis

Bug: T171371
Change-Id: I03a5dbd18cf6b5bcacb3ec07cef9e0b051bc147c
(cherry picked from commit df7ec19a120ddcc9e2147808a2f0768a641e89ba)
---
M includes/jobqueue/JobQueueGroup.php
1 file changed, 22 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/43/371643/1

diff --git a/includes/jobqueue/JobQueueGroup.php 
b/includes/jobqueue/JobQueueGroup.php
index ef0ecb3..addc7fc 100644
--- a/includes/jobqueue/JobQueueGroup.php
+++ b/includes/jobqueue/JobQueueGroup.php
@@ -37,6 +37,8 @@
protected $wiki;
/** @var string|bool Read only rationale (or false if r/w) */
protected $readOnlyReason;
+   /** @var bool Whether the wiki is not recognized in configuration */
+   protected $invalidWiki = false;
 
/** @var array Map of (bucket => (queue => JobQueue, types => list of 
types) */
protected $coalescedQueues;
@@ -68,9 +70,17 @@
 * @return JobQueueGroup
 */
public static function singleton( $wiki = false ) {
+   global $wgLocalDatabases;
+
$wiki = ( $wiki === false ) ? wfWikiID() : $wiki;
+
if ( !isset( self::$instances[$wiki] ) ) {
self::$instances[$wiki] = new self( $wiki, 
wfConfiguredReadOnlyReason() );
+   // Make sure jobs are not getting pushed to bogus 
wikis. This can confuse
+   // the job runner system into spawning endless RPC 
requests that fail (T171371).
+   if ( $wiki !== wfWikiID() && !in_array( $wiki, 
$wgLocalDatabases ) ) {
+   self::$instances[$wiki]->invalidWiki = true;
+   }
}
 
return self::$instances[$wiki];
@@ -120,6 +130,13 @@
 */
public function push( $jobs ) {
global $wgJobTypesExcludedFromDefaultQueue;
+
+   if ( $this->invalidWiki ) {
+   // Do not enqueue job that cannot be run (T171371)
+   $e = new LogicException( "Domain '{$this->wiki}' is not 
recognized." );
+   MWExceptionHandler::logException( $e );
+   return;
+   }
 
$jobs = is_array( $jobs ) ? $jobs : [ $jobs ];
if ( !count( $jobs ) ) {
@@ -171,6 +188,11 @@
 * @since 1.26
 */
public function lazyPush( $jobs ) {
+   if ( $this->invalidWiki ) {
+   // Do not enqueue job that cannot be run (T171371)
+   throw new LogicException( "Domain '{$this->wiki}' is 
not recognized." );
+   }
+
if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' ) {
$this->push( $jobs );
return;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I03a5dbd18cf6b5bcacb3ec07cef9e0b051bc147c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: wmf/1.30.0-wmf.13
Gerrit-Owner: Krinkle 
Gerrit-Reviewer: Aaron Schulz 

___
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits