Legoktm has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/321709

Change subject: Update lint errors via the job queue
......................................................................

Update lint errors via the job queue

The job queue will allow us to have better flood control and rate
limiting instead of trying to do all the database writes as soon as
parsoid contacts MediaWiki.

On the downside, this means it may take longer for changes to be
reflected in the database and to users, but we already have no promise
for that, so it seems okay.

Note that if you don't have a job queue runner set up, you'll need to
run the runJobs.php script every time to have the jobs execute.

Change-Id: I25fd54734aca4dab09711e7f6aee027654931300
---
M extension.json
M includes/ApiRecordLint.php
A includes/RecordLintJob.php
3 files changed, 66 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Linter 
refs/changes/09/321709/1

diff --git a/extension.json b/extension.json
index ae8745d..ce616c9 100644
--- a/extension.json
+++ b/extension.json
@@ -14,6 +14,7 @@
                "MediaWiki\\Linter\\LintError": "includes/LintError.php",
                "MediaWiki\\Linter\\ApiRecordLint": 
"includes/ApiRecordLint.php",
                "MediaWiki\\Linter\\ApiQueryLintErrors": 
"includes/ApiQueryLintErrors.php",
+               "MediaWiki\\Linter\\RecordLintJob": 
"includes/RecordLintJob.php",
                "MediaWiki\\Linter\\SpecialLintErrors": 
"includes/SpecialLintErrors.php",
                "MediaWiki\\Linter\\LintErrorsPager": 
"includes/LintErrorsPager.php"
        },
@@ -33,6 +34,9 @@
        "SpecialPages": {
                "LintErrors": "MediaWiki\\Linter\\SpecialLintErrors"
        },
+       "JobClasses": {
+               "RecordLintJob": "MediaWiki\\Linter\\RecordLintJob"
+       },
        "ResourceModules": {
                "ext.linter.edit": {
                        "scripts": "ext.linter.edit.js",
diff --git a/includes/ApiRecordLint.php b/includes/ApiRecordLint.php
index 7d48b92..99e7fff 100644
--- a/includes/ApiRecordLint.php
+++ b/includes/ApiRecordLint.php
@@ -23,6 +23,7 @@
 use ApiBase;
 use FormatJson;
 use IPSet\IPSet;
+use JobQueueGroup;
 use Title;
 
 /**
@@ -61,15 +62,15 @@
                        if ( isset( $info['templateInfo'] ) && 
$info['templateInfo'] ) {
                                $info['params']['templateInfo'] = 
$info['templateInfo'];
                        }
-                       $errors[] = new LintError(
-                               $info['type'],
-                               $info['params']
-                       );
+                       $errors[] = $info;
                }
 
-               $lintDb = new Database( $title->getArticleID() );
-               $result = $lintDb->setForPage( $errors );
-               $this->getResult()->addValue( $this->getModuleName(), 
'success', $result );
+               $job = new RecordLintJob( $title, [
+                       'errors' => $errors,
+                       'revision' => $params['revision'],
+               ] );
+               JobQueueGroup::singleton()->push( $job );
+               $this->getResult()->addValue( $this->getModuleName(), 
'success', true );
        }
 
        public function isInternal() {
diff --git a/includes/RecordLintJob.php b/includes/RecordLintJob.php
new file mode 100644
index 0000000..01e2651
--- /dev/null
+++ b/includes/RecordLintJob.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Linter;
+
+use Job;
+use Title;
+
+class RecordLintJob extends Job {
+       /**
+        * RecordLintJob constructor.
+        * @param Title $title
+        * @param array $params
+        */
+       public function __construct( Title $title, array $params ) {
+               parent::__construct( 'RecordLintJob', $title, $params );
+       }
+
+       public function run() {
+               if ( $this->title->getLatestRevID() != 
$this->params['revision'] ) {
+                       // Outdated now, let a later job handle it
+                       return true;
+               }
+
+               $errors = [];
+               foreach ( $this->params['errors'] as $error ) {
+                       $errors[] = new LintError(
+                               $error['type'],
+                               $error['params']
+                       );
+               }
+               $lintDb = new Database( $this->title->getArticleID() );
+               $lintDb->setForPage( $errors );
+               return true;
+       }
+
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I25fd54734aca4dab09711e7f6aee027654931300
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Linter
Gerrit-Branch: master
Gerrit-Owner: Legoktm <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to