Page MenuHomePhabricator

SyntaxHighlight block nodes re-fetch their rendering on page load
Closed, ResolvedPublic1 Estimated Story Points

Description

To reproduce:

  1. Enable Visual editor and set up Parsoid as per the instructions
  2. Create a page with some 10 code blocks on it.
  3. Populate those code blocks
  4. Save the page
  5. Go back to edit the page, note that the code blocks don't load
  6. Go to view then edit mode repeatedly, in other windows - the service will grind to a halt and CPU on the server will spike

No problems when creating, saving, or viewing, but when going back to edit the page the code blocks don't load.
Some form of spike happens on the CPU, based on php-fpm or Parsoid.

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald TranscriptNov 19 2016, 10:15 PM
Andeejaym updated the task description. (Show Details)Nov 19 2016, 10:15 PM
ssastry triaged this task as Medium priority.Nov 21 2016, 5:44 PM

For the record, that's making a change like this:

parsoidConfig.useBatchAPI = false;

I don't know where to put that setting though - which of the following is it in?

  • localsettings.js
  • lib/utils/Util.js
  • lib/config/ParsoidConfig.js
  • config.yaml --> Have no idea where that belongs

For the record, that's making a change like this:

parsoidConfig.useBatchAPI = false;

I made that suggestion because the log there says,

[error][testwiki/Тестовая_страница] Batch request failure for "f1c423e85011b3500256b9b5e736d7a0": 504
Error: Batch request failure for "f1c423e85011b3500256b9b5e736d7a0": 504

implying that batching is enabled, which might not be the case for you.

The default is for batching to be off though, so unless you explicitly enabled it, it's unlikely to be the problem.

I don't know where to put that setting though - which of the following is it in?

  • localsettings.js
  • lib/utils/Util.js
  • lib/config/ParsoidConfig.js
  • config.yaml --> Have no idea where that belongs

It depends which version of Parsoid you're using, but localsettings.js would be a good bet to try first.

Which DBMS are you using w/ MediaWiki? MySQL?

I'm currently on Parsoid "v0.3.0.r804.g4de49e2-3"
I've actually configured everything in config.yaml as the version suggests not to add anything to localsettings.js.

Config is pretty bare though here it is:

worker_heartbeat_timeout: 300000

logging:
    level: info

#metrics:
#    type: log

services:
  - module: lib/index.js
    entrypoint: apiServiceWorker
    conf:
        # Configure Parsoid to point to your MediaWiki instances.
        mwApis:
        - # This is the only required parameter,
          # the URL of you MediaWiki API endpoint.
          uri: 'https://wiki.andreacchio.net/api.php'

In localsettings.js it encourages me not to use it:

/*
 * This old / unusual way to configure Parsoid.
 *
 * You'll probably want to start in config.example.yaml
 * and only end up here if you need some sort of backwards compatibility
 * or to support non-static configuration.
 */
'use strict';

exports.setup = function(parsoidConfig) {
	// Do something dynamic with `parsoidConfig` like,
	//parsoidConfig.setMwApi({
	//	uri: 'http://localhost/w/api.php',
	//});
};

Yes, I'm using MySQL.

My settings in LocalSettings.php - Pretty simple

// Enable Visual Editor
wfLoadExtension( 'VisualEditor' );
$wgDefaultUserOptions['visualeditor-enable'] = 1;
$wgHiddenPrefs[] = 'visualeditor-enable';
$wgVirtualRestConfig['modules']['parsoid'] = array(
	'url' => 'http://localhost:8000',
);

I've found the logs in journalctl so here they are, it gets pretty ugly, basically you can see that I went to edit a page this one: https://wiki.andreacchio.net/index.php?title=Numpy_cheat_sheet it's got a quite few code blocks on it, though it should work I'd assume.

