net: make multiple improvements to net.BlockList - #64974

Closed
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements
Closed

net: make multiple improvements to net.BlockList#64974
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements

Conversation

@jasnell

Copy link
Copy Markdown
Member

New APIs:

  • addCIDR(cidr): Parse CIDR string, auto-detect family
  • addCIDRs(cidrs): Batch CIDR add
  • addAddresses(addresses): Batch address add
  • removeAddress(address): Remove exact address rule
  • removeRange(start, end): Remove range rule
  • removeSubnet(net, prefix): Remove subnet rule (+ trie cleanup)
  • removeCIDR(cidr): Remove subnet by CIDR string
  • clear(): Remove all rules
  • size: Rule count without allocating rules array
  • BlockList.PRIVATE_RANGES: Array of RFC 1918 + loopback + link-local + ULA CIDRs

Performance improvements:

  • Constant-time address lookup
  • Radix trie for subnet lookup
  • String check fast path
  • V8 fast api for checks
  • Batch insert
  • R/W locking

Adds a benchmark and more tests.

  • Addresses
    • 10 rules ... 9x perf improvement
    • 100 rules ... 13x perf improvement
    • 1000 rules ... 58x perf improvement
    • 10000 rules ... 1186x perf improvement
  • Subnets
    • 10 rules ... 5x perf improvement
    • 100 rules ... 6x perf improvement
    • 1000 rules ... 24x perf improvement
    • 10000 rules ... 418x perf improvement

Essentially went from O(n) to mostly O(1) for most cases.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net
  • @nodejs/performance

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Aug 3, 2026
@codecov

codecovBot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.09901% with 50 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.30%. Comparing base (31cde9f) to head (d5bb049).
⚠️ Report is 36 commits behind head on main.

Files with missing linesPatch %Lines
src/node_sockaddr.cc83.10%8 Missing and 42 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #64974 +/- ##
========================================
Coverage 90.30% 90.30% ========================================
Files 759 759 Lines 247621 248085 +464 Branches 46672 46785 +113 ========================================
+ Hits 223603 224044 +441 + Misses 15473 15462 -11 - Partials 8545 8579 +34 
Files with missing linesCoverage Δ
lib/internal/blocklist.js94.74% <100.00%> (+3.35%)⬆️
src/node_sockaddr.h51.28% <100.00%> (+13.04%)⬆️
src/node_sockaddr.cc74.67% <83.10%> (+4.67%)⬆️

... and 38 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 390b7fa to 5623bfbCompareAugust 3, 2026 17:04
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadsrc/node_sockaddr.cc
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadlib/internal/blocklist.js
Comment threadtest/parallel/test-blocklist-fast-api.js Outdated
Comment threadlib/internal/blocklist.js Outdated
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 5623bfb to a5c9edcCompareAugust 3, 2026 20:54
@richardlaurichardlau added the semver-minor PRs that contain new features and should be released in the next minor version. label Aug 3, 2026
jasnelland others added 19 commits August 4, 2026 06:28
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Take O(1) fast-path when possible
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Claude
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from a5c9edc to 21932a2CompareAugust 4, 2026 13:28
@jasnell
jasnell requested a review from pimterryAugust 4, 2026 13:47
@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 4, 2026
@jasnell

This comment was marked as resolved.

@benjamingrbenjamingr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

neat

Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the commit-queue-squash PRs the Commit Queue should land as one squashed commit. label Aug 5, 2026
Comment threadsrc/node_sockaddr.h
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@Ethan-ArrowoodEthan-Arrowood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

nodejs-github-bot commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

jasnell added a commit that referenced this pull request Aug 6, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Landed in 27d6cfa

@jasnelljasnell closed this Aug 6, 2026
aduh95 pushed a commit that referenced this pull request Aug 13, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
nodejs-github-bot added a commit that referenced this pull request Aug 25, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 26, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs with CI started, the required approvals, and no outstanding review comments.c++Issues and PRs that require attention from people who are familiar with C++.commit-queue-squashPRs the Commit Queue should land as one squashed commit.needs-ciPRs that need a full CI run.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@jasnell@nodejs-github-bot@benjamingr@pimterry@anonrig@Ethan-Arrowood@richardlau
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

net: make multiple improvements to net.BlockList - #64974

Closed
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements
Closed

net: make multiple improvements to net.BlockList#64974
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements

Conversation

@jasnell

Copy link
Copy Markdown
Member

