Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document how error is received from worker transport #1548

Merged
merged 7 commits into from Sep 5, 2022
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
26 changes: 26 additions & 0 deletions docs/transports.md
Expand Up @@ -887,3 +887,29 @@ $ node app.js | pino-websocket -a my-websocket-server.example.com -p 3004
For full documentation of command line switches read the [README](https://github.com/abeai/pino-websocket#readme).

[pino-pretty]: https://github.com/pinojs/pino-pretty

<a id="communication-between-pino-and-transport"></a>
## Communication between pino and transport
Here we discuss some technical details of how pino communicates with its [worker threads](https://nodejs.org/api/worker_threads.html).

pino uses [`thread-stream`](https://github.com/pinojs/thread-stream) to create a stream for transports.
When we create a stream with `thread-stream`, `thread-stream` spawns a [worker](https://github.com/pinojs/thread-stream/blob/f19ac8dbd602837d2851e17fbc7dfc5bbc51083f/index.js#L50-L60) (an independent JS execution thread).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Communication between pino and transport
Here we discuss some technical details of how pino communicates with its [worker threads](https://nodejs.org/api/worker_threads.html).
pino uses [`thread-stream`](https://github.com/pinojs/thread-stream) to create a stream for transports.
When we create a stream with `thread-stream`, `thread-stream` spawns a [worker](https://github.com/pinojs/thread-stream/blob/f19ac8dbd602837d2851e17fbc7dfc5bbc51083f/index.js#L50-L60) (an independent JS execution thread).
## Communication between Pino and transports
Here we discuss some technical details of how Pino communicates with its [worker threads](https://nodejs.org/api/worker_threads.html).
Pino uses [`thread-stream`](https://github.com/pinojs/thread-stream) to create a stream for transports.
When we create a stream with `thread-stream`, `thread-stream` spawns a [worker](https://github.com/pinojs/thread-stream/blob/f19ac8dbd602837d2851e17fbc7dfc5bbc51083f/index.js#L50-L60) (an independent JavaScript execution thread).



### Error message
How is error message propagated from a transport worker to pino?
Say we have a transport with an error listener:
```js
// index.js
const transport = pino.transport({
target: './transport.js'
})

transport.on('error', err => {
console.error('error caught', err)
})

const log = pino(transport)
```
When our worker emits an error event, the worker has listeners for it: [error](https://github.com/pinojs/thread-stream/blob/f19ac8dbd602837d2851e17fbc7dfc5bbc51083f/lib/worker.js#L59-L70) and [unhandledRejection](https://github.com/pinojs/thread-stream/blob/f19ac8dbd602837d2851e17fbc7dfc5bbc51083f/lib/worker.js#L135-L141). These listeners send the error message to the main thread where pino is in.
When pino receives the error message, it further [emit](https://github.com/pinojs/thread-stream/blob/f19ac8dbd602837d2851e17fbc7dfc5bbc51083f/index.js#L349) the error message. Finally the error message arrives at our index.js and caught by our error listener.
jsumners marked this conversation as resolved.
Show resolved Hide resolved