stream: refine stream/iter backpressure and error handling - #63697

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure
Jun 17, 2026
Merged

stream: refine stream/iter backpressure and error handling#63697
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure

Conversation

@jasnell

Copy link
Copy Markdown
Member
  • Improve the backpressure implementation alignment with the spec.
  • Improve error handling in a couple cases.

@jasnell
jasnell requested review from mcollina and trivikrJune 1, 2026 16:22
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Jun 1, 2026
@codecov

codecovBot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.35%. Comparing base (faa413e) to head (28142cd).
⚠️ Report is 39 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/streams/iter/classic.js62.50%6 Missing ⚠️
lib/internal/streams/iter/consumers.js91.42%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #63697 +/- ##
==========================================
- Coverage 91.96% 90.35% -1.62% 
==========================================
Files 379 732 +353 Lines 166659 236588 +69929 Branches 25502 44567 +19065 ==========================================
+ Hits 153270 213763 +60493 - Misses 13100 14544 +1444 - Partials 289 8281 +7992 
Files with missing linesCoverage Δ
lib/internal/streams/iter/pull.js88.23% <ø> (+0.02%)⬆️
lib/internal/streams/iter/push.js90.84% <100.00%> (-0.79%)⬇️
lib/internal/streams/iter/types.js100.00% <ø> (ø)
lib/internal/streams/iter/consumers.js96.76% <91.42%> (+0.15%)⬆️
lib/internal/streams/iter/classic.js89.26% <62.50%> (+0.35%)⬆️

... and 478 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/streams/iter/classic.js
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/push.js
@jasnell
jasnellforce-pushed the jasnell/refine-stream-iter-backpressure branch from bea41b1 to 28142cdCompareJune 2, 2026 11:45
@jasnell
jasnell requested a review from trivikrJune 2, 2026 11:45
@jasnelljasnell changed the title Jasnell/refine stream iter backpressurestream: refine stream/iter backpressure and error handlingJun 2, 2026
@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@trivikrtrivikr added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Jun 6, 2026
jasnell added 2 commits June 8, 2026 18:25
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@trivikr
trivikrforce-pushed the jasnell/refine-stream-iter-backpressure branch from 28142cd to c29567eCompareJune 9, 2026 01:28

@trivikrtrivikr 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.

Rebased after resolving conflicts with #63564

@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 9, 2026
@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

Since I rebased the changes to resolve conflict, this needs approval from another reviewer for CI to start.

@trivikrtrivikr added review wanted PRs that need review. and removed author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Jun 9, 2026
@trivikrtrivikr added the review wanted PRs that need review. label Jun 16, 2026

@mcollinamcollina 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.

lgtm

@mcollinamcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 17, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgundaygurgunday 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.

lgtm

@trivikrtrivikr added commit-queue-squash PRs the Commit Queue should land as one squashed commit. commit-queue PRs queued for automated landing through the Commit Queue. labels Jun 17, 2026
@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jun 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit b03e6e0 into nodejs:mainJun 17, 2026
95 of 96 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in b03e6e0

aduh95 pushed a commit that referenced this pull request Jun 18, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit to aduh95/node that referenced this pull request Jul 30, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: nodejs#63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Aug 6, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Backport-PR-URL: #64675
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squashPRs the Commit Queue should land as one squashed commit.lib / srcIssues and PRs involving general changes in the lib/ or src/ directories.needs-ciPRs that need a full CI run.review wantedPRs that need review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jasnell@nodejs-github-bot@trivikr@mcollina@gurgunday
, '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

stream: refine stream/iter backpressure and error handling - #63697

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure
Jun 17, 2026
Merged

stream: refine stream/iter backpressure and error handling#63697
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure

Conversation

@jasnell

Copy link
Copy Markdown
Member
  • Improve the backpressure implementation alignment with the spec.
  • Improve error handling in a couple cases.

@jasnell
jasnell requested review from mcollina and trivikrJune 1, 2026 16:22
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Jun 1, 2026
@codecov