Nov 23 19:29:58 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":189,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:29:58.272Z","v":0}
Nov 23 19:30:13 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":189,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 15982 ms","longMsg":"completed parsing in 15982 ms","levelPath":"info","time":"2016-11-23T08:30:13.461Z","v":0}
Nov 23 19:30:14 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:30:14.716Z","v":0}
Nov 23 19:30:14 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:30:14.824Z","v":0}
Nov 23 19:30:14 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:30:14.894Z","v":0}
Nov 23 19:30:14 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:30:14.975Z","v":0}
Nov 23 19:30:15 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:30:15.047Z","v":0}
Nov 23 19:30:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:30:44.785Z","v":0}
Nov 23 19:30:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:30:44.934Z","v":0}
Nov 23 19:30:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:30:44.931Z","v":0}
Nov 23 19:30:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:30:45.031Z","v":0}
Nov 23 19:30:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:30:45.064Z","v":0}
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":40,"logType":"warning","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"non-200 response: 504 <!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:14 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n
Nov 23 19:31:44 li382-54.members.linode.com node[2695]:          <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342c9f9482e03 &bull; 2016-11-23 08:31:44 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\" data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: !-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342c9f9482e03</strong></span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","longMsg":"non-200 response:\n504\n<!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:14 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"t
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: ext/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n              <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342c9f9482e03 &bull; 2016-11-23 08:31:44 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\"
Nov 23 19:31:44 li382-54.members.linode.com node[2695]:  data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><!-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342c9f9482e03</strong></span>\n    <span class=\"cf-footer-separator
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: \">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","levelPath":"warn","time":"2016-11-23T08:31:44.834Z","v":0}
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"327312200c38afe6f794caa99a9bd743\": 504","stack":"Error: Extension Parse failure for \"327312200c38afe6f794caa99a9bd743\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Extension Parse failure for \"327312200c38afe6f794caa99a9bd743\": 504","levelPath":"error","time":"2016-11-23T08:31:44.837Z","v":0}
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"327312200c38afe6f794caa99a9bd743\": 504  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# reshape array to be 2x7\\nn = n.reshape(2, 7)\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,97],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# reshape array to be 2x7\\nn = n.reshape(2, 7)\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"327312200c38afe6f794caa99a9bd743\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Error\nExtension Parse failure for \"327312200c38afe6f794caa99a9bd743\": 504\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: \"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# reshape array to be 2x7\\nn = n.reshape(2, 7)\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,97],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# reshape array to be 2x7\\nn = n.reshape(2, 7)\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2016-11-23T08:31:44.837Z","v":0}
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 90159 ms","longMsg":"completed parsing in 90159 ms","levelPath":"info","time":"2016-11-23T08:31:44.871Z","v":0}
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":40,"logType":"warning","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"non-200 response: 504 <!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:14 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n
Nov 23 19:31:44 li382-54.members.linode.com node[2695]:          <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342caf9912e03 &bull; 2016-11-23 08:31:44 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\" data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: !-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342caf9912e03</strong></span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","longMsg":"non-200 response:\n504\n<!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:14 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"t
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: ext/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n              <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342caf9912e03 &bull; 2016-11-23 08:31:44 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\"
Nov 23 19:31:44 li382-54.members.linode.com node[2695]:  data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><!-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342caf9912e03</strong></span>\n    <span class=\"cf-footer-separator
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: \">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","levelPath":"warn","time":"2016-11-23T08:31:44.977Z","v":0}
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"18a55a2ab8aea3fbc8e68f6ff8635317\": 504","stack":"Error: Extension Parse failure for \"18a55a2ab8aea3fbc8e68f6ff8635317\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Extension Parse failure for \"18a55a2ab8aea3fbc8e68f6ff8635317\": 504","levelPath":"error","time":"2016-11-23T08:31:44.980Z","v":0}
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"18a55a2ab8aea3fbc8e68f6ff8635317\": 504  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\nimport numpy as np\\n\\nm = np.array([[1,1,1], [1,1,1]])\\nm.shape\\n>>> (2,3) \\n# Output is (rows, columns) \\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,152],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\nimport numpy as np\\n\\nm = np.array([[1,1,1], [1,1,1]])\\nm.shape\\n>>> (2,3) \\n# Output is (rows, columns) \\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"18a55a2ab8aea3fbc8e68f6ff8635317\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Error\nExtension Parse failure fo
Nov 23 19:31:44 li382-54.members.linode.com node[2695]: r \"18a55a2ab8aea3fbc8e68f6ff8635317\": 504\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\nimport numpy as np\\n\\nm = np.array([[1,1,1], [1,1,1]])\\nm.shape\\n>>> (2,3) \\n# Output is (rows, columns) \\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,152],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\nimport numpy as np\\n\\nm = np.array([[1,1,1], [1,1,1]])\\nm.shape\\n>>> (2,3) \\n# Output is (rows, columns) \\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2016-11-23T08:31:44.981Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 90299 ms","longMsg":"completed parsing in 90299 ms","levelPath":"info","time":"2016-11-23T08:31:45.048Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":40,"logType":"warning","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"non-200 response: 504 <!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:15 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n
Nov 23 19:31:45 li382-54.members.linode.com node[2695]:          <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342cb0d8d1317 &bull; 2016-11-23 08:31:45 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\" data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: !-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342cb0d8d1317</strong></span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","longMsg":"non-200 response:\n504\n<!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:15 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"t
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: ext/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n              <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342cb0d8d1317 &bull; 2016-11-23 08:31:45 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\"
Nov 23 19:31:45 li382-54.members.linode.com node[2695]:  data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><!-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342cb0d8d1317</strong></span>\n    <span class=\"cf-footer-separator
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: \">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","levelPath":"warn","time":"2016-11-23T08:31:45.051Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"6afcf485dfb09878b59bcc18dc4cefc8\": 504","stack":"Error: Extension Parse failure for \"6afcf485dfb09878b59bcc18dc4cefc8\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Extension Parse failure for \"6afcf485dfb09878b59bcc18dc4cefc8\": 504","levelPath":"error","time":"2016-11-23T08:31:45.052Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"6afcf485dfb09878b59bcc18dc4cefc8\": 504  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# Array of ones 3 rows, 3 columns\\nnp.ones((3,3)) \\n\\n# Array of Zeros\\nnp.zeros((2,3))\\n\\n# Diagonal ones 3 x 3\\nnp.eye(3)\\n\\n# Set diagonal numbers, and 0's elsewhere\\nnp.diag(y)\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,222],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# Array of ones 3 rows, 3 columns\\nnp.ones((3,3)) \\n\\n# Array of Zeros\\nnp.zeros((2,3))\\n\\n# Diagonal ones 3 x 3\\nnp.eye(3)\\n\\n# Set diagonal numbers, and 0's elsewhere\\nnp.diag(y)\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"6afcf485dfb09878b59bcc18dc4cefc8\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTic
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: kCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Error\nExtension Parse failure for \"6afcf485dfb09878b59bcc18dc4cefc8\": 504\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# Array of ones 3 rows, 3 columns\\nnp.ones((3,3)) \\n\\n# Array of Zeros\\nnp.zeros((2,3))\\n\\n# Diagonal ones 3 x 3\\nnp.eye(3)\\n\\n# Set diagonal numbers, and 0's elsewhere\\nnp.diag(y)\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,222],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# Array of ones 3 rows, 3 columns\\nnp.ones((3,3)) \\n\\n# Array of Zeros\\nnp.zeros((2,3))\\n\\n# Diagonal ones 3 x 3\\nnp.eye(3)\\n\\n# Set diagonal numbers, and 0's elsewhere\\nnp.diag(y)\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2016-11-23T08:31:45.052Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 90214 ms","longMsg":"completed parsing in 90214 ms","levelPath":"info","time":"2016-11-23T08:31:45.089Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":40,"logType":"warning","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"non-200 response: 504 <!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:15 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n
Nov 23 19:31:45 li382-54.members.linode.com node[2695]:          <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342cbef120b5c &bull; 2016-11-23 08:31:45 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\" data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: !-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342cbef120b5c</strong></span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","longMsg":"non-200 response:\n504\n<!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:15 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"t
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: ext/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n              <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342cbef120b5c &bull; 2016-11-23 08:31:45 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\"
Nov 23 19:31:45 li382-54.members.linode.com node[2695]:  data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><!-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342cbef120b5c</strong></span>\n    <span class=\"cf-footer-separator
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: \">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","levelPath":"warn","time":"2016-11-23T08:31:45.126Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": 504","stack":"Error: Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": 504","levelPath":"error","time":"2016-11-23T08:31:45.127Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": 504  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\no = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4\\n>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,186],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\no = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4\\n>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: :98:9)","longMsg":"Error\nExtension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": 504\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\no = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4\\n>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,186],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\no = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4\\n>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2016-11-23T08:31:45.127Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":40,"logType":"warning","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"non-200 response: 504 <!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:15 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n
Nov 23 19:31:45 li382-54.members.linode.com node[2695]:          <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342cbecfd0b2c &bull; 2016-11-23 08:31:45 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\" data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: !-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342cbecfd0b2c</strong></span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","longMsg":"non-200 response:\n504\n<!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en-US\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en-US\"> <!--<![endif]-->\n<head>\n\n\n<meta http-equiv=\"set-cookie\" content=\"cf_use_ob=0; expires=Wed, 23-Nov-16 08:32:15 GMT; path=/\">\n\n\n<title>wiki.andreacchio.net | 504: Gateway time-out</title>\n<meta charset=\"UTF-8\" />\n<meta http-equiv=\"Content-Type\" content=\"t
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: ext/html; charset=UTF-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" />\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\" />\n<link rel=\"stylesheet\" id=\"cf_styles-css\" href=\"/cdn-cgi/styles/cf.errors.css\" type=\"text/css\" media=\"screen,projection\" />\n<!--[if lt IE 9]><link rel=\"stylesheet\" id='cf_styles-ie-css' href=\"/cdn-cgi/styles/cf.errors.ie.css\" type=\"text/css\" media=\"screen,projection\" /><![endif]-->\n<style type=\"text/css\">body{margin:0;padding:0}</style>\n<!--[if lte IE 9]><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/jquery.min.js\"></script><![endif]-->\n<!--[if gte IE 10]><!--><script type=\"text/javascript\" src=\"/cdn-cgi/scripts/zepto.min.js\"></script><!--<![endif]-->\n<script type=\"text/javascript\" src=\"/cdn-cgi/scripts/cf.common.js\"></script>\n\n</head>\n<body>\n<div id=\"cf-wrapper\">\n\n    \n\n    <div id=\"cf-error-details\" class=\"cf-error-details-wrapper\">\n        <div class=\"cf-wrapper cf-error-overview\">\n            <h1>\n              <span class=\"cf-error-type\" data-translate=\"error\">Error</span>\n              <span class=\"cf-error-code\">504</span>\n              <small class=\"heading-ray-id\">Ray ID: 306342cbecfd0b2c &bull; 2016-11-23 08:31:45 UTC</small>\n            </h1>\n            <h2 class=\"cf-subheadline\" data-translate=\"error_desc\">Gateway time-out</h2>\n        </div><!-- /.error-overview -->\n\n        <div class=\"cf-section cf-highlight cf-status-display\">\n            <div class=\"cf-wrapper\">\n                <div class=\"cf-columns cols-3\">\n                  \n<div id=\"cf-browser-status\" class=\"cf-column cf-status-item cf-browser-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-browser\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"browser_desc\">You</span>\n  <h3 class=\"cf-status-name\"
Nov 23 19:31:45 li382-54.members.linode.com node[2695]:  data-translate=\"browser_label\">Browser</h3>\n  <span class=\"cf-status-label\" data-translate=\"browser_status_label\">Working</span>\n</div>\n\n<div id=\"cf-cloudflare-status\" class=\"cf-column cf-status-item cf-cloudflare-status \">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-cloud\"></i>\n    <i class=\"cf-icon-status cf-icon-ok\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"cloud_desc\">Tokyo</span>\n  <h3 class=\"cf-status-name\" data-translate=\"cloud_label\">CloudFlare</h3>\n  <span class=\"cf-status-label\" data-translate=\"cloud_status_label\">Working</span>\n</div>\n\n<div id=\"cf-host-status\" class=\"cf-column cf-status-item cf-host-status cf-error-source\">\n  <div class=\"cf-icon-error-container\">\n    <i class=\"cf-icon cf-icon-server\"></i>\n    <i class=\"cf-icon-status cf-icon-error\"></i>\n  </div>\n  <span class=\"cf-status-desc\" data-translate=\"server_desc\">wiki.andreacchio.net</span>\n  <h3 class=\"cf-status-name\" data-translate=\"server_label\">Host</h3>\n  <span class=\"cf-status-label\" data-translate=\"server_status_label\">Error</span>\n</div>\n\n                </div>\n            </div>\n        </div><!-- /.status-display -->\n\n        <div class=\"cf-section cf-wrapper\">\n            <div class=\"cf-columns two\">\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_happened\">What happened?</h2>\n                    <p>The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID: <strong>306342cbecfd0b2c</strong></span>\n    <span class=\"cf-footer-separator
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: \">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"your_ip\">Your IP</span>: 106.187.39.54</span>\n    <span class=\"cf-footer-separator\">&bull;</span>\n    <span class=\"cf-footer-item\"><span data-translate=\"performance_security_by\">Performance &amp; security by</span> <a data-orig-proto=\"https\" data-orig-ref=\"www.cloudflare.com/5xx-error-landing?utm_source=error_footer\" id=\"brand_link\" target=\"_blank\">CloudFlare</a></span>\n    \n  </p>\n</div><!-- /.error-footer -->\n\n\n    </div><!-- /#cf-error-details -->\n</div><!-- /#cf-wrapper -->\n","levelPath":"warn","time":"2016-11-23T08:31:45.154Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": 504","stack":"Error: Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": 504","levelPath":"error","time":"2016-11-23T08:31:45.154Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": 504  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\nnp.arange(start, stop, step)\\n\\nn = np.arange(0, 40, 3) # start at 0 count up by 3's, stop before 40\\n>>> array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,218],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\nnp.arange(start, stop, step)\\n\\nn = np.arange(0, 40, 3) # start at 0 count up by 3's, stop before 40\\n>>> array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": 504\n    at PHPParseRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tic
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: k.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","longMsg":"Error\nExtension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": 504\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\nnp.arange(start, stop, step)\\n\\nn = np.arange(0, 40, 3) # start at 0 count up by 3's, stop before 40\\n>>> array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,218],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\nnp.arange(start, stop, step)\\n\\nn = np.arange(0, 40, 3) # start at 0 count up by 3's, stop before 40\\n>>> array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2016-11-23T08:31:45.155Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 90190 ms","longMsg":"completed parsing in 90190 ms","levelPath":"info","time":"2016-11-23T08:31:45.200Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 90270 ms","longMsg":"completed parsing in 90270 ms","levelPath":"info","time":"2016-11-23T08:31:45.227Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:31:45.577Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:31:45.871Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:31:45.891Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:31:45.982Z","v":0}
Nov 23 19:31:45 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-23T08:31:45.988Z","v":0}
Nov 23 19:32:15 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:32:15.693Z","v":0}
Nov 23 19:32:15 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:32:15.932Z","v":0}
Nov 23 19:32:15 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:32:15.944Z","v":0}
Nov 23 19:32:16 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2856,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:32:16.028Z","v":0}
Nov 23 19:32:16 li382-54.members.linode.com node[2695]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2888,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-23T08:32:16.031Z","v":0}

