fs: handle recursive watch setup races - #65699

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev
Sep 3, 2026
Merged

fs: handle recursive watch setup races#65699
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev

Conversation

@panva

@panvapanva commented Sep 1, 2026

Copy link
Copy Markdown
Member

Arm directory watchers before reading entries to close the setup window. Discard stale watcher state when paths disappear so recreated paths can be watched again.

On AIX, treat ENODEV as missing only when stat confirms the path is gone. Preserve root throwIfNoEntry behavior and other watch errors.

Fixes: #65697

@nodejs-github-botnodejs-github-bot added fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Sep 1, 2026
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from 668c4de to bdb25e9CompareSeptember 1, 2026 08:39
@panva
panva marked this pull request as draft September 1, 2026 08:56
@aduh95

aduh95 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: nodejs#65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from bdb25e9 to 67b5c41CompareSeptember 1, 2026 10:05
@panva
panva marked this pull request as ready for review September 1, 2026 10:10
@codecov

codecovBot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.21739% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.06%. Comparing base (f9ab994) to head (a075c13).
⚠️ Report is 11 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/fs/recursive_watch.js65.21%21 Missing and 3 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #65699 +/- ##
==========================================
- Coverage 90.07% 90.06% -0.02% 
==========================================
Files 754 754 Lines 256395 256444 +49 Branches 48494 48516 +22 ==========================================
+ Hits 230947 230963 +16 - Misses 16563 16582 +19 - Partials 8885 8899 +14 
Files with missing linesCoverage Δ
lib/internal/fs/recursive_watch.js85.12% <65.21%> (-3.73%)⬇️

... and 29 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.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Comment threadtest/parallel/test-fs-watch-recursive-setup-races.js Outdated
@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex

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

RSLGTM

@panvapanva added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 2, 2026
@sxa

sxa commented Sep 2, 2026

Copy link
Copy Markdown
Member

@panva This is presumably blocked because it still has needs-ci on it but the github checks are complete. I do note that the last node-test-pull-request run didn't run to completion but I guess an earlier one did to make the github checks complete ok ... Should we just remove needs-ci?

@panva

panva commented Sep 2, 2026

Copy link
Copy Markdown
MemberAuthor

It is not blocked. It'll land with the first CQ after it ages.

The `needs-ci` label identifies pull requests that require a full Jenkins CI
run. It is a classification, not an indication that CI is still pending. Leave
it in place after CI completes. Removing it does not waive the underlying CI
requirement or make a pull request eligible to land without the required
checks. Removing it also makes it harder for releasers to identify the scope of
a change when working on a release proposal.

I do note that the last node-test-pull-request run didn't run to completion

It did. With known flakes. It's not red and it's not aborted. So it's good. Orange is acceptable.

git node land 65699 ✔ Done loading data for nodejs/node/pull/65699
----------------------------------- PR info ------------------------------------
Title fs: handle recursive watch setup races (#65699)
Author Filip Skokan <panva.ip@gmail.com> (@panva)
Branch panva:fix-recursive-watch-aix-enodev -> nodejs:main
Labels fs, author ready, needs-ci, commit-queue
Commits 2
- fs: handle recursive watch setup races
- fixup! fs: handle recursive watch setup races
Committers 1
- Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/65699
Fixes: https://github.com/nodejs/node/issues/65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Tue, 01 Sep 2026 08:33:33 GMT
✔ Approvals: 2
✔ - Shelley Vohr (@codebytere): https://github.com/nodejs/node/pull/65699#pullrequestreview-5080561571
✔ - Luigi Pinca (@lpinca): https://github.com/nodejs/node/pull/65699#pullrequestreview-5082737185
✘ This PR needs to wait 15 more hours to land
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-09-02T03:52:29Z: https://ci.nodejs.org/job/node-test-pull-request/76868/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
? This PR is not ready to land, do you want to continue? (Y/n)

@sxa

sxa commented Sep 3, 2026

Copy link
Copy Markdown
Member

after it ages.

Ah yes missed that bit :-)

@nodejs-github-bot
nodejs-github-bot merged commit e91db8b into nodejs:mainSep 3, 2026
76 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in e91db8b

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 3, 2026
@panva
panva deleted the fix-recursive-watch-aix-enodev branch September 3, 2026 08:45
aduh95 pushed a commit that referenced this pull request Sep 3, 2026
Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: #65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65699Fixes: #65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
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.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs-watch-recursive-delete-race consistently failing on AIX

6 participants

@panva@aduh95@nodejs-github-bot@sxa@lpinca@codebytere
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e 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

fs: handle recursive watch setup races - #65699

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev
Sep 3, 2026
Merged

fs: handle recursive watch setup races#65699
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev

Conversation

@panva

@panvapanva commented Sep 1, 2026

Copy link
Copy Markdown
Member

Arm directory watchers before reading entries to close the setup window. Discard stale watcher state when paths disappear so recreated paths can be watched again.

On AIX, treat ENODEV as missing only when stat confirms the path is gone. Preserve root throwIfNoEntry behavior and other watch errors.

Fixes: #65697

@nodejs-github-botnodejs-github-bot added fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Sep 1, 2026
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from 668c4de to bdb25e9CompareSeptember 1, 2026 08:39
@panva
panva marked this pull request as draft September 1, 2026 08:56
@aduh95

aduh95 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: nodejs#65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from bdb25e9 to 67b5c41CompareSeptember 1, 2026 10:05
@panva
panva marked this pull request as ready for review September 1, 2026 10:10
@codecov

codecovBot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.21739% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.06%. Comparing base (f9ab994) to head (a075c13).
⚠️ Report is 11 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/fs/recursive_watch.js65.21%21 Missing and 3 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #65699 +/- ##
==========================================
- Coverage 90.07% 90.06% -0.02% 
==========================================
Files 754 754 Lines 256395 256444 +49 Branches 48494 48516 +22 ==========================================
+ Hits 230947 230963 +16 - Misses 16563 16582 +19 - Partials 8885 8899 +14 
Files with missing linesCoverage Δ
lib/internal/fs/recursive_watch.js85.12% <65.21%> (-3.73%)⬇️

... and 29 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.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Comment threadtest/parallel/test-fs-watch-recursive-setup-races.js Outdated
@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex

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

RSLGTM

@panvapanva added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 2, 2026
@sxa

sxa commented Sep 2, 2026

Copy link
Copy Markdown
Member

@panva This is presumably blocked because it still has needs-ci on it but the github checks are complete. I do note that the last node-test-pull-request run didn't run to completion but I guess an earlier one did to make the github checks complete ok ... Should we just remove needs-ci?

@panva

panva commented Sep 2, 2026

Copy link
Copy Markdown
MemberAuthor

It is not blocked. It'll land with the first CQ after it ages.

The `needs-ci` label identifies pull requests that require a full Jenkins CI
run. It is a classification, not an indication that CI is still pending. Leave
it in place after CI completes. Removing it does not waive the underlying CI
requirement or make a pull request eligible to land without the required
checks. Removing it also makes it harder for releasers to identify the scope of
a change when working on a release proposal.

I do note that the last node-test-pull-request run didn't run to completion

It did. With known flakes. It's not red and it's not aborted. So it's good. Orange is acceptable.

git node land 65699 ✔ Done loading data for nodejs/node/pull/65699
----------------------------------- PR info ------------------------------------
Title fs: handle recursive watch setup races (#65699)
Author Filip Skokan <panva.ip@gmail.com> (@panva)
Branch panva:fix-recursive-watch-aix-enodev -> nodejs:main
Labels fs, author ready, needs-ci, commit-queue
Commits 2
- fs: handle recursive watch setup races
- fixup! fs: handle recursive watch setup races
Committers 1
- Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/65699
Fixes: https://github.com/nodejs/node/issues/65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Tue, 01 Sep 2026 08:33:33 GMT
✔ Approvals: 2
✔ - Shelley Vohr (@codebytere): https://github.com/nodejs/node/pull/65699#pullrequestreview-5080561571
✔ - Luigi Pinca (@lpinca): https://github.com/nodejs/node/pull/65699#pullrequestreview-5082737185
✘ This PR needs to wait 15 more hours to land
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-09-02T03:52:29Z: https://ci.nodejs.org/job/node-test-pull-request/76868/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
? This PR is not ready to land, do you want to continue? (Y/n)

@sxa

sxa commented Sep 3, 2026

Copy link
Copy Markdown
Member

after it ages.

Ah yes missed that bit :-)

@nodejs-github-bot
nodejs-github-bot merged commit e91db8b into nodejs:mainSep 3, 2026
76 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in e91db8b

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 3, 2026
@panva
panva deleted the fix-recursive-watch-aix-enodev branch September 3, 2026 08:45
aduh95 pushed a commit that referenced this pull request Sep 3, 2026
Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: #65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65699Fixes: #65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
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.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs-watch-recursive-delete-race consistently failing on AIX

6 participants

@panva@aduh95@nodejs-github-bot@sxa@lpinca@codebytere
, '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

fs: handle recursive watch setup races - #65699

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev
Sep 3, 2026
Merged

fs: handle recursive watch setup races#65699
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev

Conversation

@panva

@panvapanva commented Sep 1, 2026

Copy link
Copy Markdown
Member