codecovBot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.35%. Comparing base (faa413e) to head (28142cd).
⚠️ Report is 39 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/streams/iter/classic.js62.50%6 Missing ⚠️
lib/internal/streams/iter/consumers.js91.42%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #63697 +/- ##
==========================================
- Coverage 91.96% 90.35% -1.62% 
==========================================
Files 379 732 +353 Lines 166659 236588 +69929 Branches 25502 44567 +19065 ==========================================
+ Hits 153270 213763 +60493 - Misses 13100 14544 +1444 - Partials 289 8281 +7992 
Files with missing linesCoverage Δ
lib/internal/streams/iter/pull.js88.23% <ø> (+0.02%)⬆️
lib/internal/streams/iter/push.js90.84% <100.00%> (-0.79%)⬇️
lib/internal/streams/iter/types.js100.00% <ø> (ø)
lib/internal/streams/iter/consumers.js96.76% <91.42%> (+0.15%)⬆️
lib/internal/streams/iter/classic.js89.26% <62.50%> (+0.35%)⬆️

... and 478 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/streams/iter/classic.js
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/push.js
@jasnell
jasnellforce-pushed the jasnell/refine-stream-iter-backpressure branch from bea41b1 to 28142cdCompareJune 2, 2026 11:45
@jasnell
jasnell requested a review from trivikrJune 2, 2026 11:45
@jasnelljasnell changed the title Jasnell/refine stream iter backpressurestream: refine stream/iter backpressure and error handlingJun 2, 2026
@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@trivikrtrivikr added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Jun 6, 2026
jasnell added 2 commits June 8, 2026 18:25
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@trivikr
trivikrforce-pushed the jasnell/refine-stream-iter-backpressure branch from 28142cd to c29567eCompareJune 9, 2026 01:28

@trivikrtrivikr 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.

Rebased after resolving conflicts with #63564

@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 9, 2026
@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

Since I rebased the changes to resolve conflict, this needs approval from another reviewer for CI to start.

@trivikrtrivikr added review wanted PRs that need review. and removed author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Jun 9, 2026
@trivikrtrivikr added the review wanted PRs that need review. label Jun 16, 2026

@mcollinamcollina 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.

lgtm

@mcollinamcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 17, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgundaygurgunday 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.

lgtm

@trivikrtrivikr added commit-queue-squash PRs the Commit Queue should land as one squashed commit. commit-queue PRs queued for automated landing through the Commit Queue. labels Jun 17, 2026
@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jun 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit b03e6e0 into nodejs:mainJun 17, 2026
95 of 96 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in b03e6e0

aduh95 pushed a commit that referenced this pull request Jun 18, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit to aduh95/node that referenced this pull request Jul 30, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: nodejs#63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Aug 6, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Backport-PR-URL: #64675
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squashPRs the Commit Queue should land as one squashed commit.lib / srcIssues and PRs involving general changes in the lib/ or src/ directories.needs-ciPRs that need a full CI run.review wantedPRs that need review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jasnell@nodejs-github-bot@trivikr@mcollina@gurgunday
, '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

stream: refine stream/iter backpressure and error handling - #63697

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure
Jun 17, 2026
Merged

stream: refine stream/iter backpressure and error handling#63697
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure

Conversation

@jasnell

Copy link
Copy Markdown
Member
  • Improve the backpressure implementation alignment with the spec.
  • Improve error handling in a couple cases.

@jasnell
jasnell requested review from mcollina and trivikrJune 1, 2026 16:22
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Jun 1, 2026
@codecov

codecovBot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.35%. Comparing base (faa413e) to head (28142cd).
⚠️ Report is 39 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/streams/iter/classic.js62.50%6 Missing ⚠️
lib/internal/streams/iter/consumers.js91.42%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #63697 +/- ##
==========================================
- Coverage 91.96% 90.35% -1.62% 
==========================================
Files 379 732 +353 Lines 166659 236588 +69929 Branches 25502 44567 +19065 ==========================================
+ Hits 153270 213763 +60493 - Misses 13100 14544 +1444 - Partials 289 8281 +7992 
Files with missing linesCoverage Δ
lib/internal/streams/iter/pull.js88.23% <ø> (+0.02%)⬆️
lib/internal/streams/iter/push.js90.84% <100.00%> (-0.79%)⬇️
lib/internal/streams/iter/types.js100.00% <ø> (ø)
lib/internal/streams/iter/consumers.js96.76% <91.42%> (+0.15%)⬆️
lib/internal/streams/iter/classic.js89.26% <62.50%> (+0.35%)⬆️

... and 478 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/streams/iter/classic.js
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/push.js
@jasnell
jasnellforce-pushed the jasnell/refine-stream-iter-backpressure branch from bea41b1 to 28142cdCompareJune 2, 2026 11:45
@jasnell
jasnell requested a review from trivikrJune 2, 2026 11:45
@jasnelljasnell changed the title Jasnell/refine stream iter backpressurestream: refine stream/iter backpressure and error handlingJun 2, 2026
@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@trivikrtrivikr added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Jun 6, 2026
jasnell added 2 commits June 8, 2026 18:25
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@trivikr
trivikrforce-pushed the jasnell/refine-stream-iter-backpressure branch from 28142cd to c29567eCompareJune 9, 2026 01:28

@trivikrtrivikr 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.

Rebased after resolving conflicts with #63564

@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 9, 2026
@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

Since I rebased the changes to resolve conflict, this needs approval from another reviewer for CI to start.

@trivikrtrivikr added review wanted PRs that need review. and removed author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Jun 9, 2026
@trivikrtrivikr added the review wanted PRs that need review. label Jun 16, 2026

@mcollinamcollina 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.

lgtm

@mcollinamcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 17, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgundaygurgunday 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.

lgtm

@trivikrtrivikr added commit-queue-squash PRs the Commit Queue should land as one squashed commit. commit-queue PRs queued for automated landing through the Commit Queue. labels Jun 17, 2026
@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jun 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit b03e6e0 into nodejs:mainJun 17, 2026
95 of 96 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in b03e6e0

aduh95 pushed a commit that referenced this pull request Jun 18, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit to aduh95/node that referenced this pull request Jul 30, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: nodejs#63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Aug 6, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Backport-PR-URL: #64675
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squashPRs the Commit Queue should land as one squashed commit.lib / srcIssues and PRs involving general changes in the lib/ or src/ directories.needs-ciPRs that need a full CI run.review wantedPRs that need review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jasnell@nodejs-github-bot@trivikr@mcollina@gurgunday
, '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

stream: refine stream/iter backpressure and error handling - #63697

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure
Jun 17, 2026
Merged

stream: refine stream/iter backpressure and error handling#63697
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure

Conversation

@jasnell

Copy link
Copy Markdown
Member
  • Improve the backpressure implementation alignment with the spec.
  • Improve error handling in a couple cases.

@jasnell
jasnell requested review from mcollina and trivikrJune 1, 2026 16:22
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Jun 1, 2026
@codecov

codecovBot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.35%. Comparing base (faa413e) to head (28142cd).
⚠️ Report is 39 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/streams/iter/classic.js62.50%6 Missing ⚠️
lib/internal/streams/iter/consumers.js91.42%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #63697 +/- ##
==========================================
- Coverage 91.96% 90.35% -1.62% 
==========================================
Files 379 732 +353 Lines 166659 236588 +69929 Branches 25502 44567 +19065 ==========================================
+ Hits 153270 213763 +60493 - Misses 13100 14544 +1444 - Partials 289 8281 +7992 
Files with missing linesCoverage Δ
lib/internal/streams/iter/pull.js88.23% <ø> (+0.02%)⬆️
lib/internal/streams/iter/push.js90.84% <100.00%> (-0.79%)⬇️
lib/internal/streams/iter/types.js100.00% <ø> (ø)
lib/internal/streams/iter/consumers.js96.76% <91.42%> (+0.15%)⬆️
lib/internal/streams/iter/classic.js89.26% <62.50%> (+0.35%)⬆️

... and 478 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/streams/iter/classic.js
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/push.js
@jasnell
jasnellforce-pushed the jasnell/refine-stream-iter-backpressure branch from bea41b1 to 28142cdCompareJune 2, 2026 11:45
@jasnell
jasnell requested a review from trivikrJune 2, 2026 11:45
@jasnelljasnell changed the title Jasnell/refine stream iter backpressurestream: refine stream/iter backpressure and error handlingJun 2, 2026
@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@trivikrtrivikr added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Jun 6, 2026
jasnell added 2 commits June 8, 2026 18:25
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@trivikr
trivikrforce-pushed the jasnell/refine-stream-iter-backpressure branch from 28142cd to c29567eCompareJune 9, 2026 01:28

@trivikrtrivikr 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.

Rebased after resolving conflicts with #63564

@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 9, 2026
@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

Since I rebased the changes to resolve conflict, this needs approval from another reviewer for CI to start.

@trivikrtrivikr added review wanted PRs that need review. and removed author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Jun 9, 2026
@trivikrtrivikr added the review wanted PRs that need review. label Jun 16, 2026

@mcollinamcollina 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.

lgtm

@mcollinamcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 17, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgundaygurgunday 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.

lgtm

@trivikrtrivikr added commit-queue-squash PRs the Commit Queue should land as one squashed commit. commit-queue PRs queued for automated landing through the Commit Queue. labels Jun 17, 2026
@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jun 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit b03e6e0 into nodejs:mainJun 17, 2026
95 of 96 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in b03e6e0

aduh95 pushed a commit that referenced this pull request Jun 18, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit to aduh95/node that referenced this pull request Jul 30, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: nodejs#63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Aug 6, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Backport-PR-URL: #64675
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squashPRs the Commit Queue should land as one squashed commit.lib / srcIssues and PRs involving general changes in the lib/ or src/ directories.needs-ciPRs that need a full CI run.review wantedPRs that need review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jasnell@nodejs-github-bot@trivikr@mcollina@gurgunday
, '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

stream: refine stream/iter backpressure and error handling - #63697

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure
Jun 17, 2026
Merged

stream: refine stream/iter backpressure and error handling#63697
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure

Conversation

@jasnell

Copy link
Copy Markdown
Member
  • Improve the backpressure implementation alignment with the spec.
  • Improve error handling in a couple cases.

@jasnell
jasnell requested review from mcollina and trivikrJune 1, 2026 16:22
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Jun 1, 2026
@codecov

codecovBot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.35%. Comparing base (faa413e) to head (28142cd).
⚠️ Report is 39 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/streams/iter/classic.js62.50%6 Missing ⚠️
lib/internal/streams/iter/consumers.js91.42%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #63697 +/- ##
==========================================
- Coverage 91.96% 90.35% -1.62% 
==========================================
Files 379 732 +353 Lines 166659 236588 +69929 Branches 25502 44567 +19065 ==========================================
+ Hits 153270 213763 +60493 - Misses 13100 14544 +1444 - Partials 289 8281 +7992 
Files with missing linesCoverage Δ
lib/internal/streams/iter/pull.js88.23% <ø> (+0.02%)⬆️
lib/internal/streams/iter/push.js90.84% <100.00%> (-0.79%)⬇️
lib/internal/streams/iter/types.js100.00% <ø> (ø)
lib/internal/streams/iter/consumers.js96.76% <91.42%> (+0.15%)⬆️
lib/internal/streams/iter/classic.js89.26% <62.50%> (+0.35%)⬆️

... and 478 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/streams/iter/classic.js
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/push.js
@jasnell
jasnellforce-pushed the jasnell/refine-stream-iter-backpressure branch from bea41b1 to 28142cdCompareJune 2, 2026 11:45
@jasnell
jasnell requested a review from trivikrJune 2, 2026 11:45
@jasnelljasnell changed the title Jasnell/refine stream iter backpressurestream: refine stream/iter backpressure and error handlingJun 2, 2026
@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@trivikrtrivikr added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Jun 6, 2026
jasnell added 2 commits June 8, 2026 18:25
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@trivikr
trivikrforce-pushed the jasnell/refine-stream-iter-backpressure branch from 28142cd to c29567eCompareJune 9, 2026 01:28

@trivikrtrivikr 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.

Rebased after resolving conflicts with #63564

@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 9, 2026
@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

Since I rebased the changes to resolve conflict, this needs approval from another reviewer for CI to start.

@trivikrtrivikr added review wanted PRs that need review. and removed author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Jun 9, 2026
@trivikrtrivikr added the review wanted PRs that need review. label Jun 16, 2026

@mcollinamcollina 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.

lgtm

@mcollinamcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 17, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgundaygurgunday 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.

lgtm

@trivikrtrivikr added commit-queue-squash PRs the Commit Queue should land as one squashed commit. commit-queue PRs queued for automated landing through the Commit Queue. labels Jun 17, 2026
@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jun 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit b03e6e0 into nodejs:mainJun 17, 2026
95 of 96 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in b03e6e0

aduh95 pushed a commit that referenced this pull request Jun 18, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit to aduh95/node that referenced this pull request Jul 30, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: nodejs#63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Aug 6, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Backport-PR-URL: #64675
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squashPRs the Commit Queue should land as one squashed commit.lib / srcIssues and PRs involving general changes in the lib/ or src/ directories.needs-ciPRs that need a full CI run.review wantedPRs that need review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jasnell@nodejs-github-bot@trivikr@mcollina@gurgunday
, '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

stream: refine stream/iter backpressure and error handling - #63697

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure
Jun 17, 2026
Merged

stream: refine stream/iter backpressure and error handling#63697
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure

Conversation

@jasnell

Copy link
Copy Markdown
Member
  • Improve the backpressure implementation alignment with the spec.
  • Improve error handling in a couple cases.

@jasnell
jasnell requested review from mcollina and trivikrJune 1, 2026 16:22
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Jun 1, 2026
@codecov

codecovBot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.35%. Comparing base (faa413e) to head (28142cd).
⚠️ Report is 39 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/streams/iter/classic.js62.50%6 Missing ⚠️
lib/internal/streams/iter/consumers.js91.42%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #63697 +/- ##
==========================================
- Coverage 91.96% 90.35% -1.62% 
==========================================
Files 379 732 +353 Lines 166659 236588 +69929 Branches 25502 44567 +19065 ==========================================
+ Hits 153270 213763 +60493 - Misses 13100 14544 +1444 - Partials 289 8281 +7992 
Files with missing linesCoverage Δ
lib/internal/streams/iter/pull.js88.23% <ø> (+0.02%)⬆️
lib/internal/streams/iter/push.js90.84% <100.00%> (-0.79%)⬇️
lib/internal/streams/iter/types.js100.00% <ø> (ø)
lib/internal/streams/iter/consumers.js96.76% <91.42%> (+0.15%)⬆️
lib/internal/streams/iter/classic.js89.26% <62.50%> (+0.35%)⬆️

... and 478 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/streams/iter/classic.js
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/push.js
@jasnell
jasnellforce-pushed the jasnell/refine-stream-iter-backpressure branch from bea41b1 to 28142cdCompareJune 2, 2026 11:45
@jasnell
jasnell requested a review from trivikrJune 2, 2026 11:45
@jasnelljasnell changed the title Jasnell/refine stream iter backpressurestream: refine stream/iter backpressure and error handlingJun 2, 2026
@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@trivikrtrivikr added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Jun 6, 2026
jasnell added 2 commits June 8, 2026 18:25
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@trivikr
trivikrforce-pushed the jasnell/refine-stream-iter-backpressure branch from 28142cd to c29567eCompareJune 9, 2026 01:28

@trivikrtrivikr 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.

Rebased after resolving conflicts with #63564

@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 9, 2026
@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

Since I rebased the changes to resolve conflict, this needs approval from another reviewer for CI to start.

@trivikrtrivikr added review wanted PRs that need review. and removed author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Jun 9, 2026
@trivikrtrivikr added the review wanted PRs that need review. label Jun 16, 2026

@mcollinamcollina 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.

lgtm

@mcollinamcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 17, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgundaygurgunday 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.

lgtm

@trivikrtrivikr added commit-queue-squash PRs the Commit Queue should land as one squashed commit. commit-queue PRs queued for automated landing through the Commit Queue. labels Jun 17, 2026
@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jun 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit b03e6e0 into nodejs:mainJun 17, 2026
95 of 96 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in b03e6e0

