[BUG] `maxBatchSize: NaN` is accepted and silently disables batching
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 82/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- javascript, node.js
- Lĩnh vực
- backend, performance
Hướng nghiên cứu
Đọc getValidMaxBatchSize và phần xác thực trong constructor ở mã nguồn DataLoader; issue chỉ ra phép so sánh bị lỗi và điều kiện kiểm tra dự kiến. Tìm các bài kiểm tra hiện có cho phần xác thực maxBatchSize và bổ sung kiểm thử cho NaN. Hoàn tất khi việc khởi tạo với NaN ném ra TypeError như mong đợi và các bài kiểm tra liên quan đều đạt.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- JavaScript
- Star
- 13.4k
- Fork
- 522
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của graphql/dataloader
-
Failed batch evicts a replacement cache entry after clear/primeCó thể đã có người làm @Claire-ovo đã nhận 11 ngày trước. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 57/100
graphql/dataloader#403 ·
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 38/100
graphql/dataloader#393 ·
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
graphql/dataloader#382 ·
-
enhancement
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
graphql/dataloader#379 · 2 bình luận · 5 reaction ·
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
graphql/dataloader#377 · 1 bình luận · 1 reaction ·
Tất cả issue của graphql/dataloader
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Add: ON Football HD feed LogoĐang mởapproved check:passed logos:add
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 74/100
Maintainer thường phản hồi trong vòng 2 ngày
-
binding:python bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
BUG: Unhandled TypeError in updateMedicine and updateDischargeLog when data is null/undefinedĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
AOSSIE-Org/BabyNest#310 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug needs-triage potential-regression
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
aws/aws-sdk-js-v3#8408 ·
Maintainer thường phản hồi trong vòng 1 ngày