Arm directory watchers before reading entries to close the setup window. Discard stale watcher state when paths disappear so recreated paths can be watched again.

On AIX, treat ENODEV as missing only when stat confirms the path is gone. Preserve root throwIfNoEntry behavior and other watch errors.

Fixes: #65697

@nodejs-github-botnodejs-github-bot added fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Sep 1, 2026
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from 668c4de to bdb25e9CompareSeptember 1, 2026 08:39
@panva
panva marked this pull request as draft September 1, 2026 08:56
@aduh95

aduh95 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: nodejs#65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from bdb25e9 to 67b5c41CompareSeptember 1, 2026 10:05
@panva
panva marked this pull request as ready for review September 1, 2026 10:10
@codecov

codecovBot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.21739% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.06%. Comparing base (f9ab994) to head (a075c13).
⚠️ Report is 11 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/fs/recursive_watch.js65.21%21 Missing and 3 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #65699 +/- ##
==========================================
- Coverage 90.07% 90.06% -0.02% 
==========================================
Files 754 754 Lines 256395 256444 +49 Branches 48494 48516 +22 ==========================================
+ Hits 230947 230963 +16 - Misses 16563 16582 +19 - Partials 8885 8899 +14 
Files with missing linesCoverage Δ
lib/internal/fs/recursive_watch.js85.12% <65.21%> (-3.73%)⬇️

... and 29 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.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Comment threadtest/parallel/test-fs-watch-recursive-setup-races.js Outdated
@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex

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

RSLGTM

@panvapanva added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 2, 2026
@sxa

sxa commented Sep 2, 2026

Copy link
Copy Markdown
Member

@panva This is presumably blocked because it still has needs-ci on it but the github checks are complete. I do note that the last node-test-pull-request run didn't run to completion but I guess an earlier one did to make the github checks complete ok ... Should we just remove needs-ci?

@panva

panva commented Sep 2, 2026

Copy link
Copy Markdown
MemberAuthor

It is not blocked. It'll land with the first CQ after it ages.

The `needs-ci` label identifies pull requests that require a full Jenkins CI
run. It is a classification, not an indication that CI is still pending. Leave
it in place after CI completes. Removing it does not waive the underlying CI
requirement or make a pull request eligible to land without the required
checks. Removing it also makes it harder for releasers to identify the scope of
a change when working on a release proposal.

I do note that the last node-test-pull-request run didn't run to completion

It did. With known flakes. It's not red and it's not aborted. So it's good. Orange is acceptable.

git node land 65699 ✔ Done loading data for nodejs/node/pull/65699
----------------------------------- PR info ------------------------------------
Title fs: handle recursive watch setup races (#65699)
Author Filip Skokan <panva.ip@gmail.com> (@panva)
Branch panva:fix-recursive-watch-aix-enodev -> nodejs:main
Labels fs, author ready, needs-ci, commit-queue
Commits 2
- fs: handle recursive watch setup races
- fixup! fs: handle recursive watch setup races
Committers 1
- Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/65699
Fixes: https://github.com/nodejs/node/issues/65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Tue, 01 Sep 2026 08:33:33 GMT
✔ Approvals: 2
✔ - Shelley Vohr (@codebytere): https://github.com/nodejs/node/pull/65699#pullrequestreview-5080561571
✔ - Luigi Pinca (@lpinca): https://github.com/nodejs/node/pull/65699#pullrequestreview-5082737185
✘ This PR needs to wait 15 more hours to land
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-09-02T03:52:29Z: https://ci.nodejs.org/job/node-test-pull-request/76868/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
? This PR is not ready to land, do you want to continue? (Y/n)

@sxa

sxa commented Sep 3, 2026

Copy link
Copy Markdown
Member

after it ages.

Ah yes missed that bit :-)

@nodejs-github-bot
nodejs-github-bot merged commit e91db8b into nodejs:mainSep 3, 2026
76 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in e91db8b

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 3, 2026
@panva
panva deleted the fix-recursive-watch-aix-enodev branch September 3, 2026 08:45
aduh95 pushed a commit that referenced this pull request Sep 3, 2026
Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: #65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65699Fixes: #65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
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.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs-watch-recursive-delete-race consistently failing on AIX

6 participants

@panva@aduh95@nodejs-github-bot@sxa@lpinca@codebytere
, '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 \u003e 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

fs: handle recursive watch setup races - #65699

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev
Sep 3, 2026
Merged

fs: handle recursive watch setup races#65699
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev

Conversation

@panva

@panvapanva commented Sep 1, 2026

Copy link
Copy Markdown
Member

Arm directory watchers before reading entries to close the setup window. Discard stale watcher state when paths disappear so recreated paths can be watched again.