aduh95 pushed a commit that referenced this pull request Jun 18, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit to aduh95/node that referenced this pull request Jul 30, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: nodejs#63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Aug 6, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Backport-PR-URL: #64675
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squashPRs the Commit Queue should land as one squashed commit.lib / srcIssues and PRs involving general changes in the lib/ or src/ directories.needs-ciPRs that need a full CI run.review wantedPRs that need review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jasnell@nodejs-github-bot@trivikr@mcollina@gurgunday
, '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

stream: refine stream/iter backpressure and error handling - #63697

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure
Jun 17, 2026
Merged

stream: refine stream/iter backpressure and error handling#63697
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure

Conversation

@jasnell

Copy link
Copy Markdown
Member
  • Improve the backpressure implementation alignment with the spec.
  • Improve error handling in a couple cases.

@jasnell
jasnell requested review from mcollina and trivikrJune 1, 2026 16:22
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Jun 1, 2026
@codecov

codecovBot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.35%. Comparing base (faa413e) to head (28142cd).
⚠️ Report is 39 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/streams/iter/classic.js62.50%6 Missing ⚠️
lib/internal/streams/iter/consumers.js91.42%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #63697 +/- ##
==========================================
- Coverage 91.96% 90.35% -1.62% 
==========================================
Files 379 732 +353 Lines 166659 236588 +69929 Branches 25502 44567 +19065 ==========================================
+ Hits 153270 213763 +60493 - Misses 13100 14544 +1444 - Partials 289 8281 +7992 
Files with missing linesCoverage Δ
lib/internal/streams/iter/pull.js88.23% <ø> (+0.02%)⬆️
lib/internal/streams/iter/push.js90.84% <100.00%> (-0.79%)⬇️
lib/internal/streams/iter/types.js100.00% <ø> (ø)
lib/internal/streams/iter/consumers.js96.76% <91.42%> (+0.15%)⬆️
lib/internal/streams/iter/classic.js89.26% <62.50%> (+0.35%)⬆️

... and 478 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/streams/iter/classic.js
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/push.js
@jasnell
jasnellforce-pushed the jasnell/refine-stream-iter-backpressure branch from bea41b1 to 28142cdCompareJune 2, 2026 11:45
@jasnell
jasnell requested a review from trivikrJune 2, 2026 11:45
@jasnelljasnell changed the title Jasnell/refine stream iter backpressurestream: refine stream/iter backpressure and error handlingJun 2, 2026
@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@trivikrtrivikr added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Jun 6, 2026
jasnell added 2 commits June 8, 2026 18:25
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@trivikr
trivikrforce-pushed the jasnell/refine-stream-iter-backpressure branch from 28142cd to c29567eCompareJune 9, 2026 01:28

@trivikrtrivikr 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.

Rebased after resolving conflicts with #63564

@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 9, 2026
@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

Since I rebased the changes to resolve conflict, this needs approval from another reviewer for CI to start.

@trivikrtrivikr added review wanted PRs that need review. and removed author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Jun 9, 2026
@trivikrtrivikr added the review wanted PRs that need review. label Jun 16, 2026

@mcollinamcollina 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.

lgtm

@mcollinamcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 17, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgundaygurgunday 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.

lgtm

@trivikrtrivikr added commit-queue-squash PRs the Commit Queue should land as one squashed commit. commit-queue PRs queued for automated landing through the Commit Queue. labels Jun 17, 2026
@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jun 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit b03e6e0 into nodejs:mainJun 17, 2026
95 of 96 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in b03e6e0

aduh95 pushed a commit that referenced this pull request Jun 18, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit to aduh95/node that referenced this pull request Jul 30, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: nodejs#63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Aug 6, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Backport-PR-URL: #64675
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squashPRs the Commit Queue should land as one squashed commit.lib / srcIssues and PRs involving general changes in the lib/ or src/ directories.needs-ciPRs that need a full CI run.review wantedPRs that need review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jasnell@nodejs-github-bot@trivikr@mcollina@gurgunday
, '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

stream: refine stream/iter backpressure and error handling - #63697

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure
Jun 17, 2026
Merged

