`tsc --watch` in virtual machine fails with `fanotify_mark on '...' failed: invalid cross-device link` trying to watch parent directories
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 62/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- linux, typescript
- Domínio
- operating-systems, tooling
Direção de pesquisa
A falha vem da chamada ao watcher do fanotify, que retorna EXDEV no diretório pai /home/michael/Sync/Projects. O relator aponta uma verificação existente que recorre ao inotify e diz que tratar também EXDEV ali resolve o problema; comece por essa verificação e pela configuração do watch que a chama. Está pronto quando tsc --watch em um caminho que abrange montagens virtiofs recorre ao inotify em vez de falhar, e o comportamento atual do watch continua passando nos seus testes.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
🔎 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.
- Linguagem predominante
- Go
- Estrelas
- 112k
- Forks
- 15.4k
- Merge médio
- 3d 1h
- PRs com merge (30d)
- 136
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de microsoft/TypeScript
-
Native API: formatDiagnosticsWithColorAndContext drops related information without a file locationTalvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
microsoft/TypeScript#65087 ·
Mantenedores costumam responder em até 1 dia
-
TS7 LSP: documentHighlight returns nothing when the file path contains '@'Talvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. AbertaBug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
microsoft/TypeScript#64758 ·
Mantenedores costumam responder em até 1 dia
-
Language server (tsc --lsp) exits with code 1 after `shutdown` and `exit`Talvez já em andamento @rajnish-verma-22172 assumiu há 14 dias. AbertaBug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
microsoft/TypeScript#64742 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Non-enum CLI options with multiple values separated by comma and space aren't whitespace trimmedTalvez já em andamento @RyanCavanaugh assumiu há 28 dias. AbertaBug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
microsoft/TypeScript#64618 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
TypeScript 7 VS Code extension: a workspace "typescript" 7.x package is not detected, only "@typescript/native-preview", which is no longer publishedTalvez livre de novo @jakebailey assumiu há 28 dias e não há nenhum pull request aberto. AbertaNeeds Investigation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
microsoft/TypeScript#64565 · 1 reação · 1 responsável ·
Mantenedores costumam responder em até 1 dia
Todas as issues de microsoft/TypeScript
Issues semelhantes
-
mqtt_paho: transformer.DeleteExtension and DeleteAttribute make WritePubMessage failTalvez já em andamento @RaphaelFakhri assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
cloudevents/sdk-go#1349 ·
-
getChaosHub always returns totalFaults "0"Talvez já em andamento @Aryanbhargava18 assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
litmuschaos/litmus#5710 ·
Mantenedores costumam responder em até 3 dias
-
vtselect: data race in Tempo search tags APIs for invalid TraceQL queriesTalvez já em andamento @Shubham19032004 assumiu hoje. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
VictoriaMetrics/VictoriaTraces#304 ·
Mantenedores costumam responder em até 1 dia
-
kn secret create --tls-cert creates the certificate under the wrong keyTalvez já em andamento @RaphaelFakhri assumiu hoje. Aberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 91/100
Mantenedores costumam responder em até 1 dia
-
Routing rule or circuit breaker trip expression with an unknown CEL function hangs daprdTalvez já em andamento @RaphaelFakhri assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia