Skip to content

Commit

Permalink
Document that the error event on the thread stream is fatal (#2116)
Browse files Browse the repository at this point in the history
* 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]>
  • Loading branch information
3 people authored Jan 16, 2025
1 parent ad864b7 commit 8ab2971
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 2 deletions.
3 changes: 3 additions & 0 deletions docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -1307,6 +1307,9 @@ module.exports = function build () {
}
```
Note that _any `'error'`_ event emitted by the transport must be considered a fatal error and the process must be terminated.
Error events are not recoverable.
For more on transports, how they work, and how to create them see the [`Transports documentation`](/docs/transports.md).
* See [`Transports`](/docs/transports.md)
Expand Down
13 changes: 13 additions & 0 deletions test/fixtures/crashing-transport.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const { Writable } = require('node:stream')

module.exports = () =>
new Writable({
autoDestroy: true,
write (chunk, enc, cb) {
setImmediate(() => {
/* eslint-disable no-empty */
for (let i = 0; i < 1e3; i++) {}
process.exit(0)
})
}
})
3 changes: 1 addition & 2 deletions test/transport/core.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
const os = require('node:os')
const { join } = require('node:path')
const { once } = require('node:events')
const { setImmediate: immediate } = require('node:timers/promises')
const { readFile, writeFile } = require('node:fs').promises
const { watchFileCreated, watchForWrite, file } = require('../helper')
const { test } = require('tap')
Expand All @@ -12,10 +13,8 @@ const strip = require('strip-ansi')
const execa = require('execa')
const writer = require('flush-write-stream')
const rimraf = require('rimraf')
const { promisify } = require('node:util')
const { tmpdir } = os

const immediate = promisify(setImmediate)
const pid = process.pid
const hostname = os.hostname()

Expand Down
34 changes: 34 additions & 0 deletions test/transport/crash.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
'use strict'

const { join } = require('node:path')
const { once } = require('node:events')
const { setImmediate: immediate } = require('node:timers/promises')
const { test } = require('tap')
const pino = require('../../')

test('pino.transport emits error if the worker exits with 0 unexpectably', async ({ same, teardown, equal }) => {
// This test will take 10s, because flushSync waits for 10s
const transport = pino.transport({
target: join(__dirname, '..', 'fixtures', 'crashing-transport.js'),
sync: true
})
teardown(transport.end.bind(transport))

await once(transport, 'ready')

let maybeError
transport.on('error', (err) => {
maybeError = err
})

const logger = pino(transport)
for (let i = 0; i < 100000; i++) {
logger.info('hello')
}

await once(transport.worker, 'exit')

await immediate()

same(maybeError.message, 'the worker has exited')
})

0 comments on commit 8ab2971

Please sign in to comment.