I'm currently on Parsoid "v0.3.0.r804.g4de49e2-3"

Hmm, I'm guessing this is from https://aur.archlinux.org/packages/parsoid-git/

It looks like that's installing HEAD of git at whatever time you happen to run pacman. It might be worth asking the maintainer there to pick a stable tag, like 0.6.1 https://github.com/wikimedia/parsoid/releases

Thanks for pasting the log. I'll look at that in a bit.

First, I added the same config to a Parsoid running on my local machine and it parsed that page as expected, with all the code blocks.

http://localhost:8000/wiki.andreacchio.net/v3/page/html/Numpy_cheat_sheet/189

So, it seems like the MediaWiki API itself is doing ok.

I noticed in the logs that the response is being generated by Cloudflare,

The web server reported a gateway time-out error.</p>\n                </div>\n\n                <div class=\"cf-column\">\n                    <h2 data-translate=\"what_can_i_do\">What can I do?</h2>\n                    <p data-translate=\"try_again_in_a_few\">Please try again in a few minutes.</p>\n                </div>\n            </div>\n        </div><!-- /.section -->\n\n        <div class=\"cf-error-footer cf-wrapper\">\n  <p>\n    <span class=\"cf-footer-item\">CloudFlare Ray ID

You probably don't want to the connection between Parsoid and the MediaWiki API leaving your machine. Try switching the config to something like,

- uri: 'http://localhost/api.php'
  domain: 'wiki.andreacchio.net'

Next, try isolating this to just Parsoid. From the machine that's running it, visit the above link,
http://localhost:8000/wiki.andreacchio.net/v3/page/html/Numpy_cheat_sheet/189
and see if it renders correctly.

How much RAM is available?

This comment was removed by Andeejaym.

Yes you're right, it's going through Cloudflare, and before then it goes through NginX running on my machine.

I made that change to http://localhost/api.php, and then https://localhost/api.php and got the following responses

