lastmodified is a required page lead property. However, not all pages have the dc:modified metadata header that we rely on for this, which is causing 500s in production.
This seems to be a new class of error since yesterday's Parsoid deployment (it was apparently so reliably present that we weren't even bothering to check for its absence) but might just be an artifact of everything being regenerated in RESTBase.
Questions:
- Does this indicate an upstream problem?
- What's the correct way to handle the absence of dc:modified? Should the lastmodified property be made optional, or should we introduce something like a new unknown value?
Example:
https://en.wikipedia.org/api/rest_v1/page/html/Haptic_suit
[2017-12-13T13:45:38.902Z] ERROR: mobileapps/152 on scb2001: 500: internal_error (message="500: internal_error", status=500, type=internal_error, detail="Cannot read property 'getAttribute' of undefined", levelPath=error/500, request_id=4380cc84-dfed-11e7-b043-499e7786d95b) stack: TypeError: Cannot read property 'getAttribute' of undefined at getModified (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/src/lib/parsoid-access.js:79:68) at Request.getParsoidHtml.then (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/src/lib/parsoid-access.js:121:33) at Request.tryCatcher (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/util.js:16:23) at Promise._settlePromiseFromHandler (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:512:31) at Promise._settlePromise (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:569:18) at Promise._settlePromise0 (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:614:10) at Promise._settlePromises (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:693:18) at Promise._fulfill (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:638:18) at Promise._resolveCallback (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:432:57) at Promise._settlePromiseFromHandler (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:524:17) at Promise._settlePromise (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:569:18) at Promise._settlePromise0 (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:614:10) at Promise._settlePromises (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:693:18) at Promise._fulfill (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/promise.js:638:18) at Request._callback (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/bluebird/js/release/nodeback.js:45:21) at Request.self.callback (/srv/deployment/mobileapps/deploy-cache/revs/5832a8cbd5e65e241117376e75b6fff978bf5448/node_modules/request/request.js:186:22) -- request: { "url": "/en.wikipedia.org/v1/page/mobile-sections/Haptic_vest", "headers": { "x-request-id": "4380cc84-dfed-11e7-b043-499e7786d95b", "content-length": "0" }, "method": "GET", "params": { "0": "/en.wikipedia.org/v1/page/mobile-sections/Haptic_vest" }, "query": {}, "remoteAddress": "10.192.16.185", "remotePort": 49560 }