New APIs:

  • addCIDR(cidr): Parse CIDR string, auto-detect family
  • addCIDRs(cidrs): Batch CIDR add
  • addAddresses(addresses): Batch address add
  • removeAddress(address): Remove exact address rule
  • removeRange(start, end): Remove range rule
  • removeSubnet(net, prefix): Remove subnet rule (+ trie cleanup)
  • removeCIDR(cidr): Remove subnet by CIDR string
  • clear(): Remove all rules
  • size: Rule count without allocating rules array
  • BlockList.PRIVATE_RANGES: Array of RFC 1918 + loopback + link-local + ULA CIDRs

Performance improvements:

  • Constant-time address lookup
  • Radix trie for subnet lookup
  • String check fast path
  • V8 fast api for checks
  • Batch insert
  • R/W locking

Adds a benchmark and more tests.

  • Addresses
    • 10 rules ... 9x perf improvement
    • 100 rules ... 13x perf improvement
    • 1000 rules ... 58x perf improvement
    • 10000 rules ... 1186x perf improvement
  • Subnets
    • 10 rules ... 5x perf improvement
    • 100 rules ... 6x perf improvement
    • 1000 rules ... 24x perf improvement
    • 10000 rules ... 418x perf improvement

Essentially went from O(n) to mostly O(1) for most cases.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net
  • @nodejs/performance

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Aug 3, 2026
@codecov

codecovBot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.09901% with 50 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.30%. Comparing base (31cde9f) to head (d5bb049).
⚠️ Report is 36 commits behind head on main.

Files with missing linesPatch %Lines
src/node_sockaddr.cc83.10%8 Missing and 42 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #64974 +/- ##
========================================
Coverage 90.30% 90.30% ========================================
Files 759 759 Lines 247621 248085 +464 Branches 46672 46785 +113 ========================================
+ Hits 223603 224044 +441 + Misses 15473 15462 -11 - Partials 8545 8579 +34 
Files with missing linesCoverage Δ
lib/internal/blocklist.js94.74% <100.00%> (+3.35%)⬆️
src/node_sockaddr.h51.28% <100.00%> (+13.04%)⬆️
src/node_sockaddr.cc74.67% <83.10%> (+4.67%)⬆️

... and 38 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 390b7fa to 5623bfbCompareAugust 3, 2026 17:04
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadsrc/node_sockaddr.cc
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadlib/internal/blocklist.js
Comment threadtest/parallel/test-blocklist-fast-api.js Outdated
Comment threadlib/internal/blocklist.js Outdated
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 5623bfb to a5c9edcCompareAugust 3, 2026 20:54
@richardlaurichardlau added the semver-minor PRs that contain new features and should be released in the next minor version. label Aug 3, 2026
jasnelland others added 19 commits August 4, 2026 06:28
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Take O(1) fast-path when possible
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Claude
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from a5c9edc to 21932a2CompareAugust 4, 2026 13:28
@jasnell
jasnell requested a review from pimterryAugust 4, 2026 13:47
@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 4, 2026
@jasnell

This comment was marked as resolved.

@benjamingrbenjamingr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

neat

Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the commit-queue-squash PRs the Commit Queue should land as one squashed commit. label Aug 5, 2026
Comment threadsrc/node_sockaddr.h
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@Ethan-ArrowoodEthan-Arrowood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

nodejs-github-bot commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

jasnell added a commit that referenced this pull request Aug 6, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Landed in 27d6cfa

@jasnelljasnell closed this Aug 6, 2026
aduh95 pushed a commit that referenced this pull request Aug 13, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
nodejs-github-bot added a commit that referenced this pull request Aug 25, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 26, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs with CI started, the required approvals, and no outstanding review comments.c++Issues and PRs that require attention from people who are familiar with C++.commit-queue-squashPRs the Commit Queue should land as one squashed commit.needs-ciPRs that need a full CI run.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@jasnell@nodejs-github-bot@benjamingr@pimterry@anonrig@Ethan-Arrowood@richardlau
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

net: make multiple improvements to net.BlockList - #64974

Closed
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements
Closed

net: make multiple improvements to net.BlockList#64974
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements

Conversation

@jasnell

Copy link
Copy Markdown
Member

New APIs:

  • addCIDR(cidr): Parse CIDR string, auto-detect family
  • addCIDRs(cidrs): Batch CIDR add
  • addAddresses(addresses): Batch address add
  • removeAddress(address): Remove exact address rule
  • removeRange(start, end): Remove range rule
  • removeSubnet(net, prefix): Remove subnet rule (+ trie cleanup)
  • removeCIDR(cidr): Remove subnet by CIDR string
  • clear(): Remove all rules
  • size: Rule count without allocating rules array
  • BlockList.PRIVATE_RANGES: Array of RFC 1918 + loopback + link-local + ULA CIDRs