-- Logs begin at Wed 2016-10-26 09:11:21 AEDT. --
Nov 24 07:26:17 li382-54.members.linode.com node[20732]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20732,"level":40,"levelPath":"warn/service-runner","msg":"Startup finished","time":"2016-11-23T20:26:17.534Z","v":0}
Nov 24 07:26:39 li382-54.members.linode.com node[20732]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20745,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:26:39.405Z","v":0}
Nov 24 07:26:39 li382-54.members.linode.com node[20732]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20745,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:26:39.526Z","v":0}
Nov 24 07:26:39 li382-54.members.linode.com node[20732]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20745,"level":60,"err":{"message":"Config Request failure for \"http://localhost/api.php\": Error: unable to verify the first certificate","name":"lib/index.js","stack":"lib/index.js: Config Request failure for \"http://localhost/api.php\": Error: unable to verify the first certificate\n    at ConfigRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at Request.onRequestError (/usr/share/webapps/parsoid/node_modules/request/request.js:813:8)\n    at emitOne (events.js:96:13)\n    at ClientRequest.emit (events.js:188:7)\n    at TLSSocket.socketErrorListener (_http_client.js:309:9)\n    at emitOne (events.js:96:13)\n    at TLSSocket.emit (events.js:188:7)\n    at emitErrorNT (net.js:1281:8)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","levelPath":"fatal/request"},"msg":"Config Request failure for \"http://localhost/api.php\": Error: unable to verify the first certificate","time":"2016-11-23T20:26:39.573Z","v":0}
Nov 24 07:27:36 li382-54.members.linode.com systemd[1]: Stopping Mediawiki Parsoid web service on node.js...
Nov 24 07:27:36 li382-54.members.linode.com node[20732]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20732,"level":30,"levelPath":"info/service-runner/master","msg":"master shutting down, killing workers","time":"2016-11-23T20:27:36.408Z","v":0}
Nov 24 07:27:36 li382-54.members.linode.com node[20732]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20732,"level":30,"levelPath":"info/service-runner/master","msg":"Exiting master","time":"2016-11-23T20:27:36.433Z","v":0}
Nov 24 07:27:36 li382-54.members.linode.com systemd[1]: Stopped Mediawiki Parsoid web service on node.js.
Nov 24 07:27:36 li382-54.members.linode.com systemd[1]: Started Mediawiki Parsoid web service on node.js.
Nov 24 07:27:38 li382-54.members.linode.com node[20799]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20799,"level":30,"levelPath":"info/service-runner","msg":"master(20799) initializing 2 workers","time":"2016-11-23T20:27:38.397Z","v":0}
Nov 24 07:27:43 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20809,"level":30,"levelPath":"info","msg":"loading ...","time":"2016-11-23T20:27:43.631Z","v":0}
Nov 24 07:27:43 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20809,"level":30,"levelPath":"info","msg":"ready on :8000","time":"2016-11-23T20:27:43.820Z","v":0}
Nov 24 07:27:49 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20816,"level":30,"levelPath":"info","msg":"loading ...","time":"2016-11-23T20:27:49.063Z","v":0}
Nov 24 07:27:49 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20816,"level":30,"levelPath":"info","msg":"ready on :8000","time":"2016-11-23T20:27:49.240Z","v":0}
Nov 24 07:27:49 li382-54.members.linode.com node[20799]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20799,"level":40,"levelPath":"warn/service-runner","msg":"Startup finished","time":"2016-11-23T20:27:49.243Z","v":0}
Nov 24 07:27:54 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20809,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:27:54.103Z","v":0}
Nov 24 07:27:54 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20809,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:27:54.156Z","v":0}
Nov 24 07:27:54 li382-54.members.linode.com node[20799]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20809,"level":60,"err":{"message":"Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate","name":"lib/index.js","stack":"lib/index.js: Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate\n    at ConfigRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at Request.onRequestError (/usr/share/webapps/parsoid/node_modules/request/request.js:813:8)\n    at emitOne (events.js:96:13)\n    at ClientRequest.emit (events.js:188:7)\n    at TLSSocket.socketErrorListener (_http_client.js:309:9)\n    at emitOne (events.js:96:13)\n    at TLSSocket.emit (events.js:188:7)\n    at emitErrorNT (net.js:1281:8)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","levelPath":"fatal/request"},"msg":"Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate","time":"2016-11-23T20:27:54.169Z","v":0}
Nov 24 07:28:13 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20816,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:28:13.575Z","v":0}
Nov 24 07:28:13 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20816,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:28:13.629Z","v":0}
Nov 24 07:28:13 li382-54.members.linode.com node[20799]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20816,"level":60,"err":{"message":"Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate","name":"lib/index.js","stack":"lib/index.js: Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate\n    at ConfigRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at Request.onRequestError (/usr/share/webapps/parsoid/node_modules/request/request.js:813:8)\n    at emitOne (events.js:96:13)\n    at ClientRequest.emit (events.js:188:7)\n    at TLSSocket.socketErrorListener (_http_client.js:309:9)\n    at emitOne (events.js:96:13)\n    at TLSSocket.emit (events.js:188:7)\n    at emitErrorNT (net.js:1281:8)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","levelPath":"fatal/request"},"msg":"Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate","time":"2016-11-23T20:28:13.632Z","v":0}
Nov 24 07:29:08 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20816,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:29:08.000Z","v":0}
Nov 24 07:29:08 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20809,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":1}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:29:08.004Z","v":0}
Nov 24 07:29:08 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20816,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:29:08.041Z","v":0}
Nov 24 07:29:08 li382-54.members.linode.com node[20799]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20816,"level":60,"err":{"message":"Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate","name":"lib/index.js","stack":"lib/index.js: Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate\n    at ConfigRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at Request.onRequestError (/usr/share/webapps/parsoid/node_modules/request/request.js:813:8)\n    at emitOne (events.js:96:13)\n    at ClientRequest.emit (events.js:188:7)\n    at TLSSocket.socketErrorListener (_http_client.js:309:9)\n    at emitOne (events.js:96:13)\n    at TLSSocket.emit (events.js:188:7)\n    at emitErrorNT (net.js:1281:8)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","levelPath":"fatal/request"},"msg":"Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate","time":"2016-11-23T20:29:08.042Z","v":0}
Nov 24 07:29:08 li382-54.members.linode.com node[20799]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":20809,"level":40,"logType":"warning/api/unable_to_verify_leaf_signature","wiki":"wiki$0","title":"MediaWiki_Administration_Information","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"},\"retries-remaining\":0}","levelPath":"warn/api/unable_to_verify_leaf_signature","time":"2016-11-23T20:29:08.044Z","v":0}
Nov 24 07:29:08 li382-54.members.linode.com node[20799]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":20809,"level":60,"err":{"message":"Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate","name":"lib/index.js","stack":"lib/index.js: Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate\n    at ConfigRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at Request.onRequestError (/usr/share/webapps/parsoid/node_modules/request/request.js:813:8)\n    at emitOne (events.js:96:13)\n    at ClientRequest.emit (events.js:188:7)\n    at TLSSocket.socketErrorListener (_http_client.js:309:9)\n    at emitOne (events.js:96:13)\n    at TLSSocket.emit (events.js:188:7)\n    at emitErrorNT (net.js:1281:8)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","levelPath":"fatal/request"},"msg":"Config Request failure for \"https://localhost/api.php\": Error: unable to verify the first certificate","time":"2016-11-23T20:29:08.045Z","v":0}

Performing Curl gives the same results:

~/ curl localhost
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html>

~/ curl https://localhost
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use

Reason for this is because any request to http://* redirects to https://* Seems I need to set up some ssl keys to get this working like that? I'd imagine that I could also allow localhost to connect to itself over http though too?

Also as you requested, I got a response but it's all garble

~/ curl http://localhost:8000/wiki.andreacchio.net/v3/page/html/Numpy_cheat_sheet/189

&#x65;&#x72;&#x72;&#x6F;&#x72;&#x3A;&#x20;&#x43;&#x6F;&#x6E;&#x66;&#x69;&#x67;&#x20;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x20;&#x66;&#x61;&#x69;&#x6C;&#x75;&#x72;&#x65;&#x20;&#x66;&#x6F;&#x72;&#x20;&#x22;&#x68;&#x74;&#x74;&#x70;&#x73;&#x3A;&#x2F;&#x2F;&#x6C;&#x6F;&#x63;&#x61;&#x6C;&#x68;&#x6F;&#x73;&#x74;&#x2F;&#x61;&#x70;&#x69;&#x2E;&#x70;&#x68;&#x70;&#x22;&#x3A;&#x20;&#x45;&#x72;&#x72;&#x6F;&#x72;&#x3A;&#x20;&#x75;&#x6E;&#x61;&#x62;&#x6C;&#x65;&#x20;&#x74;&#x6F;&#x20;&#x76;&#x65;&#x72;&#x69;&#x66;&#x79;&#x20;&#x74;&#x68;&#x65;&#x20;&#x66;&#x69;&#x72;&#x73;&#x74;&#x20;&#x63;
etc...
~/ curl localhost:8000
<!DOCTYPE html>
BLAH....
		<h3>Welcome to the <a href="https://www.mediawiki.org/wiki/Parsoid">Parsoid</a> web service.</h3>
<p>See <a href="https://www.mediawiki.org/wiki/Parsoid#The_Parsoid_web_API_.2B_DOM_Spec">the API documentation on mediawiki.org</a>.</p>
	</body>
</html>%
Arlolra added a comment.EditedNov 24 2016, 12:17 AM

Reason for this is because any request to http://* redirects to https://* Seems I need to set up some ssl keys to get this working like that? I'd imagine that I could also allow localhost to connect to itself over http though too?

Yeah, you could allow unencrypted connections from localhost.

But you can also set strictSSL: false in your config.yaml
https://github.com/wikimedia/parsoid/blob/master/config.example.yaml#L89-L91

Also as you requested, I got a response but it's all garble

That's probably because you're missing this commit,
https://github.com/wikimedia/parsoid/commit/8357b71d00ecece7b0df061436db0672fb9d6310

The package at AUR says "Last Updated: 2016-10-08 09:37", which was prior to that merging.

Should I get my installation working on a commit that includes that code, or am I better off just changing to a recommended tag? https://github.com/wikimedia/parsoid/commit/8357b71d00ecece7b0df061436db0672fb9d6310

I applied the flag strictSSL: false and also set up my proxy to accept connections from localhost over 443 though things got stuck again. Doing a curl of localhost/api.php proves that the service can access the API.

Nov 25 07:42:18 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":30,"logType":"info","wiki":"wiki$0","title":"Main_Page","oldId":193,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:42:18.366Z","v":0}
Nov 25 07:42:18 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":30,"logType":"info","wiki":"wiki$0","title":"Main_Page","oldId":193,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 1013 ms","longMsg":"completed parsing in 1013 ms","levelPath":"info","time":"2016-11-24T20:42:18.837Z","v":0}