On AIX, treat ENODEV as missing only when stat confirms the path is gone. Preserve root throwIfNoEntry behavior and other watch errors.

Fixes: #65697

@nodejs-github-botnodejs-github-bot added fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Sep 1, 2026
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from 668c4de to bdb25e9CompareSeptember 1, 2026 08:39
@panva
panva marked this pull request as draft September 1, 2026 08:56
@aduh95

aduh95 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: nodejs#65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from bdb25e9 to 67b5c41CompareSeptember 1, 2026 10:05
@panva
panva marked this pull request as ready for review September 1, 2026 10:10
@codecov

codecovBot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.21739% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.06%. Comparing base (f9ab994) to head (a075c13).
⚠️ Report is 11 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/fs/recursive_watch.js65.21%21 Missing and 3 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #65699 +/- ##
==========================================
- Coverage 90.07% 90.06% -0.02% 
==========================================
Files 754 754 Lines 256395 256444 +49 Branches 48494 48516 +22 ==========================================
+ Hits 230947 230963 +16 - Misses 16563 16582 +19 - Partials 8885 8899 +14 
Files with missing linesCoverage Δ
lib/internal/fs/recursive_watch.js85.12% <65.21%> (-3.73%)⬇️

... and 29 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.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Comment threadtest/parallel/test-fs-watch-recursive-setup-races.js Outdated
@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex

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

RSLGTM

@panvapanva added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 2, 2026
@sxa

sxa commented Sep 2, 2026

Copy link
Copy Markdown
Member

@panva This is presumably blocked because it still has needs-ci on it but the github checks are complete. I do note that the last node-test-pull-request run didn't run to completion but I guess an earlier one did to make the github checks complete ok ... Should we just remove needs-ci?

@panva

panva commented Sep 2, 2026

Copy link
Copy Markdown
MemberAuthor

It is not blocked. It'll land with the first CQ after it ages.

The `needs-ci` label identifies pull requests that require a full Jenkins CI
run. It is a classification, not an indication that CI is still pending. Leave
it in place after CI completes. Removing it does not waive the underlying CI
requirement or make a pull request eligible to land without the required
checks. Removing it also makes it harder for releasers to identify the scope of
a change when working on a release proposal.

I do note that the last node-test-pull-request run didn't run to completion

It did. With known flakes. It's not red and it's not aborted. So it's good. Orange is acceptable.

git node land 65699 ✔ Done loading data for nodejs/node/pull/65699
----------------------------------- PR info ------------------------------------
Title fs: handle recursive watch setup races (#65699)
Author Filip Skokan <panva.ip@gmail.com> (@panva)
Branch panva:fix-recursive-watch-aix-enodev -> nodejs:main
Labels fs, author ready, needs-ci, commit-queue
Commits 2
- fs: handle recursive watch setup races
- fixup! fs: handle recursive watch setup races
Committers 1
- Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/65699
Fixes: https://github.com/nodejs/node/issues/65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Tue, 01 Sep 2026 08:33:33 GMT
✔ Approvals: 2
✔ - Shelley Vohr (@codebytere): https://github.com/nodejs/node/pull/65699#pullrequestreview-5080561571
✔ - Luigi Pinca (@lpinca): https://github.com/nodejs/node/pull/65699#pullrequestreview-5082737185
✘ This PR needs to wait 15 more hours to land
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-09-02T03:52:29Z: https://ci.nodejs.org/job/node-test-pull-request/76868/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
? This PR is not ready to land, do you want to continue? (Y/n)

@sxa

sxa commented Sep 3, 2026

Copy link
Copy Markdown
Member

after it ages.

Ah yes missed that bit :-)

@nodejs-github-bot
nodejs-github-bot merged commit e91db8b into nodejs:mainSep 3, 2026
76 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in e91db8b

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 3, 2026
@panva
panva deleted the fix-recursive-watch-aix-enodev branch September 3, 2026 08:45
aduh95 pushed a commit that referenced this pull request Sep 3, 2026
Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: #65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65699Fixes: #65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
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.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs-watch-recursive-delete-race consistently failing on AIX

6 participants

@panva@aduh95@nodejs-github-bot@sxa@lpinca@codebytere
, '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

fs: handle recursive watch setup races - #65699

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev
Sep 3, 2026
Merged

fs: handle recursive watch setup races#65699
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev

Conversation

@panva

@panvapanva commented Sep 1, 2026

Copy link
Copy Markdown
Member

Arm directory watchers before reading entries to close the setup window. Discard stale watcher state when paths disappear so recreated paths can be watched again.

On AIX, treat ENODEV as missing only when stat confirms the path is gone. Preserve root throwIfNoEntry behavior and other watch errors.