Performance improvements:

  • Constant-time address lookup
  • Radix trie for subnet lookup
  • String check fast path
  • V8 fast api for checks
  • Batch insert
  • R/W locking

Adds a benchmark and more tests.

  • Addresses
    • 10 rules ... 9x perf improvement
    • 100 rules ... 13x perf improvement
    • 1000 rules ... 58x perf improvement
    • 10000 rules ... 1186x perf improvement
  • Subnets
    • 10 rules ... 5x perf improvement
    • 100 rules ... 6x perf improvement
    • 1000 rules ... 24x perf improvement
    • 10000 rules ... 418x perf improvement

Essentially went from O(n) to mostly O(1) for most cases.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net
  • @nodejs/performance

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Aug 3, 2026
@codecov

codecovBot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.09901% with 50 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.30%. Comparing base (31cde9f) to head (d5bb049).
⚠️ Report is 36 commits behind head on main.

Files with missing linesPatch %Lines
src/node_sockaddr.cc83.10%8 Missing and 42 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #64974 +/- ##
========================================
Coverage 90.30% 90.30% ========================================
Files 759 759 Lines 247621 248085 +464 Branches 46672 46785 +113 ========================================
+ Hits 223603 224044 +441 + Misses 15473 15462 -11 - Partials 8545 8579 +34 
Files with missing linesCoverage Δ
lib/internal/blocklist.js94.74% <100.00%> (+3.35%)⬆️
src/node_sockaddr.h51.28% <100.00%> (+13.04%)⬆️
src/node_sockaddr.cc74.67% <83.10%> (+4.67%)⬆️

... and 38 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 390b7fa to 5623bfbCompareAugust 3, 2026 17:04
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadsrc/node_sockaddr.cc
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadlib/internal/blocklist.js
Comment threadtest/parallel/test-blocklist-fast-api.js Outdated
Comment threadlib/internal/blocklist.js Outdated
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 5623bfb to a5c9edcCompareAugust 3, 2026 20:54
@richardlaurichardlau added the semver-minor PRs that contain new features and should be released in the next minor version. label Aug 3, 2026
jasnelland others added 19 commits August 4, 2026 06:28
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Take O(1) fast-path when possible
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Claude
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from a5c9edc to 21932a2CompareAugust 4, 2026 13:28
@jasnell
jasnell requested a review from pimterryAugust 4, 2026 13:47
@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 4, 2026
@jasnell

This comment was marked as resolved.

@benjamingrbenjamingr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

neat

Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the commit-queue-squash PRs the Commit Queue should land as one squashed commit. label Aug 5, 2026
Comment threadsrc/node_sockaddr.h
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@Ethan-ArrowoodEthan-Arrowood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

nodejs-github-bot commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

jasnell added a commit that referenced this pull request Aug 6, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Landed in 27d6cfa

@jasnelljasnell closed this Aug 6, 2026
aduh95 pushed a commit that referenced this pull request Aug 13, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
nodejs-github-bot added a commit that referenced this pull request Aug 25, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 26, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs with CI started, the required approvals, and no outstanding review comments.c++Issues and PRs that require attention from people who are familiar with C++.commit-queue-squashPRs the Commit Queue should land as one squashed commit.needs-ciPRs that need a full CI run.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@jasnell@nodejs-github-bot@benjamingr@pimterry@anonrig@Ethan-Arrowood@richardlau
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

net: make multiple improvements to net.BlockList - #64974

Closed
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements
Closed

net: make multiple improvements to net.BlockList#64974
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements

Conversation

@jasnell

Copy link
Copy Markdown
Member

New APIs:

  • addCIDR(cidr): Parse CIDR string, auto-detect family
  • addCIDRs(cidrs): Batch CIDR add
  • addAddresses(addresses): Batch address add
  • removeAddress(address): Remove exact address rule
  • removeRange(start, end): Remove range rule
  • removeSubnet(net, prefix): Remove subnet rule (+ trie cleanup)
  • removeCIDR(cidr): Remove subnet by CIDR string
  • clear(): Remove all rules
  • size: Rule count without allocating rules array
  • BlockList.PRIVATE_RANGES: Array of RFC 1918 + loopback + link-local + ULA CIDRs

