Skip to content

Commit 8ab2971

Browse files
mcollinakibertoadjsumners
authored
Document that the error event on the thread stream is fatal (#2116)
* Document that the error event on the thread stream is fatal Signed-off-by: Matteo Collina <[email protected]> * Update api.md Co-authored-by: Igor Savin <[email protected]> * Update docs/api.md Co-authored-by: James Sumners <[email protected]> --------- Signed-off-by: Matteo Collina <[email protected]> Co-authored-by: Igor Savin <[email protected]> Co-authored-by: James Sumners <[email protected]>
1 parent ad864b7 commit 8ab2971

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

docs/api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,6 +1307,9 @@ module.exports = function build () {
13071307
}
13081308
```
13091309
1310+
Note that _any `'error'`_ event emitted by the transport must be considered a fatal error and the process must be terminated.
1311+
Error events are not recoverable.
1312+
13101313
For more on transports, how they work, and how to create them see the [`Transports documentation`](/docs/transports.md).
13111314
13121315
* See [`Transports`](/docs/transports.md)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const { Writable } = require('node:stream')
2+
3+
module.exports = () =>
4+
new Writable({
5+
autoDestroy: true,
6+
write (chunk, enc, cb) {
7+
setImmediate(() => {
8+
/* eslint-disable no-empty */
9+
for (let i = 0; i < 1e3; i++) {}
10+
process.exit(0)
11+
})
12+
}
13+
})

test/transport/core.test.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
const os = require('node:os')
44
const { join } = require('node:path')
55
const { once } = require('node:events')
6+
const { setImmediate: immediate } = require('node:timers/promises')
67
const { readFile, writeFile } = require('node:fs').promises
78
const { watchFileCreated, watchForWrite, file } = require('../helper')
89
const { test } = require('tap')
@@ -12,10 +13,8 @@ const strip = require('strip-ansi')
1213
const execa = require('execa')
1314
const writer = require('flush-write-stream')
1415
const rimraf = require('rimraf')
15-
const { promisify } = require('node:util')
1616
const { tmpdir } = os
1717

18-
const immediate = promisify(setImmediate)
1918
const pid = process.pid
2019
const hostname = os.hostname()
2120

test/transport/crash.test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'use strict'
2+
3+
const { join } = require('node:path')
4+
const { once } = require('node:events')
5+
const { setImmediate: immediate } = require('node:timers/promises')
6+
const { test } = require('tap')
7+
const pino = require('../../')
8+
9+
test('pino.transport emits error if the worker exits with 0 unexpectably', async ({ same, teardown, equal }) => {
10+
// This test will take 10s, because flushSync waits for 10s
11+
const transport = pino.transport({
12+
target: join(__dirname, '..', 'fixtures', 'crashing-transport.js'),
13+
sync: true
14+
})
15+
teardown(transport.end.bind(transport))
16+
17+
await once(transport, 'ready')
18+
19+
let maybeError
20+
transport.on('error', (err) => {
21+
maybeError = err
22+
})
23+
24+
const logger = pino(transport)
25+
for (let i = 0; i < 100000; i++) {
26+
logger.info('hello')
27+
}
28+
29+
await once(transport.worker, 'exit')
30+
31+
await immediate()
32+
33+
same(maybeError.message, 'the worker has exited')
34+
})

0 commit comments

Comments
 (0)