Fixes: #65697

@nodejs-github-botnodejs-github-bot added fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Sep 1, 2026
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from 668c4de to bdb25e9CompareSeptember 1, 2026 08:39
@panva
panva marked this pull request as draft September 1, 2026 08:56
@aduh95

aduh95 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: nodejs#65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from bdb25e9 to 67b5c41CompareSeptember 1, 2026 10:05
@panva
panva marked this pull request as ready for review September 1, 2026 10:10
@codecov

codecovBot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.21739% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.06%. Comparing base (f9ab994) to head (a075c13).
⚠️ Report is 11 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/fs/recursive_watch.js65.21%21 Missing and 3 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #65699 +/- ##
==========================================
- Coverage 90.07% 90.06% -0.02% 
==========================================
Files 754 754 Lines 256395 256444 +49 Branches 48494 48516 +22 ==========================================
+ Hits 230947 230963 +16 - Misses 16563 16582 +19 - Partials 8885 8899 +14 
Files with missing linesCoverage Δ
lib/internal/fs/recursive_watch.js85.12% <65.21%> (-3.73%)⬇️

... and 29 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.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Comment threadtest/parallel/test-fs-watch-recursive-setup-races.js Outdated
@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex

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

RSLGTM

@panvapanva added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 2, 2026
@sxa

sxa commented Sep 2, 2026

Copy link
Copy Markdown
Member

@panva This is presumably blocked because it still has needs-ci on it but the github checks are complete. I do note that the last node-test-pull-request run didn't run to completion but I guess an earlier one did to make the github checks complete ok ... Should we just remove needs-ci?

@panva

panva commented Sep 2, 2026

Copy link
Copy Markdown
MemberAuthor

It is not blocked. It'll land with the first CQ after it ages.

The `needs-ci` label identifies pull requests that require a full Jenkins CI
run. It is a classification, not an indication that CI is still pending. Leave
it in place after CI completes. Removing it does not waive the underlying CI
requirement or make a pull request eligible to land without the required
checks. Removing it also makes it harder for releasers to identify the scope of
a change when working on a release proposal.

I do note that the last node-test-pull-request run didn't run to completion

It did. With known flakes. It's not red and it's not aborted. So it's good. Orange is acceptable.

git node land 65699 ✔ Done loading data for nodejs/node/pull/65699
----------------------------------- PR info ------------------------------------
Title fs: handle recursive watch setup races (#65699)
Author Filip Skokan <panva.ip@gmail.com> (@panva)
Branch panva:fix-recursive-watch-aix-enodev -> nodejs:main
Labels fs, author ready, needs-ci, commit-queue
Commits 2
- fs: handle recursive watch setup races
- fixup! fs: handle recursive watch setup races
Committers 1
- Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/65699
Fixes: https://github.com/nodejs/node/issues/65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Tue, 01 Sep 2026 08:33:33 GMT
✔ Approvals: 2
✔ - Shelley Vohr (@codebytere): https://github.com/nodejs/node/pull/65699#pullrequestreview-5080561571
✔ - Luigi Pinca (@lpinca): https://github.com/nodejs/node/pull/65699#pullrequestreview-5082737185
✘ This PR needs to wait 15 more hours to land
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-09-02T03:52:29Z: https://ci.nodejs.org/job/node-test-pull-request/76868/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
? This PR is not ready to land, do you want to continue? (Y/n)

@sxa

sxa commented Sep 3, 2026

Copy link
Copy Markdown
Member

after it ages.

Ah yes missed that bit :-)

@nodejs-github-bot
nodejs-github-bot merged commit e91db8b into nodejs:mainSep 3, 2026
76 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in e91db8b

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 3, 2026
@panva
panva deleted the fix-recursive-watch-aix-enodev branch September 3, 2026 08:45
aduh95 pushed a commit that referenced this pull request Sep 3, 2026
Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: #65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65699Fixes: #65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
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.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs-watch-recursive-delete-race consistently failing on AIX

6 participants

@panva@aduh95@nodejs-github-bot@sxa@lpinca@codebytere
, '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

fs: handle recursive watch setup races - #65699

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev
Sep 3, 2026
Merged

fs: handle recursive watch setup races#65699
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev

Conversation

@panva

@panvapanva commented Sep 1, 2026

Copy link
Copy Markdown
Member

Arm directory watchers before reading entries to close the setup window. Discard stale watcher state when paths disappear so recreated paths can be watched again.

On AIX, treat ENODEV as missing only when stat confirms the path is gone. Preserve root throwIfNoEntry behavior and other watch errors.

Fixes: #65697