Performance improvements:

  • Constant-time address lookup
  • Radix trie for subnet lookup
  • String check fast path
  • V8 fast api for checks
  • Batch insert
  • R/W locking

Adds a benchmark and more tests.

  • Addresses
    • 10 rules ... 9x perf improvement
    • 100 rules ... 13x perf improvement
    • 1000 rules ... 58x perf improvement
    • 10000 rules ... 1186x perf improvement
  • Subnets
    • 10 rules ... 5x perf improvement
    • 100 rules ... 6x perf improvement
    • 1000 rules ... 24x perf improvement
    • 10000 rules ... 418x perf improvement

Essentially went from O(n) to mostly O(1) for most cases.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net
  • @nodejs/performance

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Aug 3, 2026
@codecov

codecovBot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.09901% with 50 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.30%. Comparing base (31cde9f) to head (d5bb049).
⚠️ Report is 36 commits behind head on main.

Files with missing linesPatch %Lines
src/node_sockaddr.cc83.10%8 Missing and 42 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #64974 +/- ##
========================================
Coverage 90.30% 90.30% ========================================
Files 759 759 Lines 247621 248085 +464 Branches 46672 46785 +113 ========================================
+ Hits 223603 224044 +441 + Misses 15473 15462 -11 - Partials 8545 8579 +34 
Files with missing linesCoverage Δ
lib/internal/blocklist.js94.74% <100.00%> (+3.35%)⬆️
src/node_sockaddr.h51.28% <100.00%> (+13.04%)⬆️
src/node_sockaddr.cc74.67% <83.10%> (+4.67%)⬆️

... and 38 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 390b7fa to 5623bfbCompareAugust 3, 2026 17:04
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadsrc/node_sockaddr.cc
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadlib/internal/blocklist.js
Comment threadtest/parallel/test-blocklist-fast-api.js Outdated
Comment threadlib/internal/blocklist.js Outdated
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 5623bfb to a5c9edcCompareAugust 3, 2026 20:54
@richardlaurichardlau added the semver-minor PRs that contain new features and should be released in the next minor version. label Aug 3, 2026
jasnelland others added 19 commits August 4, 2026 06:28
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Take O(1) fast-path when possible
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Claude
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from a5c9edc to 21932a2CompareAugust 4, 2026 13:28
@jasnell
jasnell requested a review from pimterryAugust 4, 2026 13:47
@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 4, 2026
@jasnell

This comment was marked as resolved.

@benjamingrbenjamingr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

neat

Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the commit-queue-squash PRs the Commit Queue should land as one squashed commit. label Aug 5, 2026
Comment threadsrc/node_sockaddr.h
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@Ethan-ArrowoodEthan-Arrowood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

nodejs-github-bot commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

jasnell added a commit that referenced this pull request Aug 6, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Landed in 27d6cfa

@jasnelljasnell closed this Aug 6, 2026
aduh95 pushed a commit that referenced this pull request Aug 13, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
nodejs-github-bot added a commit that referenced this pull request Aug 25, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 26, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs with CI started, the required approvals, and no outstanding review comments.c++Issues and PRs that require attention from people who are familiar with C++.commit-queue-squashPRs the Commit Queue should land as one squashed commit.needs-ciPRs that need a full CI run.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@jasnell@nodejs-github-bot@benjamingr@pimterry@anonrig@Ethan-Arrowood@richardlau
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

net: make multiple improvements to net.BlockList - #64974

Closed
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements
Closed

net: make multiple improvements to net.BlockList#64974
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements

Conversation

@jasnell

Copy link
Copy Markdown
Member

New APIs:

  • addCIDR(cidr): Parse CIDR string, auto-detect family
  • addCIDRs(cidrs): Batch CIDR add
  • addAddresses(addresses): Batch address add
  • removeAddress(address): Remove exact address rule
  • removeRange(start, end): Remove range rule
  • removeSubnet(net, prefix): Remove subnet rule (+ trie cleanup)
  • removeCIDR(cidr): Remove subnet by CIDR string
  • clear(): Remove all rules
  • size: Rule count without allocating rules array
  • BlockList.PRIVATE_RANGES: Array of RFC 1918 + loopback + link-local + ULA CIDRs

Performance improvements:

  • Constant-time address lookup
  • Radix trie for subnet lookup
  • String check fast path
  • V8 fast api for checks
  • Batch insert
  • R/W locking

