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