@nodejs-github-botnodejs-github-bot added fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Sep 1, 2026
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from 668c4de to bdb25e9CompareSeptember 1, 2026 08:39
@panva
panva marked this pull request as draft September 1, 2026 08:56
@aduh95

aduh95 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: nodejs#65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from bdb25e9 to 67b5c41CompareSeptember 1, 2026 10:05
@panva
panva marked this pull request as ready for review September 1, 2026 10:10
@codecov

codecovBot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.21739% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.06%. Comparing base (f9ab994) to head (a075c13).
⚠️ Report is 11 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/fs/recursive_watch.js65.21%21 Missing and 3 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #65699 +/- ##
==========================================
- Coverage 90.07% 90.06% -0.02% 
==========================================
Files 754 754 Lines 256395 256444 +49 Branches 48494 48516 +22 ==========================================
+ Hits 230947 230963 +16 - Misses 16563 16582 +19 - Partials 8885 8899 +14 
Files with missing linesCoverage Δ
lib/internal/fs/recursive_watch.js85.12% <65.21%> (-3.73%)⬇️

... and 29 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.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Comment threadtest/parallel/test-fs-watch-recursive-setup-races.js Outdated
@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex

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

RSLGTM

@panvapanva added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 2, 2026
@sxa

sxa commented Sep 2, 2026

Copy link
Copy Markdown
Member

@panva This is presumably blocked because it still has needs-ci on it but the github checks are complete. I do note that the last node-test-pull-request run didn't run to completion but I guess an earlier one did to make the github checks complete ok ... Should we just remove needs-ci?

@panva

panva commented Sep 2, 2026

Copy link
Copy Markdown
MemberAuthor

It is not blocked. It'll land with the first CQ after it ages.

The `needs-ci` label identifies pull requests that require a full Jenkins CI
run. It is a classification, not an indication that CI is still pending. Leave
it in place after CI completes. Removing it does not waive the underlying CI
requirement or make a pull request eligible to land without the required
checks. Removing it also makes it harder for releasers to identify the scope of
a change when working on a release proposal.

I do note that the last node-test-pull-request run didn't run to completion

It did. With known flakes. It's not red and it's not aborted. So it's good. Orange is acceptable.

git node land 65699 ✔ Done loading data for nodejs/node/pull/65699
----------------------------------- PR info ------------------------------------
Title fs: handle recursive watch setup races (#65699)
Author Filip Skokan <panva.ip@gmail.com> (@panva)
Branch panva:fix-recursive-watch-aix-enodev -> nodejs:main
Labels fs, author ready, needs-ci, commit-queue
Commits 2
- fs: handle recursive watch setup races
- fixup! fs: handle recursive watch setup races
Committers 1
- Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/65699
Fixes: https://github.com/nodejs/node/issues/65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Tue, 01 Sep 2026 08:33:33 GMT
✔ Approvals: 2
✔ - Shelley Vohr (@codebytere): https://github.com/nodejs/node/pull/65699#pullrequestreview-5080561571
✔ - Luigi Pinca (@lpinca): https://github.com/nodejs/node/pull/65699#pullrequestreview-5082737185
✘ This PR needs to wait 15 more hours to land
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-09-02T03:52:29Z: https://ci.nodejs.org/job/node-test-pull-request/76868/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
? This PR is not ready to land, do you want to continue? (Y/n)

@sxa

sxa commented Sep 3, 2026

Copy link
Copy Markdown
Member

after it ages.

Ah yes missed that bit :-)

@nodejs-github-bot
nodejs-github-bot merged commit e91db8b into nodejs:mainSep 3, 2026
76 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in e91db8b

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 3, 2026
@panva
panva deleted the fix-recursive-watch-aix-enodev branch September 3, 2026 08:45
aduh95 pushed a commit that referenced this pull request Sep 3, 2026
Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: #65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65699Fixes: #65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
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.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs-watch-recursive-delete-race consistently failing on AIX

6 participants

@panva@aduh95@nodejs-github-bot@sxa@lpinca@codebytere
, '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

fs: handle recursive watch setup races - #65699

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev
Sep 3, 2026
Merged

fs: handle recursive watch setup races#65699
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev

Conversation

@panva

@panvapanva commented Sep 1, 2026

Copy link
Copy Markdown
Member

Arm directory watchers before reading entries to close the setup window. Discard stale watcher state when paths disappear so recreated paths can be watched again.

On AIX, treat ENODEV as missing only when stat confirms the path is gone. Preserve root throwIfNoEntry behavior and other watch errors.

Fixes: #65697

@nodejs-github-botnodejs-github-bot added fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Sep 1, 2026
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from 668c4de to bdb25e9CompareSeptember 1, 2026 08:39
@panva
panva marked this pull request as draft September 1, 2026 08:56
@aduh95