Nov 25 07:43:04 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":917,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":189,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:43:04.744Z","v":0}
Nov 25 07:43:16 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":917,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":189,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 12906 ms","longMsg":"completed parsing in 12906 ms","levelPath":"info","time":"2016-11-24T20:43:16.867Z","v":0}
Nov 25 07:43:17 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":917,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:43:17.663Z","v":0}
Nov 25 07:43:17 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:43:17.772Z","v":0}
Nov 25 07:43:19 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:43:19.270Z","v":0}
Nov 25 07:43:20 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":917,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 2876 ms","longMsg":"completed parsing in 2876 ms","levelPath":"info","time":"2016-11-24T20:43:20.521Z","v":0}
Nov 25 07:43:20 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":917,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:43:20.987Z","v":0}
Nov 25 07:43:21 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 3359 ms","longMsg":"completed parsing in 3359 ms","levelPath":"info","time":"2016-11-24T20:43:21.025Z","v":0}
Nov 25 07:43:21 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:43:21.104Z","v":0}
Nov 25 07:43:21 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":917,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:43:21.284Z","v":0}
Nov 25 07:43:21 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:43:21.491Z","v":0}
Nov 25 07:43:49 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:43:49.335Z","v":0}
Nov 25 07:43:51 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":917,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:43:51.036Z","v":0}
Nov 25 07:43:51 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:43:51.145Z","v":0}
Nov 25 07:43:51 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":917,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:43:51.306Z","v":0}
Nov 25 07:43:51 li382-54.members.linode.com node[902]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":923,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:43:51.538Z","v":0}

I then set up both nginx and config.yaml to work over http but same diff

Nov 25 07:49:26 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1508,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":189,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 15239 ms","longMsg":"completed parsing in 15239 ms","levelPath":"info","time":"2016-11-24T20:49:26.485Z","v":0}
Nov 25 07:49:28 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1508,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:49:28.747Z","v":0}
Nov 25 07:49:29 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1508,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:49:29.269Z","v":0}
Nov 25 07:49:58 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1508,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:49:58.797Z","v":0}
Nov 25 07:49:59 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1508,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:49:59.289Z","v":0}
Nov 25 07:50:08 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1514,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:50:08.890Z","v":0}
Nov 25 07:50:08 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1514,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:50:08.977Z","v":0}
Nov 25 07:50:10 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1514,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2016-11-24T20:50:10.252Z","v":0}

After much waiting...

