[BUG] `maxBatchSize: NaN` is accepted and silently disables batching
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 82/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- javascript, node.js
- Área
- backend, performance
Línea de trabajo
Lee getValidMaxBatchSize y la validación del constructor en el código fuente de DataLoader; el issue identifica la comparación que falla y la comprobación prevista. Encuentra las pruebas existentes para la validación de maxBatchSize y añade cobertura para NaN. El trabajo estará terminado cuando la construcción con NaN lance el TypeError esperado y pasen las pruebas relacionadas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
new DataLoader(fn, { maxBatchSize: NaN }) throws TypeError: maxBatchSize must be a positive number: NaN, the same as it does for 0, negative numbers, and non-numbers.
Current Behavior
The constructor accepts NaN. getCurrentBatch then compares keys.length < NaN, which is always false, so every load() call starts a new batch. Batching is turned off without any error or warning.
Possible Solution
In getValidMaxBatchSize, replace maxBatchSize < 1 with !(maxBatchSize >= 1) so that NaN fails the check.
Steps to Reproduce
const DataLoader = require('dataloader');
const calls = [];
const loader = new DataLoader(
async keys => {
calls.push(keys);
return keys;
},
// For example, read from an environment variable that is not set.
{ maxBatchSize: Number(process.env.MAX_BATCH_SIZE) },
);
Promise.all([loader.load(1), loader.load(2), loader.load(3)]).then(() =>
console.log(JSON.stringify(calls)),
);
// Prints [[1],[2],[3]]. Expected a TypeError from the constructor.
Context
maxBatchSize often comes from configuration, for example Number(process.env.X) or parseInt(value, 10). Both return NaN when the value is missing or invalid. The loader keeps working, but it sends one request per key, and nothing points to the misconfiguration.
- Lenguaje dominante
- JavaScript
- Estrellas
- 13.4k
- Forks
- 522
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la 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.
Más de graphql/dataloader
-
Failed batch evicts a replacement cache entry after clear/primePosiblemente ocupada @Claire-ovo la tomó hace 11 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 57/100
graphql/dataloader#403 ·
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 38/100
graphql/dataloader#393 ·
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
graphql/dataloader#382 ·
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
graphql/dataloader#379 · 2 comentarios · 5 reacciones ·
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
graphql/dataloader#377 · 1 comentario · 1 reacción ·
Todos los issues de graphql/dataloader
Issues similares
-
bug needs-triage potential-regression
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
aws/aws-sdk-js-v3#8408 ·
Los mantenedores suelen responder en 1 día
-
[v3] KeyBindingManager calls (Add/Remove) are not converted into a case-insensitive accelerator.KeyAbiertoBug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 4 días
-
fix(docs): align git__gh troubleshooting with its actual failure pathsPosiblemente ocupada @akhil9tiet la tomó hoy. Abiertobug docs p2
Dificultad 1/5 1-3 horas Aptitud para principiantes 78/100
vercel/eve#6130 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100