Adds a benchmark and more tests.

  • Addresses
    • 10 rules ... 9x perf improvement
    • 100 rules ... 13x perf improvement
    • 1000 rules ... 58x perf improvement
    • 10000 rules ... 1186x perf improvement
  • Subnets
    • 10 rules ... 5x perf improvement
    • 100 rules ... 6x perf improvement
    • 1000 rules ... 24x perf improvement
    • 10000 rules ... 418x perf improvement

Essentially went from O(n) to mostly O(1) for most cases.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net
  • @nodejs/performance

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Aug 3, 2026
@codecov

codecovBot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.09901% with 50 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.30%. Comparing base (31cde9f) to head (d5bb049).
⚠️ Report is 36 commits behind head on main.

Files with missing linesPatch %Lines
src/node_sockaddr.cc83.10%8 Missing and 42 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #64974 +/- ##
========================================
Coverage 90.30% 90.30% ========================================
Files 759 759 Lines 247621 248085 +464 Branches 46672 46785 +113 ========================================
+ Hits 223603 224044 +441 + Misses 15473 15462 -11 - Partials 8545 8579 +34 
Files with missing linesCoverage Δ
lib/internal/blocklist.js94.74% <100.00%> (+3.35%)⬆️
src/node_sockaddr.h51.28% <100.00%> (+13.04%)⬆️
src/node_sockaddr.cc74.67% <83.10%> (+4.67%)⬆️

... and 38 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 390b7fa to 5623bfbCompareAugust 3, 2026 17:04
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadsrc/node_sockaddr.cc
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadlib/internal/blocklist.js
Comment threadtest/parallel/test-blocklist-fast-api.js Outdated
Comment threadlib/internal/blocklist.js Outdated
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 5623bfb to a5c9edcCompareAugust 3, 2026 20:54
@richardlaurichardlau added the semver-minor PRs that contain new features and should be released in the next minor version. label Aug 3, 2026
jasnelland others added 19 commits August 4, 2026 06:28
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Take O(1) fast-path when possible
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Claude
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from a5c9edc to 21932a2CompareAugust 4, 2026 13:28
@jasnell
jasnell requested a review from pimterryAugust 4, 2026 13:47
@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 4, 2026
@jasnell

This comment was marked as resolved.

@benjamingrbenjamingr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

neat

Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the commit-queue-squash PRs the Commit Queue should land as one squashed commit. label Aug 5, 2026
Comment threadsrc/node_sockaddr.h
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@Ethan-ArrowoodEthan-Arrowood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

nodejs-github-bot commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

jasnell added a commit that referenced this pull request Aug 6, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Landed in 27d6cfa

@jasnelljasnell closed this Aug 6, 2026
aduh95 pushed a commit that referenced this pull request Aug 13, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
nodejs-github-bot added a commit that referenced this pull request Aug 25, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 26, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs with CI started, the required approvals, and no outstanding review comments.c++Issues and PRs that require attention from people who are familiar with C++.commit-queue-squashPRs the Commit Queue should land as one squashed commit.needs-ciPRs that need a full CI run.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@jasnell@nodejs-github-bot@benjamingr@pimterry@anonrig@Ethan-Arrowood@richardlau
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

net: make multiple improvements to net.BlockList - #64974

Closed
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements
Closed

net: make multiple improvements to net.BlockList#64974
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements

Conversation

@jasnell

Copy link
Copy Markdown
Member

New APIs:

  • addCIDR(cidr): Parse CIDR string, auto-detect family
  • addCIDRs(cidrs): Batch CIDR add
  • addAddresses(addresses): Batch address add
  • removeAddress(address): Remove exact address rule
  • removeRange(start, end): Remove range rule
  • removeSubnet(net, prefix): Remove subnet rule (+ trie cleanup)
  • removeCIDR(cidr): Remove subnet by CIDR string
  • clear(): Remove all rules
  • size: Rule count without allocating rules array
  • BlockList.PRIVATE_RANGES: Array of RFC 1918 + loopback + link-local + ULA CIDRs

Performance improvements:

  • Constant-time address lookup
  • Radix trie for subnet lookup
  • String check fast path
  • V8 fast api for checks
  • Batch insert
  • R/W locking

Adds a benchmark and more tests.

  • Addresses
    • 10 rules ... 9x perf improvement
    • 100 rules ... 13x perf improvement
    • 1000 rules ... 58x perf improvement
    • 10000 rules ... 1186x perf improvement
  • Subnets
    • 10 rules ... 5x perf improvement
    • 100 rules ... 6x perf improvement
    • 1000 rules ... 24x perf improvement
    • 10000 rules ... 418x perf improvement

Essentially went from O(n) to mostly O(1) for most cases.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net
  • @nodejs/performance

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Aug 3, 2026
@codecov

codecovBot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.09901% with 50 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.30%. Comparing base (31cde9f) to head (d5bb049).
⚠️ Report is 36 commits behind head on main.

Files with missing linesPatch %Lines
src/node_sockaddr.cc83.10%8 Missing and 42 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #64974 +/- ##
========================================
Coverage 90.30% 90.30% ========================================
Files 759 759 Lines 247621 248085 +464 Branches 46672 46785 +113 ========================================
+ Hits 223603 224044 +441 + Misses 15473 15462 -11 - Partials 8545 8579 +34 
Files with missing linesCoverage Δ
lib/internal/blocklist.js94.74% <100.00%> (+3.35%)⬆️
src/node_sockaddr.h51.28% <100.00%> (+13.04%)⬆️
src/node_sockaddr.cc74.67% <83.10%> (+4.67%)⬆️

... and 38 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 390b7fa to 5623bfbCompareAugust 3, 2026 17:04
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadsrc/node_sockaddr.cc
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadlib/internal/blocklist.js
Comment threadtest/parallel/test-blocklist-fast-api.js Outdated
Comment threadlib/internal/blocklist.js Outdated
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 5623bfb to a5c9edcCompareAugust 3, 2026 20:54
@richardlaurichardlau added the semver-minor PRs that contain new features and should be released in the next minor version. label Aug 3, 2026
jasnelland others added 19 commits August 4, 2026 06:28
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Take O(1) fast-path when possible
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Claude
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from a5c9edc to 21932a2CompareAugust 4, 2026 13:28
@jasnell
jasnell requested a review from pimterryAugust 4, 2026 13:47
@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 4, 2026
@jasnell

This comment was marked as resolved.

@benjamingrbenjamingr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

neat

Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the commit-queue-squash PRs the Commit Queue should land as one squashed commit. label Aug 5, 2026
Comment threadsrc/node_sockaddr.h
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@Ethan-ArrowoodEthan-Arrowood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

nodejs-github-bot commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

jasnell added a commit that referenced this pull request Aug 6, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Landed in 27d6cfa

@jasnelljasnell closed this Aug 6, 2026
aduh95 pushed a commit that referenced this pull request Aug 13, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
nodejs-github-bot added a commit that referenced this pull request Aug 25, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 26, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs with CI started, the required approvals, and no outstanding review comments.c++Issues and PRs that require attention from people who are familiar with C++.commit-queue-squashPRs the Commit Queue should land as one squashed commit.needs-ciPRs that need a full CI run.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@jasnell@nodejs-github-bot@benjamingr@pimterry@anonrig@Ethan-Arrowood@richardlau
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

net: make multiple improvements to net.BlockList - #64974

Closed
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements
Closed

net: make multiple improvements to net.BlockList#64974
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements

Conversation

@jasnell

Copy link
Copy Markdown
Member

New APIs:

  • addCIDR(cidr): Parse CIDR string, auto-detect family
  • addCIDRs(cidrs): Batch CIDR add
  • addAddresses(addresses): Batch address add
  • removeAddress(address): Remove exact address rule
  • removeRange(start, end): Remove range rule
  • removeSubnet(net, prefix): Remove subnet rule (+ trie cleanup)
  • removeCIDR(cidr): Remove subnet by CIDR string
  • clear(): Remove all rules
  • size: Rule count without allocating rules array
  • BlockList.PRIVATE_RANGES: Array of RFC 1918 + loopback + link-local + ULA CIDRs

Performance improvements:

  • Constant-time address lookup
  • Radix trie for subnet lookup
  • String check fast path
  • V8 fast api for checks
  • Batch insert
  • R/W locking

Adds a benchmark and more tests.

  • Addresses
    • 10 rules ... 9x perf improvement
    • 100 rules ... 13x perf improvement
    • 1000 rules ... 58x perf improvement
    • 10000 rules ... 1186x perf improvement
  • Subnets
    • 10 rules ... 5x perf improvement
    • 100 rules ... 6x perf improvement
    • 1000 rules ... 24x perf improvement
    • 10000 rules ... 418x perf improvement

Essentially went from O(n) to mostly O(1) for most cases.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net
  • @nodejs/performance

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Aug 3, 2026
@codecov

codecovBot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.09901% with 50 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.30%. Comparing base (31cde9f) to head (d5bb049).
⚠️ Report is 36 commits behind head on main.

