Stream finished does not always work with http incoming message
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 122k
- Forks
- 37.3k
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 283
Descripción
- Version: v15.12.0
- Platform: Darwin Kernel Version 20.3.0
- Subsystem: http
What steps will reproduce the bug?
The stream.finished never resolves or rejects when applied onto a destroyed incoming message like in example below. It finishes for example when applied on a destroyed file stream. Also it finishes when the line with await new Promise(r => setTimeout(r, 1000)); is commented. This looks really inconsistent.
let http = require("http");
let { finished } = require("stream/promises");
let server = http.createServer(async function(req, res)
{
for await (let chunk of req) break;
await new Promise(r => setTimeout(r, 1000));
console.log("waiting");
await finished(req);
console.log("sending");
res.end();
});
(async function()
{
await new Promise(resolve => server.listen(resolve));
let req = http.request({ port: server.address().port, method: "post" }).end("abc");
try
{
let res = await new Promise((resolve, reject) => req.on("response", resolve).on("error", reject));
await finished(res.resume());
}
catch(e)
{
console.log(e);
}
}());
How often does it reproduce? Is there a required condition?
Always.
What is the expected behavior?
Error: socket hang up
waiting
sending
What do you see instead?
Error: socket hang up
waiting
Additional information
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza ejecutando la reproducción proporcionada de http.createServer en Node v15.12.0 y siguiendo la interacción entre la solicitud entrante, la función finished de stream/promises y el await retrasado. Compara el comportamiento de la solicitud destruida con el comportamiento del flujo de archivo mostrado en el informe. Se considera terminado cuando la reproducción alcanza "sending" y produce la salida esperada de socket hang-up.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript
- Área
- networking
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100