Browse Source
fix: jobs/worker - pass through job error from worker process (#3822)
pull/3850/head
LK HO
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
22 additions and
5 deletions
-
server/core/scheduler.js
-
server/core/worker.js
-
server/jobs/rebuild-tree.js
-
server/jobs/render-page.js
|
|
@ -55,14 +55,22 @@ class Job { |
|
|
|
`--job=${this.name}`, |
|
|
|
`--data=${data}` |
|
|
|
], { |
|
|
|
cwd: WIKI.ROOTPATH |
|
|
|
cwd: WIKI.ROOTPATH, |
|
|
|
stdio: ['inherit', 'inherit', 'pipe', 'ipc'] |
|
|
|
}) |
|
|
|
const stderr = []; |
|
|
|
proc.stderr.on('data', chunk => stderr.push(chunk)) |
|
|
|
this.finished = new Promise((resolve, reject) => { |
|
|
|
proc.on('exit', (code, signal) => { |
|
|
|
const data = Buffer.concat(stderr).toString() |
|
|
|
if (code === 0) { |
|
|
|
resolve() |
|
|
|
resolve(data) |
|
|
|
} else { |
|
|
|
reject(signal) |
|
|
|
const err = new Error(`Error when running job ${this.name}: ${data}`) |
|
|
|
err.exitSignal = signal |
|
|
|
err.exitCode = code |
|
|
|
err.stderr = data |
|
|
|
reject(err) |
|
|
|
} |
|
|
|
proc.kill() |
|
|
|
}) |
|
|
|
|
|
@ -14,6 +14,11 @@ WIKI.logger = require('./logger').init('JOB') |
|
|
|
const args = require('yargs').argv |
|
|
|
|
|
|
|
;(async () => { |
|
|
|
await require(`../jobs/${args.job}`)(args.data) |
|
|
|
process.exit(0) |
|
|
|
try { |
|
|
|
await require(`../jobs/${args.job}`)(args.data) |
|
|
|
process.exit(0) |
|
|
|
} catch (e) { |
|
|
|
await new Promise(resolve => process.stderr.write(e.message, resolve)) |
|
|
|
process.exit(1) |
|
|
|
} |
|
|
|
})() |
|
|
@ -74,5 +74,7 @@ module.exports = async (pageId) => { |
|
|
|
} catch (err) { |
|
|
|
WIKI.logger.error(`Rebuilding page tree: [ FAILED ]`) |
|
|
|
WIKI.logger.error(err.message) |
|
|
|
// exit process with error code
|
|
|
|
throw err |
|
|
|
} |
|
|
|
} |
|
|
@ -90,5 +90,7 @@ module.exports = async (pageId) => { |
|
|
|
} catch (err) { |
|
|
|
WIKI.logger.error(`Rendering page ID ${pageId}: [ FAILED ]`) |
|
|
|
WIKI.logger.error(err.message) |
|
|
|
// exit process with error code
|
|
|
|
throw err |
|
|
|
} |
|
|
|
} |