Files with missing linesPatch %Lines
src/node_sockaddr.cc83.10%8 Missing and 42 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #64974 +/- ##
========================================
Coverage 90.30% 90.30% ========================================
Files 759 759 Lines 247621 248085 +464 Branches 46672 46785 +113 ========================================
+ Hits 223603 224044 +441 + Misses 15473 15462 -11 - Partials 8545 8579 +34 
Files with missing linesCoverage Δ
lib/internal/blocklist.js94.74% <100.00%> (+3.35%)⬆️
src/node_sockaddr.h51.28% <100.00%> (+13.04%)⬆️
src/node_sockaddr.cc74.67% <83.10%> (+4.67%)⬆️

... and 38 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 390b7fa to 5623bfbCompareAugust 3, 2026 17:04
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadsrc/node_sockaddr.cc
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadlib/internal/blocklist.js
Comment threadtest/parallel/test-blocklist-fast-api.js Outdated
Comment threadlib/internal/blocklist.js Outdated
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 5623bfb to a5c9edcCompareAugust 3, 2026 20:54
@richardlaurichardlau added the semver-minor PRs that contain new features and should be released in the next minor version. label Aug 3, 2026
jasnelland others added 19 commits August 4, 2026 06:28
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Take O(1) fast-path when possible
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Claude
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from a5c9edc to 21932a2CompareAugust 4, 2026 13:28
@jasnell
jasnell requested a review from pimterryAugust 4, 2026 13:47
@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 4, 2026
@jasnell

This comment was marked as resolved.

@benjamingrbenjamingr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

neat

Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the commit-queue-squash PRs the Commit Queue should land as one squashed commit. label Aug 5, 2026
Comment threadsrc/node_sockaddr.h
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@Ethan-ArrowoodEthan-Arrowood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

nodejs-github-bot commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

jasnell added a commit that referenced this pull request Aug 6, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Landed in 27d6cfa

@jasnelljasnell closed this Aug 6, 2026
aduh95 pushed a commit that referenced this pull request Aug 13, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
nodejs-github-bot added a commit that referenced this pull request Aug 25, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 26, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs with CI started, the required approvals, and no outstanding review comments.c++Issues and PRs that require attention from people who are familiar with C++.commit-queue-squashPRs the Commit Queue should land as one squashed commit.needs-ciPRs that need a full CI run.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@jasnell@nodejs-github-bot@benjamingr@pimterry@anonrig@Ethan-Arrowood@richardlau
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

net: make multiple improvements to net.BlockList - #64974

Closed
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements
Closed

net: make multiple improvements to net.BlockList#64974
jasnell wants to merge 20 commits into
nodejs:mainfrom
jasnell:jasnell/blocklist-improvements

Conversation

@jasnell

Copy link
Copy Markdown
Member

New APIs:

  • addCIDR(cidr): Parse CIDR string, auto-detect family
  • addCIDRs(cidrs): Batch CIDR add
  • addAddresses(addresses): Batch address add
  • removeAddress(address): Remove exact address rule
  • removeRange(start, end): Remove range rule
  • removeSubnet(net, prefix): Remove subnet rule (+ trie cleanup)
  • removeCIDR(cidr): Remove subnet by CIDR string
  • clear(): Remove all rules
  • size: Rule count without allocating rules array
  • BlockList.PRIVATE_RANGES: Array of RFC 1918 + loopback + link-local + ULA CIDRs

Performance improvements:

  • Constant-time address lookup
  • Radix trie for subnet lookup
  • String check fast path
  • V8 fast api for checks
  • Batch insert
  • R/W locking

Adds a benchmark and more tests.

  • Addresses
    • 10 rules ... 9x perf improvement
    • 100 rules ... 13x perf improvement
    • 1000 rules ... 58x perf improvement
    • 10000 rules ... 1186x perf improvement
  • Subnets
    • 10 rules ... 5x perf improvement
    • 100 rules ... 6x perf improvement
    • 1000 rules ... 24x perf improvement
    • 10000 rules ... 418x perf improvement

Essentially went from O(n) to mostly O(1) for most cases.

Signed-off-by: James M Snell jasnell@gmail.com

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net
  • @nodejs/performance

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Aug 3, 2026
@codecov

codecovBot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.09901% with 50 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.30%. Comparing base (31cde9f) to head (d5bb049).
⚠️ Report is 36 commits behind head on main.