Nov 25 07:52:40 li382-54.members.linode.com node[1493]:   3,  4],\\n       [ 6,  7,  8,  9, 10]])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,667],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\n# Create an array with 36 slots starting from 0 to 35\\nr = np.arange(36)\\n\\n# Turn the above array to a 6x6 arrary\\nr.resize((6,6))\\n>>> array([[ 0,  1,  2,  3,  4,  5],\\n       [ 6,  7,  8,  9, 10, 11],\\n       [12, 13, 14, 15, 16, 17],\\n       [18, 19, 20, 21, 22, 23],\\n       [24, 25, 26, 27, 28, 29],\\n       [30, 31, 32, 33, 34, 35]])\\n\\n# Find the item at array slot row 2 column 2 starting at 0\\nr[2, 2]\\n>>> 14\\n\\n# Find array on 3rd row cols 3 to 6\\nr[3, 3:6]\\n>>> array([21, 22, 23])\\n\\n# Get the array in the first 2 rows in all columns but the last\\nr[:2, :-1]\\n>>> array([[ 0,  1,  2,  3,  4],\\n       [ 6,  7,  8,  9, 10]])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2016-11-24T20:52:40.717Z","v":0}
Nov 25 07:52:40 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1508,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 90108 ms","longMsg":"completed parsing in 90108 ms","levelPath":"info","time":"2016-11-24T20:52:40.750Z","v":0}
Nov 25 07:52:49 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1514,"level":40,"logType":"warning","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"non-200 response: 504 <html>\r\n<head><title>504 Gateway Time-out</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>504 Gateway Time-out</h1></center>\r\n<hr><center>nginx/1.10.2</center>\r\n</body>\r\n</html>\r\n","longMsg":"non-200 response:\n504\n<html>\r\n<head><title>504 Gateway Time-out</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>504 Gateway Time-out</h1></center>\r\n<hr><center>nginx/1.10.2</center>\r\n</body>\r\n</html>\r\n","levelPath":"warn","time":"2016-11-24T20:52:49.581Z","v":0}
Nov 25 07:52:49 li382-54.members.linode.com node[1493]: {"name":"parsoid","hostname":"li382-54.members.linode.com","pid":1514,"level":60,"err":{"message":"Config Request failure for \"http://localhost/api.php\": 504","name":"lib/index.js","stack":"lib/index.js: Config Request failure for \"http://localhost/api.php\": 504\n    at ConfigRequest.ApiRequest._requestCB (/usr/share/webapps/parsoid/lib/mw/ApiRequest.js:409:11)\n    at Request.self.callback (/usr/share/webapps/parsoid/node_modules/request/request.js:187:22)\n    at emitTwo (events.js:106:13)\n    at Request.emit (events.js:191:7)\n    at Request.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:1044:10)\n    at emitOne (events.js:96:13)\n    at Request.emit (events.js:188:7)\n    at IncomingMessage.<anonymous> (/usr/share/webapps/parsoid/node_modules/request/request.js:965:12)\n    at emitNone (events.js:91:20)\n    at IncomingMessage.emit (events.js:185:7)\n    at endReadableNT (_stream_readable.js:974:12)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickCallback (internal/process/next_tick.js:98:9)","levelPath":"fatal/request"},"msg":"Config Request failure for \"http://localhost/api.php\": 504","time":"2016-11-24T20:52:49.582Z","v":0}
Nov 25 07:52:52 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1514,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-11-24T20:52:52.322Z","v":0}
Nov 25 07:52:56 li382-54.members.linode.com node[1493]: {"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":1514,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 27062 ms","longMsg":"completed parsing in 27062 ms","levelPath":"info","time":"2016-11-24T20:52:56.708Z","v":0}

Not sure where to go from here. Should I try a different commit, change the timeout in nginx, or is there anything in localsettings.php or config.yaml I can attempt?

Also, server I'm on has 2 cores and 2gig ram. Not much else running on it aside from a couple of wordpress sites that don't get much traffic. Would be happy to shut off access to them to troubleshoot this.

Any ideas on what to do next?
As per my previous comment:

Should I try a different commit, change the timeout in nginx, or is there anything in localsettings.php or config.yaml I can attempt?

2gig ram

Hmm, that may be a limiting factor. How much is free? Maybe take a look at the discussion here,
https://www.mediawiki.org/wiki/Topic:Tgdln7606jn7kg00

Andeejaym added a comment.EditedDec 10 2016, 2:05 AM

The load on the server is very low, here's the results of free -m

              total        used        free      shared  buff/cache   available
Mem:           1991         239         944          10         808        1721
Swap:           511          14         497

There seems to be other steps involved there I'll need to run through as adjusting the heap space, and number of workers too.

That said these problems do seem different, this other one he can't even get it to run, I can get mine to run, though the problem comes up specifically with the code blocks.

The other reason why I think that it's not load related is because when I go to load a page with either many or few code blocks on it, there's no notable spike in memory/swap usage or load average.

On pages with lots of code blocks they just don't get rendered with no notable effects on resources

Maybe that suggests lock contention then.

What happens with VE is that it makes a request to the /api/rest_v1/ in MediaWiki, which calls Parsoid, which calls back to MediaWiki. At that point, it can deadlock.

What happens when you take VE out of the equation and just let Parsoid render the page?

As in http://localhost:8000/wiki.andreacchio.net/v3/page/html/Numpy_cheat_sheet/189

Andeejaym added a comment.EditedDec 14 2016, 2:18 AM

Ok so I changed my service to run like this and it seems to be giving better results:

/usr/bin/node --max-old-space-size=128 /usr/share/webapps/parsoid/bin/server.js -n 0

I don't think the bottleneck is in the memory, it seems to be in the CPU/timeout period of Parsiod.

When I run with the above settings, a page with 0 code blocks loads the editor pretty much instantly, with I run the editor for the first time on a page with 8 code blocks, it manages it, but it causes a CPU spike, if I wait ~10 seconds, and try to run the editor again on the same page with 8 code blocks it can't get even 2 code blocks open.

What I've also noticed is that there seems to be a timeout Parsiod has set for itself perhaps, if it can't load those code blocks in a certain amount of time (while the CPU is spiking) it'll give up - once that initial period is over I can't see the process trying to do anything after that (no CPU or memory consumption)

I've pasted below a htop image of when the CPU is spiking when I try to load the editor on a page with 8 code blocks:

Interestingly, it seems to be an issue with php-fpm's CPU use. Does that need tuning in any way?

If you're setting -n 0, why does that screenshot show 5 parsoid processes? What are you using to launch the service?

Andeejaym added a comment.EditedDec 15 2016, 4:30 AM

Here's the service script - I don't see how it wouldn't be applied, particularly since the switch comes up in htop:

[Unit]
Description=Mediawiki Parsoid web service on node.js
Documentation=http://www.mediawiki.org/wiki/Parsoid
Wants=local-fs.target network.target
After=local-fs.target network.target

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
User=parsoid
Group=parsoid
WorkingDirectory=/usr/share/webapps/parsoid
ExecStart=/usr/bin/node --max-old-space-size=128 /usr/share/webapps/parsoid/bin/server.js -n 0
KillMode=process
Restart=on-success
PrivateTmp=true
StandardOutput=syslog

Also I'm not sure if the -n x correlates exactly to the number of processes running, I can enter in -n 10 and there's way more than 10 processes running now, same with -n 1, there's more than 1.

If you feel that the service is doing something weird I ran the command directly though the console, though the results aren't any different. I got some logging that was spat out when it wat trying to send over the code blocks - though again it didn't succeed in rendering all the code block on the page.

{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":171,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:01:58.863Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":171,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 3152 ms","longMsg":"completed parsing in 3152 ms","levelPath":"info","time":"2016-12-16T04:02:01.891Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:02:02.429Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:02:02.486Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:02:02.508Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:02:02.525Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:02:03.054Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:02:26.853Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 25408 ms","longMsg":"completed parsing in 25408 ms","levelPath":"info","time":"2016-12-16T04:02:27.822Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 25424 ms","longMsg":"completed parsing in 25424 ms","levelPath":"info","time":"2016-12-16T04:02:27.944Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 25489 ms","longMsg":"completed parsing in 25489 ms","levelPath":"info","time":"2016-12-16T04:02:27.990Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 25538 ms","longMsg":"completed parsing in 25538 ms","levelPath":"info","time":"2016-12-16T04:02:28.015Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:02:28.087Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2016-12-16T04:02:28.139Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 25628 ms","longMsg":"completed parsing in 25628 ms","levelPath":"info","time":"2016-12-16T04:02:28.673Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 1918 ms","longMsg":"completed parsing in 1918 ms","levelPath":"info","time":"2016-12-16T04:02:28.757Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 1265 ms","longMsg":"completed parsing in 1265 ms","levelPath":"info","time":"2016-12-16T04:02:29.328Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":8686,"level":30,"logType":"info","wiki":"wiki$0","title":"Python_Cheat_Sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 1259 ms","longMsg":"completed parsing in 1259 ms","levelPath":"info","time":"2016-12-16T04:02:29.380Z","v":0}

Also I'm not sure if the -n x correlates exactly to the number of processes running, I can enter in -n 10 and there's way more than 10 processes running now, same with -n 1, there's more than 1.

I don't think the systemd likes the syntax you're using. I looked briefly and it might be the spacing throwing it off. Try,

ExecStart=/usr/bin/node --max-old-space-size=128 /usr/share/webapps/parsoid/bin/server.js "-n 0"

0 means no master and 1 worker. 1 means a master and 1 worker. 2 mean a master and 2 workers. and so on ...

Hey, happy new year!

So, back to business :)

I don't think the quotes make any difference, I checked both in the service file, and directly running the script in the command line.

Running the command directly:

/usr/bin/node --max-old-space-size=128 /usr/share/webapps/parsoid/bin/server.js "-n 0"

Running the service:


With the line

ExecStart=/usr/bin/node --max-old-space-size=128 /usr/share/webapps/parsoid/bin/server.js "-n 0"

The full service, though I don't think this is a service problem given that the CLI and service have the same results.

[Unit]
Description=Mediawiki Parsoid web service on node.js
Documentation=http://www.mediawiki.org/wiki/Parsoid
Wants=local-fs.target network.target
After=local-fs.target network.target

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
User=parsoid
Group=parsoid
WorkingDirectory=/usr/share/webapps/parsoid
ExecStart=/usr/bin/node --max-old-space-size=128 /usr/share/webapps/parsoid/bin/server.js "-n 0"
KillMode=process
Restart=on-success
PrivateTmp=true
StandardOutput=syslog

Again a page with around 5 code blocks seems to be OK, but a page with 10 or so code blocks will struggle to load them.

When parsing pages with lots of code blocks I get messages with stuff like this in it:

{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2637,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 26779 ms","longMsg":"completed parsing in 26779 ms","levelPath":"info","time":"2017-01-10T03:57:16.677Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2637,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 26721 ms","longMsg":"completed parsing in 26721 ms","levelPath":"info","time":"2017-01-10T03:57:16.690Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2637,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 26741 ms","longMsg":"completed parsing in 26741 ms","levelPath":"info","time":"2017-01-10T03:57:16.692Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2637,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 1886 ms","longMsg":"completed parsing in 1886 ms","levelPath":"info","time":"2017-01-10T03:57:17.059Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":2637,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 26606 ms","longMsg":"completed parsing in 26606 ms","levelPath":"info","time":"2017-01-10T03:57:17.195Z","v":0}

Any updates @Arlolra ?

Sorry for dropping this, let's see.

I don't think the quotes make any difference, I checked both in the service file, and directly running the script in the command line.

Right, that suggestion was only for the service file, not the command line. But it looks like I got that wrong.

Can you try without the quotes from the command line,

/usr/bin/node --max-old-space-size=128 /usr/share/webapps/parsoid/bin/server.js -n 1

Yep, same error message

{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":5193,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2017-01-31T11:18:49.602Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":5193,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2017-01-31T11:18:54.140Z","v":0}
{"name":"lib/index.js","hostname":"li382-54.members.linode.com","pid":5193,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\",\"connect\":false},\"retries-remaining\":1}","levelPath":"warn/api/etimedout","time":"2017-01-31T11:18:55.132Z","v":0}

Htop looks like this:

Well, that's confounding that it's not respecting the number of workers we're specifying. Can you try adding a statement like console.log(process.argv); in bin/server.js to confirm it is receiving that argument?

Out of curiosity, I added - uri: 'https://wiki.andreacchio.net/api.php' to my config.yaml and was able to render pages from your wiki with multiple syntaxhighlight blocks, so it doesn't seem like there's anything inherently wrong with this setup.

I imagine if we're able to free up some resources, it should work. Maybe also try reducing the number of nginx / mysqld / php-fpm workers, see this thread https://www.mediawiki.org/wiki/Topic:Taq87rii0fuvswgd

Arlolra changed the task status from Open to Stalled.Feb 25 2017, 7:03 PM
Arlolra removed Arlolra as the assignee of this task.

yes it seems that the arg is being passed through

$ /usr/bin/node --max-old-space-size=128 /usr/share/webapps/parsoid/bin/server.js -n 1                                                                                 ⏎
[ '/usr/bin/node',
  '/usr/share/webapps/parsoid/bin/server.js',
  '-n',
  '1' ]

I went to try instead of connecting to localhost to an external EC2 instance, but parsiod seems to still be struggling

{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","levelPath":"warn/api/etimedout","time":"2017-03-15T03:06:25.582Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": Error: ETIMEDOUT","stack":"Error: Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": Error: ETIMEDOUT","levelPath":"error","time":"2017-03-15T03:06:25.584Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","levelPath":"warn/api/etimedout","time":"2017-03-15T03:06:25.585Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"9a28ea697ee02e27bc82d7acbc2b63ab\": Error: ETIMEDOUT","stack":"Error: Extension Parse failure for \"9a28ea697ee02e27bc82d7acbc2b63ab\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Extension Parse failure for \"9a28ea697ee02e27bc82d7acbc2b63ab\": Error: ETIMEDOUT","levelPath":"error","time":"2017-03-15T03:06:25.586Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": Error: ETIMEDOUT  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\nnp.arange(start, stop, step)\\n\\nn = np.arange(0, 40, 3) # start at 0 count up by 3's, stop before 40\\n>>> array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,218],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\nnp.arange(start, stop, step)\\n\\nn = np.arange(0, 40, 3) # start at 0 count up by 3's, stop before 40\\n>>> array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Error\nExtension Parse failure for \"0998b59c8d3b29dc5f0a6fd1dee6baa7\": Error: ETIMEDOUT\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\nnp.arange(start, stop, step)\\n\\nn = np.arange(0, 40, 3) # start at 0 count up by 3's, stop before 40\\n>>> array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,218],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\nnp.arange(start, stop, step)\\n\\nn = np.arange(0, 40, 3) # start at 0 count up by 3's, stop before 40\\n>>> array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2017-03-15T03:06:25.587Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 10034 ms","longMsg":"completed parsing in 10034 ms","levelPath":"info","time":"2017-03-15T03:06:25.593Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"9a28ea697ee02e27bc82d7acbc2b63ab\": Error: ETIMEDOUT  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\no.resize(3, 3)\\n\\n>>> array([[ 0. ,  0.5,  1. ],\\n       [ 1.5,  2. ,  2.5],\\n       [ 3. ,  3.5,  4. ]])\\n\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,154],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\no.resize(3, 3)\\n\\n>>> array([[ 0. ,  0.5,  1. ],\\n       [ 1.5,  2. ,  2.5],\\n       [ 3. ,  3.5,  4. ]])\\n\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"9a28ea697ee02e27bc82d7acbc2b63ab\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Error\nExtension Parse failure for \"9a28ea697ee02e27bc82d7acbc2b63ab\": Error: ETIMEDOUT\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\no.resize(3, 3)\\n\\n>>> array([[ 0. ,  0.5,  1. ],\\n       [ 1.5,  2. ,  2.5],\\n       [ 3. ,  3.5,  4. ]])\\n\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,154],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\no.resize(3, 3)\\n\\n>>> array([[ 0. ,  0.5,  1. ],\\n       [ 1.5,  2. ,  2.5],\\n       [ 3. ,  3.5,  4. ]])\\n\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2017-03-15T03:06:25.594Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 10032 ms","longMsg":"completed parsing in 10032 ms","levelPath":"info","time":"2017-03-15T03:06:25.599Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","levelPath":"warn/api/etimedout","time":"2017-03-15T03:06:25.978Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": Error: ETIMEDOUT","stack":"Error: Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": Error: ETIMEDOUT","levelPath":"error","time":"2017-03-15T03:06:25.979Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": Error: ETIMEDOUT  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\no = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4\\n>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,186],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\no = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4\\n>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Error\nExtension Parse failure for \"c4ba9e77b5a83f44edd48134f27e3ada\": Error: ETIMEDOUT\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\no = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4\\n>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,186],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\no = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4\\n>>> array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ])\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2017-03-15T03:06:25.981Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 10028 ms","longMsg":"completed parsing in 10028 ms","levelPath":"info","time":"2017-03-15T03:06:25.986Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","levelPath":"warn/api/etimedout","time":"2017-03-15T03:06:25.987Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"cb0ce3a98deaac9bef08c8bb5ca110a5\": Error: ETIMEDOUT","stack":"Error: Extension Parse failure for \"cb0ce3a98deaac9bef08c8bb5ca110a5\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Extension Parse failure for \"cb0ce3a98deaac9bef08c8bb5ca110a5\": Error: ETIMEDOUT","levelPath":"error","time":"2017-03-15T03:06:25.988Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"cb0ce3a98deaac9bef08c8bb5ca110a5\": Error: ETIMEDOUT  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\na = np.array([-3, -2, 5, 2, 8])\\na.sum()\\na.max()\\na.min()\\na.mean()\\na.std()\\n\\n# These return the index of the min and max in the array\\na.argmax()\\na.argmin()\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,204],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\na = np.array([-3, -2, 5, 2, 8])\\na.sum()\\na.max()\\na.min()\\na.mean()\\na.std()\\n\\n# These return the index of the min and max in the array\\na.argmax()\\na.argmin()\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"cb0ce3a98deaac9bef08c8bb5ca110a5\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Error\nExtension Parse failure for \"cb0ce3a98deaac9bef08c8bb5ca110a5\": Error: ETIMEDOUT\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\na = np.array([-3, -2, 5, 2, 8])\\na.sum()\\na.max()\\na.min()\\na.mean()\\na.std()\\n\\n# These return the index of the min and max in the array\\na.argmax()\\na.argmin()\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,204],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\na = np.array([-3, -2, 5, 2, 8])\\na.sum()\\na.max()\\na.min()\\na.mean()\\na.std()\\n\\n# These return the index of the min and max in the array\\na.argmax()\\na.argmin()\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2017-03-15T03:06:25.989Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 10021 ms","longMsg":"completed parsing in 10021 ms","levelPath":"info","time":"2017-03-15T03:06:25.999Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"started parsing","longMsg":"started parsing","levelPath":"info","time":"2017-03-15T03:06:26.124Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":40,"logType":"warning/api/etimedout","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Failed API request, {\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","longMsg":"Failed API request,\n{\"error\":{\"code\":\"ETIMEDOUT\"},\"retries-remaining\":0}","levelPath":"warn/api/etimedout","time":"2017-03-15T03:06:26.325Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Extension Parse failure for \"985c48ec6eb588f45b9b37047eef4c6f\": Error: ETIMEDOUT","stack":"Error: Extension Parse failure for \"985c48ec6eb588f45b9b37047eef4c6f\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Extension Parse failure for \"985c48ec6eb588f45b9b37047eef4c6f\": Error: ETIMEDOUT","levelPath":"error","time":"2017-03-15T03:06:26.326Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":50,"logType":"error/extension","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"Error Extension Parse failure for \"985c48ec6eb588f45b9b37047eef4c6f\": Error: ETIMEDOUT  parsing extension token:  {\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\ns = np.arange(10)**2\\n>>> array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])\\n\\n\\n# Return a tuple by referencing their indexes\\ns[0], s[4], s[-1]\\n>>> (0, 16, 81)\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,206],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\ns = np.arange(10)**2\\n>>> array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])\\n\\n\\n# Return a tuple by referencing their indexes\\ns[0], s[4], s[-1]\\n>>> (0, 16, 81)\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","stack":"Error: Extension Parse failure for \"985c48ec6eb588f45b9b37047eef4c6f\": Error: ETIMEDOUT\n    at PHPParseRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:395:15)\n    at self.callback (/usr/lib/parsoid/node_modules/request/request.js:187:22)\n    at Request.EventEmitter.emit (events.js:95:17)\n    at Request.onRequestError (/usr/lib/parsoid/node_modules/request/request.js:813:8)\n    at ClientRequest.EventEmitter.emit (events.js:95:17)\n    at CleartextStream.socketErrorListener (http.js:1547:9)\n    at CleartextStream.EventEmitter.emit (events.js:95:17)\n    at null._onTimeout (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:39:8)\n    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)","longMsg":"Error\nExtension Parse failure for \"985c48ec6eb588f45b9b37047eef4c6f\": Error: ETIMEDOUT\n parsing extension token: \n{\"type\":\"SelfclosingTagTk\",\"name\":\"extension\",\"attribs\":[{\"k\":\"typeof\",\"v\":\"mw:Extension\"},{\"k\":\"name\",\"v\":\"syntaxhighlight\"},{\"k\":\"about\",\"v\":\"#mwt1\"},{\"k\":\"source\",\"v\":\"<syntaxhighlight lang=\\\"python3\\\">\\ns = np.arange(10)**2\\n>>> array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])\\n\\n\\n# Return a tuple by referencing their indexes\\ns[0], s[4], s[-1]\\n>>> (0, 16, 81)\\n</syntaxhighlight>\"},{\"k\":\"options\",\"v\":[{\"k\":\"lang\",\"v\":\"python3\",\"srcOffsets\":[17,21,23,30],\"vsrc\":\"python3\"}]}],\"dataAttribs\":{\"tsr\":[0,206],\"stx\":\"html\",\"src\":\"<syntaxhighlight lang=\\\"python3\\\">\\ns = np.arange(10)**2\\n>>> array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])\\n\\n\\n# Return a tuple by referencing their indexes\\ns[0], s[4], s[-1]\\n>>> (0, 16, 81)\\n</syntaxhighlight>\",\"tagWidths\":[32,18]}}","levelPath":"error/extension","time":"2017-03-15T03:06:26.327Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 10020 ms","longMsg":"completed parsing in 10020 ms","levelPath":"info","time":"2017-03-15T03:06:26.334Z","v":0}
{"name":"../src/lib/index.js","hostname":"ip-172-31-25-151","pid":4215,"level":30,"logType":"info","wiki":"wiki$0","title":"Numpy_cheat_sheet","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.27.1","msg":"completed parsing in 3823 ms","longMsg":"completed parsing in 3823 ms","levelPath":"info","time":"2017-03-15T03:06:29.943Z","v":0}
Mayzie added a subscriber: Mayzie.EditedMay 19 2017, 12:13 PM

@Arlolra

I am also experiencing the exact same issue as the OP. Having multiple SyntaxHighligher_GeSHi code blocks on a wiki page causes a CPU spike on the server and PHP to not respond to requests.

Running 2 cores, with 4GB of RAM and 4GB of unused swap space (output from free -mh below):

$ free -mh
             total       used       free     shared    buffers     cached
Mem:          3.9G       3.2G       645M        87M       116M       2.4G
-/+ buffers/cache:       791M       3.1G
Swap:         4.0G         0B       4.0G

It also appears that the htop command seems to misrepresent the number of nodejs instances running. top and ps aux | grep parsoid reveal that the correct number of instances are running when passing an -n X argument to the daemon, however htop shows many times this.

Running Debian 8 and using the Parsoid from the Wikimedia Parsoid Debian repository for Jessie. Using MariaDB 10.1.22 (at the time of writing).

How can this be fixed? FWIW, running a private wiki, behind nginx, utilising PHP 7.0 (from the dotdeb repository).

Can you provide the versions of Parsoid, MediaWiki, and SyntaxHighligher_GeSHi that you're using?

Mayzie added a comment.EditedMay 19 2017, 12:58 PM

@Arlolra

Whoops, my bad! I should have included them in my initial reply!

MediaWiki: 1.27.3
SyntaxHighlighter_GeSHi: 2.0

$ nodejs /usr/lib/parsoid/src/bin/server.js -c /etc/mediawiki/parsoid/config.yaml -v
parsoid 0.7.1
$ nodejs --version
v6.10.2

Can you try taking VE out of the equation and just confirming that Parsoid alone will render a page with lots of block?

Depending on your setup, this might look like:

http://localhost:8000/localhost/v3/page/html/Page_with_blocks

Open that in a browser or make a curl request.

@Arlolra

That appears to load fine and fast.

Uh huh, I'm noticing that for each code block, VE makes a parsefragment request to Parsoid when it opens (which seems odd seeing as how it already has the necessary rendering for that). It should only do that when a fragment was edited.

Can you open your browser console when trying to edit in VE and confirm you're seeing a bunch of XHR requests? You may enable that logging, depending on your browser.

So, opening a page with 20 blocks causes 20 requests, which is perhaps too much concurrency for your server (you either hit a deadlock or just take too long and timeout).

I'm going to talk with the VE folks / read the code to see what can be done about that, since it sounds unnecessary.

Mayzie added a comment.EditedMay 19 2017, 1:39 PM

@Arlolra

I am seeing the exact same thing.

I should note, that inline SyntaxHighlight objects do not have this problem and appear fine in Visual Editor (whereas the non-inline ones do not appear at all and generate a bunch of failed XHR requests that run until PHP's max_execution_time expires).

Kinda sad that MediaWiki + Visual Editor (and dependencies) cannot currently work nicely on a $40 Vultr instance :-(

@Arlolra

I noticed you mentioned above that there is a batching option for Parsoid that defaults to off. Can I enable that and will it help alleviate the load (even if temporarily)? If so, how? (I am using config.yaml, not the parserConfig.js file)

If the test in T151130#3276022 worked fine (ie. all the blocks rendered as expected, whether inline or not), then batching isn't going to help you, since it would only help for the initial render, which appears to be working.

The problem sounds like it's coming after, when all these individual parsefragment requests are made.

I should note, that inline SyntaxHighlight objects do not have this problem and appear fine in Visual Editor (whereas the non-inline ones do not appear at all).

Can you give me an example of each, so I'm clear I understand you? And, the distinction is that stark? Only inline elements render? No matter the ordering?

Kinda sad that MediaWiki + Visual Editor (and dependencies) cannot currently work nicely on a $40 Vultr instance :-(

Well, there's clearly a bug we're dealing with ... sorry, and thanks for your help and patience.

Mayzie added a comment.EditedMay 19 2017, 1:55 PM

(all wikitext syntax below)

The following will render in Visual Editor and can be edited within Visual Editor as one would expect, and will not generate any requests to /api.php:

* <syntaxhighlight lang="swift" inline>(NSInteger)numberOfSectionsInTableView:(UITableView * )tableView{}</syntaxhighlight>

The following will not render in Visual Editor (it will just appear as a blank white box, when hovering over you get the "Add Paragraph" button), and will generate a request to /api.php for each SyntaxHighlight block:

<syntaxhighlight lang="swift" line="line">
MFMailComposeViewControllerDelegate
</syntaxhighlight>

Ordering does not matter.

@Esanders from IRC,

oh I see, we compute the hash before we check if it is inline or block
so the block ones are getting their rendering stored under a hash containing "inline", but then we immediately rewrite them as "block" so on the next lookup you get a cache miss

Kinda sad that MediaWiki + Visual Editor (and dependencies) cannot currently work nicely on a $40 Vultr instance :-(

Well, there's clearly a bug we're dealing with ... sorry, and thanks for your help and patience.

No, I get that, but it's kinda odd that it hasn't been noticed before now (considering a server with 2 cores, an SSD, and 4GB of RAM isn't that small) :-/ Don't like being patient zero.

If you like, I am available on freenode IRC under the alias Mayzie. You can chat to me there? I should still be on for an hour or so.

Esanders renamed this task from Using visual editor with code blocks causes CPU spike and down time to SyntaxHighlight block nodes re-fetch their rendering on page load.May 19 2017, 2:03 PM

Change 354491 had a related patch set uploaded (by Esanders; owner: Esanders):
[mediawiki/extensions/SyntaxHighlight_GeSHi@master] Pass dataElement type to parent's toDataElement

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

Change 354492 had a related patch set uploaded (by Esanders; owner: Esanders):
[mediawiki/extensions/VisualEditor@master] Allow extension nodes to convert to a specified type of dataElement

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

Jdforrester-WMF set the point value for this task to 1.
Jdforrester-WMF moved this task from To Triage to TR0: Interrupt on the VisualEditor board.

Change 354492 merged by jenkins-bot:
[mediawiki/extensions/VisualEditor@master] Allow extension nodes to convert to a specified type of dataElement

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

Change 354491 merged by jenkins-bot:
[mediawiki/extensions/SyntaxHighlight_GeSHi@master] Pass dataElement type to parent's toDataElement

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

Jdforrester-WMF closed this task as Resolved.May 19 2017, 2:32 PM
Jdforrester-WMF removed a project: Patch-For-Review.
Restricted Application added a project: User-Ryasmeen. · View Herald TranscriptMay 19 2017, 2:32 PM