Arlolra has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/391555 )

Change subject: Move expansion reuse to the env so cpu workers can partake
......................................................................

Move expansion reuse to the env so cpu workers can partake

Change-Id: Ib643c208ed30fe103a0995ba75bef3817197f3fc
---
M lib/api/apiUtils.js
M lib/api/routes.js
M lib/config/MWParserEnvironment.js
M lib/parse.js
4 files changed, 48 insertions(+), 35 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/55/391555/1

diff --git a/lib/api/apiUtils.js b/lib/api/apiUtils.js
index 53a0009..d6a1d35 100644
--- a/lib/api/apiUtils.js
+++ b/lib/api/apiUtils.js
@@ -483,44 +483,13 @@
 };
 
 /**
- * See if we can reuse transclusion or extension expansions.
- *
- * @method
- * @param {MWParserEnvironment} env
- */
-apiUtils.reuseExpansions = function(env, revision, updates) {
-       updates = updates || {};
-       var doc = DU.parseHTML(revision.html.body);
-       var pb = apiUtils.extractPageBundle(revision);
-       apiUtils.validatePageBundle(pb, env.originalVersion);
-       DU.applyPageBundle(doc, pb);
-       DU.visitDOM(doc.body, DU.loadDataAttribs);
-       var expansions = DU.extractExpansions(env, doc.body);
-       Object.keys(updates).forEach(function(mode) {
-               switch (mode) {
-                       case 'transclusions':
-                       case 'media':
-                               // Truthy values indicate that these need 
updating,
-                               // so don't reuse them.
-                               if (updates[mode]) {
-                                       expansions[mode] = {};
-                               }
-                               break;
-                       default:
-                               throw new Error('Received an unexpected update 
mode.');
-               }
-       });
-       env.setCaches(expansions);
-};
-
-/**
  * Downgrade content from 2.x to 1.x
  *
  * @method
  * @param {MWParserEnvironment} env
  * @param {Object} revision
  * @param {Response} res
- * @param [String] contentmodel
+ * @param {String} [contentmodel]
  */
 apiUtils.downgrade2to1 = function(env, revision, res, contentmodel) {
        var doc = DU.parseHTML(revision.html.body);
@@ -545,7 +514,7 @@
  * @param {MWParserEnvironment} env
  * @param {Object} revision
  * @param {Response} res
- * @param [String] contentmodel
+ * @param {String} [contentmodel]
  */
 apiUtils.updateRedLinks = function(env, revision, res, contentmodel) {
        var doc = DU.parseHTML(revision.html.body);
@@ -569,7 +538,7 @@
  * @param {Object} res
  * @param {String} html
  * @param {Object} pb
- * @param [String] contentmodel
+ * @param {String} [contentmodel]
  */
 apiUtils.wt2htmlRes = function(env, res, html, pb, contentmodel) {
        if (pb) {
diff --git a/lib/api/routes.js b/lib/api/routes.js
index 5283765..8036e45 100644
--- a/lib/api/routes.js
+++ b/lib/api/routes.js
@@ -728,7 +728,15 @@
                                // FIXME(arlolra): Maybe assert(revision === 
opts.original)
                                return apiUtils.updateRedLinks(env, revision, 
res, contentmodel);
                        } else {
-                               apiUtils.reuseExpansions(env, revision, 
opts.updates);
+                               var doc = DU.parseHTML(revision.html.body);
+                               var pb = apiUtils.extractPageBundle(revision);
+                               apiUtils.validatePageBundle(pb, 
env.originalVersion);
+                               DU.applyPageBundle(doc, pb);
+                               var reuseExpansions = {
+                                       updates: opts.updates,
+                                       html: DU.toXML(doc),
+                               };
+                               env.reuseExpansions(reuseExpansions);
                                return wt2html(req, res);
                        }
                } else {
diff --git a/lib/config/MWParserEnvironment.js 
b/lib/config/MWParserEnvironment.js
index 0c1172c..28aa180 100644
--- a/lib/config/MWParserEnvironment.js
+++ b/lib/config/MWParserEnvironment.js
@@ -9,6 +9,7 @@
 var ConfigRequest = require('../mw/ApiRequest.js').ConfigRequest;
 var Batcher = require('../mw/Batcher.js').Batcher;
 var Util = require('../utils/Util.js').Util;
+var DU = require('../utils/DOMUtils.js').DOMUtils;
 var ParserPipelineFactory = 
require('../wt2html/parser.js').ParserPipelineFactory;
 var LintLogger = require('../logger/LintLogger.js').LintLogger;
 var ParsoidLogger = require('../logger/ParsoidLogger.js').ParsoidLogger;
@@ -327,6 +328,36 @@
 /**
  * @method
  *
+ * See if we can reuse transclusion or extension expansions.
+ *
+ * @param {Object} obj
+ * @param {String} obj.html
+ * @param {Object} obj.updates Update mode
+ */
+MWParserEnvironment.prototype.reuseExpansions = function(obj) {
+       var body = DU.ppToDOM(obj.html);
+       var expansions = DU.extractExpansions(this, body);
+       var updates = Object.assign({}, obj.updates);
+       Object.keys(updates).forEach(function(mode) {
+               switch (mode) {
+                       case 'transclusions':
+                       case 'media':
+                               // Truthy values indicate that these need 
updating,
+                               // so don't reuse them.
+                               if (updates[mode]) {
+                                       expansions[mode] = {};
+                               }
+                               break;
+                       default:
+                               throw new Error('Received an unexpected update 
mode.');
+               }
+       });
+       this.setCaches(expansions);
+};
+
+/**
+ * @method
+ *
  * Set the src and optionally meta information for the page we're parsing.
  *
  * If the argument is a simple string, will clear metadata and just
diff --git a/lib/parse.js b/lib/parse.js
index a4c3beb..0806e5b 100644
--- a/lib/parse.js
+++ b/lib/parse.js
@@ -117,6 +117,7 @@
  * @param {Object} [obj.pb]
  * @param {String} [obj.contentmodel]
  * @param {String} [obj.contentVersion]
+ * @param {Object} [obj.reuseExpansions]
  * @param {Function} [cb] Optional callback
  *
  * @return {Promise}
@@ -150,6 +151,10 @@
                        env.setContentVersion(obj.contentVersion);
                }
 
+               if (obj.reuseExpansions) {
+                       env.reuseExpansions(obj.reuseExpansions);
+               }
+
                if (obj.oldid) {
                        env.page.meta.revision.revid = obj.oldid;
                }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib643c208ed30fe103a0995ba75bef3817197f3fc
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>

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

Reply via email to