stream: refine stream/iter backpressure and error handling#63697
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
jasnell:jasnell/refine-stream-iter-backpressure

Conversation

@jasnell

Copy link
Copy Markdown
Member
  • Improve the backpressure implementation alignment with the spec.
  • Improve error handling in a couple cases.

@jasnell
jasnell requested review from mcollina and trivikrJune 1, 2026 16:22
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-botnodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Jun 1, 2026
@codecov

codecovBot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.35%. Comparing base (faa413e) to head (28142cd).
⚠️ Report is 39 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/streams/iter/classic.js62.50%6 Missing ⚠️
lib/internal/streams/iter/consumers.js91.42%3 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #63697 +/- ##
==========================================
- Coverage 91.96% 90.35% -1.62% 
==========================================
Files 379 732 +353 Lines 166659 236588 +69929 Branches 25502 44567 +19065 ==========================================
+ Hits 153270 213763 +60493 - Misses 13100 14544 +1444 - Partials 289 8281 +7992 
Files with missing linesCoverage Δ
lib/internal/streams/iter/pull.js88.23% <ø> (+0.02%)⬆️
lib/internal/streams/iter/push.js90.84% <100.00%> (-0.79%)⬇️
lib/internal/streams/iter/types.js100.00% <ø> (ø)
lib/internal/streams/iter/consumers.js96.76% <91.42%> (+0.15%)⬆️
lib/internal/streams/iter/classic.js89.26% <62.50%> (+0.35%)⬆️

... and 478 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/streams/iter/classic.js
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/consumers.js Outdated
Comment threadlib/internal/streams/iter/push.js
@jasnell
jasnellforce-pushed the jasnell/refine-stream-iter-backpressure branch from bea41b1 to 28142cdCompareJune 2, 2026 11:45
@jasnell
jasnell requested a review from trivikrJune 2, 2026 11:45
@jasnelljasnell changed the title Jasnell/refine stream iter backpressurestream: refine stream/iter backpressure and error handlingJun 2, 2026
@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@trivikrtrivikr added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Jun 6, 2026
jasnell added 2 commits June 8, 2026 18:25
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
Signed-off-by: James M Snell <jasnell@gmail.com>
@trivikr
trivikrforce-pushed the jasnell/refine-stream-iter-backpressure branch from 28142cd to c29567eCompareJune 9, 2026 01:28

@trivikrtrivikr 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.

Rebased after resolving conflicts with #63564

@trivikrtrivikr added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 9, 2026
@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

Since I rebased the changes to resolve conflict, this needs approval from another reviewer for CI to start.

@trivikrtrivikr added review wanted PRs that need review. and removed author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Jun 9, 2026
@trivikrtrivikr added the review wanted PRs that need review. label Jun 16, 2026

@mcollinamcollina 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.

lgtm

@mcollinamcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Jun 17, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgundaygurgunday 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.

lgtm

@trivikrtrivikr added commit-queue-squash PRs the Commit Queue should land as one squashed commit. commit-queue PRs queued for automated landing through the Commit Queue. labels Jun 17, 2026
@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jun 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit b03e6e0 into nodejs:mainJun 17, 2026
95 of 96 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in b03e6e0

aduh95 pushed a commit that referenced this pull request Jun 18, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit to aduh95/node that referenced this pull request Jul 30, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: nodejs#63697
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Aug 6, 2026
In `Writer`, there are two queues that matter: the slot queue
and the pending queue. The sync `writeSync`/`writevSync` only
use the slot queue. If writes cannot be accepted directly into
slots, they return `false`. The sync methods *never* enqueue
into the pending queue. The async `write`/`writev` will first
attempt to add to the slot queue; if it is full, then it will
attempt to add to the pending queue; if that is also full, the
backpressure policy kicks in.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #63697
Backport-PR-URL: #64675
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squashPRs the Commit Queue should land as one squashed commit.lib / srcIssues and PRs involving general changes in the lib/ or src/ directories.needs-ciPRs that need a full CI run.review wantedPRs that need review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jasnell@nodejs-github-bot@trivikr@mcollina@gurgunday