-
-
Notifications
You must be signed in to change notification settings - Fork 32.7k
Closed
Labels
async_hooksIssues and PRs related to the async hooks subsystem.Issues and PRs related to the async hooks subsystem.confirmed-bugIssues with confirmed bugs.Issues with confirmed bugs.
Description
- Version: 14.5.0
- Platform: macos
- Subsystem: async_hooks
What steps will reproduce the bug?
'use strict';
const http = require('http');
const { AsyncLocalStorage } = require('async_hooks');
const session = new AsyncLocalStorage();
const agent = new http.Agent({
maxSockets: 1
});
const get = (path, callback) => {
http.request({
agent,
host: 'example.com',
method: 'GET',
path,
}, callback).end();
};
let id = 0;
const server = http.createServer((req, res) => {
session.run(id++, () => {
console.error('new req', session.getStore());
get('/', (remote) => {
console.error('remote response', session.getStore());
remote.pipe(res);
});
});
}).listen(0, () => {
const { port } = server.address();
http.request({ port }).end();
http.request({ port }).end();
});
How often does it reproduce? Is there a required condition?
Always. No conditions.
What is the expected behavior?
I expect this code to print:
new req 0
new req 1
remote response 0
remote response 1
What do you see instead?
new req 0
new req 1
remote response 0
remote response 0
Additional information
This is very much expected behavior of CLS storage. Any sort of pooling would result in similar issues. What's concerning is that it can happen with use of an existing core primitive (http.Agent
). In fact, use of any agent with maxSockets !== Infinity
or keepAlive
set to true
would result in similar behavior.
This behavior can be documented, but I'd imagine that such documentation would look like an incompatibility within Node.js core. Given that whole async_hooks
module experimental - should we consider removing AsyncLocalStorage
instead?
cc @nodejs/collaborators
tadjik1tadjik1shaunwarman
Metadata
Metadata
Assignees
Labels
async_hooksIssues and PRs related to the async hooks subsystem.Issues and PRs related to the async hooks subsystem.confirmed-bugIssues with confirmed bugs.Issues with confirmed bugs.