`tsc --watch` in virtual machine fails with `fanotify_mark on '...' failed: invalid cross-device link` trying to watch parent directories
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 62/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- linux, typescript
- Lĩnh vực
- operating-systems, tooling
Hướng nghiên cứu
Lỗi xuất phát từ lệnh gọi watcher fanotify, lệnh này trả về EXDEV cho thư mục cha /home/michael/Sync/Projects. Người báo lỗi liên kết tới một kiểm tra hiện có có cơ chế dự phòng sang inotify, và cho rằng xử lý thêm EXDEV ở đó sẽ khắc phục được lỗi; hãy bắt đầu từ kiểm tra đó và từ phần thiết lập watch gọi nó. Hoàn thành khi tsc --watch trên một đường dẫn đi qua các mount virtiofs chuyển sang inotify thay vì thất bại, và hành vi watch hiện có vẫn vượt qua các bài kiểm thử của nó.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
🔎 Search Terms
Hi,
I'm using TypeScript in a VM and TypeScript 7's fanotify-based watching consistently fails (and tsc doesn't watch at all as result).
Filesystems are mounted like this:
/storage type ext4
/ type overlay (rw,relatime,lowerdir+=/storage/...,upperdir=/storage/...,workdir=/storage/...,index=off)
/home/michael type virtiofs (rw,relatime)
/home/michael/Sync/Projects/test type virtiofs (rw,relatime)
🕗 Version & Regression Information
- This changed between versions 6.0.2 and 7.0.0
⏯ Playground Link
No response
💻 Code
n/a (doesn't depend on input file content)
I tried to include a reasonably small reproduction script, but it doesn't reproduce easily with loopback-mounted ext4, tmpfs, overlayfs or similar.
🙁 Actual behavior
$ node_modules/.bin/tsc --watch
[07:39:08 PM] Starting compilation in watch mode...
fanotify_mark on '/home/michael/Sync/Projects/test' failed: invalid cross-device link
(never updates when changing files)
🙂 Expected behavior
$ node_modules/.bin/tsc --watch
[07:39:08 PM] Starting compilation in watch mode...
(and updates when changing files)
Additional information about the issue
strace reveals a lot about what tsc is doing:
$ strace -f -e trace=fanotify_init,fanotify_mark ./node_modules/.bin/tsc --watch
[pid 7886] fanotify_init(FAN_CLASS_NOTIF|FAN_CLOEXEC|FAN_NONBLOCK|FAN_REPORT_FID|FAN_REPORT_DIR_FID|FAN_REPORT_NAME, O_RDONLY|O_CLOEXEC) = 7
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_REMOVE|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/@typescript") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/@typescript/typescript-linux-x64") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/@typescript/typescript-linux-x64/lib") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/bin") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/lib") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/dist") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/dist/api") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/dist/api/async") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/dist/api/sync") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/dist/api/node") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/dist/ast") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/dist/enums") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/dist/internal") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/vendor") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/vendor/vscode-jsonrpc") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/vendor/vscode-jsonrpc/lib") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/vendor/vscode-jsonrpc/lib/common") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/vendor/vscode-jsonrpc/lib/browser") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/vendor/vscode-jsonrpc/lib/node") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/typescript/vendor/vscode-jsonrpc/typings") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects/test/node_modules/.bin") = 0
[pid 7877] fanotify_mark(7, FAN_MARK_ADD|FAN_MARK_DONT_FOLLOW|FAN_MARK_ONLYDIR, FAN_MODIFY|FAN_CREATE|FAN_DELETE|FAN_DELETE_SELF|FAN_MOVE_SELF|FAN_EVENT_ON_CHILD|FAN_RENAME|FAN_ONDIR, AT_FDCWD, "/home/michael/Sync/Projects") = -1 EXDEV (Invalid cross-device link)
And it's trying to start watching all the parent directories above the project, too (and starting to fail there).
I looked for known issues and found the very similar #63646 (but that's already closed).
Instead of trying longer to find a small reproduction script that boots up a VM, I just tried out extending the existing check that triggers a fallback to inotify.
And 3.8 GiB disk space later I can confirm that just checking for EXDEV, too, fixes my issue and it works blazingly fast and smooth compared to pre-7.0.
- Ngôn ngữ chính
- Go
- Star
- 112k
- Fork
- 15.4k
- Merge trung bình
- 3 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 136
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của microsoft/TypeScript
-
Native API: formatDiagnosticsWithColorAndContext drops related information without a file locationCó thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
microsoft/TypeScript#65087 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
TS7 LSP: documentHighlight returns nothing when the file path contains '@'Có thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mởBug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
microsoft/TypeScript#64758 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Language server (tsc --lsp) exits with code 1 after `shutdown` and `exit`Có thể đã có người làm @rajnish-verma-22172 đã nhận 13 ngày trước. Đang mởBug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
microsoft/TypeScript#64742 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Non-enum CLI options with multiple values separated by comma and space aren't whitespace trimmedCó thể đã có người làm @RyanCavanaugh đã nhận 28 ngày trước. Đang mởBug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
microsoft/TypeScript#64618 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
TypeScript 7 VS Code extension: a workspace "typescript" 7.x package is not detected, only "@typescript/native-preview", which is no longer publishedCó thể làm lại được @jakebailey đã nhận 28 ngày trước và không có pull request nào đang mở. Đang mởNeeds Investigation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
microsoft/TypeScript#64565 · 1 reaction · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của microsoft/TypeScript
Issue tương tự
-
CLI: `describe <ns>.<table>` reports "namespace does not exist" when only the table is missingCó thể đã có người làm @Shruthirdy đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
apache/iceberg-go#2423 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
post-v4
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
rishikanthc/Scriberr#506 ·
-
[Bug] rollingUpdatePartition panics when live StatefulSet replicas sit far below the desired countĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
sgl-project/rbg#547 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area: frontend priority: normal
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày