[BUG] `maxBatchSize: NaN` is accepted and silently disables batching
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 82/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, node.js
- Ambito
- backend, performance
Direzione di ricerca
Leggi getValidMaxBatchSize e la convalida del costruttore nel codice sorgente di DataLoader; l’issue indica il confronto che fallisce e il controllo previsto. Trova i test esistenti per la convalida di maxBatchSize e aggiungi test per NaN. Il lavoro è completato quando la costruzione con NaN genera il TypeError previsto e i test correlati passano.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- JavaScript
- Stelle
- 13.4k
- Fork
- 522
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di graphql/dataloader
-
Failed batch evicts a replacement cache entry after clear/primeForse già presa @Claire-ovo l’ha presa 11 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 57/100
graphql/dataloader#403 ·
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 38/100
graphql/dataloader#393 ·
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
graphql/dataloader#382 ·
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
graphql/dataloader#379 · 2 commenti · 5 reazioni ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
graphql/dataloader#377 · 1 commento · 1 reazione ·
Tutte le issue di graphql/dataloader
Issue simili
-
bug needs-triage potential-regression
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
aws/aws-sdk-js-v3#8408 ·
I maintainer di solito rispondono entro 1 giorno
-
[v3] KeyBindingManager calls (Add/Remove) are not converted into a case-insensitive accelerator.KeyApertaBug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 4 giorni
-
fix(docs): align git__gh troubleshooting with its actual failure pathsForse già presa @akhil9tiet l’ha presa oggi. Apertabug docs p2
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
vercel/eve#6130 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100