Files with missing linesPatch %Lines
src/node_sockaddr.cc83.10%8 Missing and 42 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #64974 +/- ##
========================================
Coverage 90.30% 90.30% ========================================
Files 759 759 Lines 247621 248085 +464 Branches 46672 46785 +113 ========================================
+ Hits 223603 224044 +441 + Misses 15473 15462 -11 - Partials 8545 8579 +34 
Files with missing linesCoverage Δ
lib/internal/blocklist.js94.74% <100.00%> (+3.35%)⬆️
src/node_sockaddr.h51.28% <100.00%> (+13.04%)⬆️
src/node_sockaddr.cc74.67% <83.10%> (+4.67%)⬆️

... and 38 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
Comment threadlib/internal/blocklist.js
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 390b7fa to 5623bfbCompareAugust 3, 2026 17:04
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadsrc/node_sockaddr.cc
Comment threadsrc/node_sockaddr.cc Outdated
Comment threadlib/internal/blocklist.js
Comment threadtest/parallel/test-blocklist-fast-api.js Outdated
Comment threadlib/internal/blocklist.js Outdated
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from 5623bfb to a5c9edcCompareAugust 3, 2026 20:54
@richardlaurichardlau added the semver-minor PRs that contain new features and should be released in the next minor version. label Aug 3, 2026
jasnelland others added 19 commits August 4, 2026 06:28
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Take O(1) fast-path when possible
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Claude
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@jasnell
jasnellforce-pushed the jasnell/blocklist-improvements branch from a5c9edc to 21932a2CompareAugust 4, 2026 13:28
@jasnell
jasnell requested a review from pimterryAugust 4, 2026 13:47
@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Aug 4, 2026
@jasnell

This comment was marked as resolved.

@benjamingrbenjamingr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

neat

Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@jasnelljasnell added the commit-queue-squash PRs the Commit Queue should land as one squashed commit. label Aug 5, 2026
Comment threadsrc/node_sockaddr.h
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@Ethan-ArrowoodEthan-Arrowood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing!

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot

nodejs-github-bot commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

jasnell added a commit that referenced this pull request Aug 6, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Landed in 27d6cfa

@jasnelljasnell closed this Aug 6, 2026
aduh95 pushed a commit that referenced this pull request Aug 13, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
nodejs-github-bot added a commit that referenced this pull request Aug 25, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 26, 2026
Notable changes:
benchmark:
* (SEMVER-MINOR) add --analyze mode to compare.js (James M Snell) #65416
crypto:
* update root certificates to NSS 3.126 (Node.js GitHub Bot) #65495
* (SEMVER-MINOR) enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) #63411
diagnostics_channel:
* mark TracingChannel as stable (Abdelrahman Awad) #64525
lib,src:
* (SEMVER-MINOR) improve histogram implementation (James M Snell) #65024
net:
* (SEMVER-MINOR) improve performance of net.BlockList (James M Snell) #64974
perf_hooks:
* (SEMVER-MINOR) add statistical hypothesis testing to histogram (James M Snell) #65416
repl:
* add basic syntax highlighting (Aviv Keller) #64591
sqlite:
* (SEMVER-MINOR) add StatementSync.prototype.close() (Guilherme Araújo) #64232
* (SEMVER-MINOR) add StatementSync.prototype[Symbol.dispose]() (Guilherme Araújo) #64232
util:
* (SEMVER-MINOR) add non-throwing MIMEType.parse (James M Snell) #64965
zlib:
* (SEMVER-MINOR) add ZipEntry, ZipFile, and ZipBuffer (Philipp Dunkel) #64339
PR-URL: #65551
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
* fix duplicate address insertion in SocketAddressBlockList
* fix BlockList rule listing order to match apply
* add minor bound check in BlockList
* improve performance of BlockList apply
* eliminating shared_ptr
* check fast api path
* add clear method to BlockList
* general storage improvements to BlockList
* use shared locks for BlockList reads
* add bulk address adding to BlockList
* add BlockList benchmark
* add remove range/subnet to BlockList
* add cidr notation parsing to BlockList
* add additional apis to BlockList
* add private subnet presets to BlockList
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: OpenCode/Opus
PR-URL: #64974
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs with CI started, the required approvals, and no outstanding review comments.c++Issues and PRs that require attention from people who are familiar with C++.commit-queue-squashPRs the Commit Queue should land as one squashed commit.needs-ciPRs that need a full CI run.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@jasnell@nodejs-github-bot@benjamingr@pimterry@anonrig@Ethan-Arrowood@richardlau