aduh95 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: nodejs#65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from bdb25e9 to 67b5c41CompareSeptember 1, 2026 10:05
@panva
panva marked this pull request as ready for review September 1, 2026 10:10
@codecov

codecovBot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.21739% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.06%. Comparing base (f9ab994) to head (a075c13).
⚠️ Report is 11 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/fs/recursive_watch.js65.21%21 Missing and 3 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #65699 +/- ##
==========================================
- Coverage 90.07% 90.06% -0.02% 
==========================================
Files 754 754 Lines 256395 256444 +49 Branches 48494 48516 +22 ==========================================
+ Hits 230947 230963 +16 - Misses 16563 16582 +19 - Partials 8885 8899 +14 
Files with missing linesCoverage Δ
lib/internal/fs/recursive_watch.js85.12% <65.21%> (-3.73%)⬇️

... and 29 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.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Comment threadtest/parallel/test-fs-watch-recursive-setup-races.js Outdated
@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex

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

RSLGTM

@panvapanva added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 2, 2026
@sxa

sxa commented Sep 2, 2026

Copy link
Copy Markdown
Member

@panva This is presumably blocked because it still has needs-ci on it but the github checks are complete. I do note that the last node-test-pull-request run didn't run to completion but I guess an earlier one did to make the github checks complete ok ... Should we just remove needs-ci?

@panva

panva commented Sep 2, 2026

Copy link
Copy Markdown
MemberAuthor

It is not blocked. It'll land with the first CQ after it ages.

The `needs-ci` label identifies pull requests that require a full Jenkins CI
run. It is a classification, not an indication that CI is still pending. Leave
it in place after CI completes. Removing it does not waive the underlying CI
requirement or make a pull request eligible to land without the required
checks. Removing it also makes it harder for releasers to identify the scope of
a change when working on a release proposal.

I do note that the last node-test-pull-request run didn't run to completion

It did. With known flakes. It's not red and it's not aborted. So it's good. Orange is acceptable.

git node land 65699 ✔ Done loading data for nodejs/node/pull/65699
----------------------------------- PR info ------------------------------------
Title fs: handle recursive watch setup races (#65699)
Author Filip Skokan <panva.ip@gmail.com> (@panva)
Branch panva:fix-recursive-watch-aix-enodev -> nodejs:main
Labels fs, author ready, needs-ci, commit-queue
Commits 2
- fs: handle recursive watch setup races
- fixup! fs: handle recursive watch setup races
Committers 1
- Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/65699
Fixes: https://github.com/nodejs/node/issues/65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Tue, 01 Sep 2026 08:33:33 GMT
✔ Approvals: 2
✔ - Shelley Vohr (@codebytere): https://github.com/nodejs/node/pull/65699#pullrequestreview-5080561571
✔ - Luigi Pinca (@lpinca): https://github.com/nodejs/node/pull/65699#pullrequestreview-5082737185
✘ This PR needs to wait 15 more hours to land
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-09-02T03:52:29Z: https://ci.nodejs.org/job/node-test-pull-request/76868/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
? This PR is not ready to land, do you want to continue? (Y/n)

@sxa

sxa commented Sep 3, 2026

Copy link
Copy Markdown
Member

after it ages.

Ah yes missed that bit :-)

@nodejs-github-bot
nodejs-github-bot merged commit e91db8b into nodejs:mainSep 3, 2026
76 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in e91db8b

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 3, 2026
@panva
panva deleted the fix-recursive-watch-aix-enodev branch September 3, 2026 08:45
aduh95 pushed a commit that referenced this pull request Sep 3, 2026
Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: #65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65699Fixes: #65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
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.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs-watch-recursive-delete-race consistently failing on AIX

6 participants

@panva@aduh95@nodejs-github-bot@sxa@lpinca@codebytere
, '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

fs: handle recursive watch setup races - #65699

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev
Sep 3, 2026
Merged

fs: handle recursive watch setup races#65699
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
panva:fix-recursive-watch-aix-enodev

Conversation

@panva

@panvapanva commented Sep 1, 2026

Copy link
Copy Markdown
Member

Arm directory watchers before reading entries to close the setup window. Discard stale watcher state when paths disappear so recreated paths can be watched again.

On AIX, treat ENODEV as missing only when stat confirms the path is gone. Preserve root throwIfNoEntry behavior and other watch errors.

Fixes: #65697

@nodejs-github-botnodejs-github-bot added fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Sep 1, 2026
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from 668c4de to bdb25e9CompareSeptember 1, 2026 08:39
@panva
panva marked this pull request as draft September 1, 2026 08:56
@aduh95

aduh95 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: nodejs#65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@panva
panvaforce-pushed the fix-recursive-watch-aix-enodev branch from bdb25e9 to 67b5c41CompareSeptember 1, 2026 10:05
@panva
panva marked this pull request as ready for review September 1, 2026 10:10
@codecov

codecovBot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.21739% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.06%. Comparing base (f9ab994) to head (a075c13).
⚠️ Report is 11 commits behind head on main.

Files with missing linesPatch %Lines
lib/internal/fs/recursive_watch.js65.21%21 Missing and 3 partials ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #65699 +/- ##
==========================================
- Coverage 90.07% 90.06% -0.02% 
==========================================
Files 754 754 Lines 256395 256444 +49 Branches 48494 48516 +22 ==========================================
+ Hits 230947 230963 +16 - Misses 16563 16582 +19 - Partials 8885 8899 +14 
Files with missing linesCoverage Δ
lib/internal/fs/recursive_watch.js85.12% <65.21%> (-3.73%)⬇️

... and 29 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.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Comment threadtest/parallel/test-fs-watch-recursive-setup-races.js Outdated
@panvapanva removed the author ready PRs with CI started, the required approvals, and no outstanding review comments. label Sep 1, 2026
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex

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

RSLGTM

@panvapanva added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 2, 2026
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Sep 2, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panvapanva added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 2, 2026
@sxa

sxa commented Sep 2, 2026

Copy link
Copy Markdown
Member

@panva This is presumably blocked because it still has needs-ci on it but the github checks are complete. I do note that the last node-test-pull-request run didn't run to completion but I guess an earlier one did to make the github checks complete ok ... Should we just remove needs-ci?

@panva

panva commented Sep 2, 2026

Copy link
Copy Markdown
MemberAuthor

It is not blocked. It'll land with the first CQ after it ages.

The `needs-ci` label identifies pull requests that require a full Jenkins CI
run. It is a classification, not an indication that CI is still pending. Leave
it in place after CI completes. Removing it does not waive the underlying CI
requirement or make a pull request eligible to land without the required
checks. Removing it also makes it harder for releasers to identify the scope of
a change when working on a release proposal.

I do note that the last node-test-pull-request run didn't run to completion

It did. With known flakes. It's not red and it's not aborted. So it's good. Orange is acceptable.

git node land 65699 ✔ Done loading data for nodejs/node/pull/65699
----------------------------------- PR info ------------------------------------
Title fs: handle recursive watch setup races (#65699)
Author Filip Skokan <panva.ip@gmail.com> (@panva)
Branch panva:fix-recursive-watch-aix-enodev -> nodejs:main
Labels fs, author ready, needs-ci, commit-queue
Commits 2
- fs: handle recursive watch setup races
- fixup! fs: handle recursive watch setup races
Committers 1
- Filip Skokan <panva.ip@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/65699
Fixes: https://github.com/nodejs/node/issues/65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
--------------------------------------------------------------------------------
ℹ This PR was created on Tue, 01 Sep 2026 08:33:33 GMT
✔ Approvals: 2
✔ - Shelley Vohr (@codebytere): https://github.com/nodejs/node/pull/65699#pullrequestreview-5080561571
✔ - Luigi Pinca (@lpinca): https://github.com/nodejs/node/pull/65699#pullrequestreview-5082737185
✘ This PR needs to wait 15 more hours to land
✔ Last GitHub CI successful
ℹ Last Full PR CI on 2026-09-02T03:52:29Z: https://ci.nodejs.org/job/node-test-pull-request/76868/
✔ Build data downloaded
✔ Last Jenkins CI successful
--------------------------------------------------------------------------------
? This PR is not ready to land, do you want to continue? (Y/n)

@sxa

sxa commented Sep 3, 2026

Copy link
Copy Markdown
Member

after it ages.

Ah yes missed that bit :-)

@nodejs-github-bot
nodejs-github-bot merged commit e91db8b into nodejs:mainSep 3, 2026
76 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in e91db8b

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 3, 2026
@panva
panva deleted the fix-recursive-watch-aix-enodev branch September 3, 2026 08:45
aduh95 pushed a commit that referenced this pull request Sep 3, 2026
Arm directory watchers before reading entries to close the setup
window. Discard stale watcher state when paths disappear so recreated
paths can be watched again.
On AIX, treat ENODEV as missing only when stat confirms the path is
gone. Preserve root throwIfNoEntry behavior and other watch errors.
Fixes: #65697
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65699Fixes: #65697
Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
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.fsIssues and PRs related to file-system APIs and the fs module.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fs-watch-recursive-delete-race consistently failing on AIX

6 participants

@panva@aduh95@nodejs-github-bot@sxa@lpinca@codebytere