microsoft / vscode

Visual Studio Code
https://code.visualstudio.com
MIT License
163.48k stars 28.97k forks source link

Support mounted remote file systems #212793

Open SheepOfNoise opened 5 months ago

SheepOfNoise commented 5 months ago

Does this issue occur when all extensions are disabled?: Yes/No Yes

Version: 1.90.0-insider Commit: bbc4ba1eff648ee542972589216f211b7a6a08f2 Date: 2024-05-14T05:47:50.971Z Electron: 29.3.1 ElectronBuildId: 9464424 Chromium: 122.0.6261.156 Node.js: 20.9.0 V8: 12.2.281.27-electron.0 OS: Linux x64 4.18.0-425.3.1.el8.x86_64

Steps to Reproduce:

  1. Open a folder on a mounted remote file system.
  2. External to VS Code (e.g. from a terminal window) modify a file in that folder - e.g. touch a new file.
  3. Expected: the Explorer panel should be automatically updated with the newly created file. For the Source Control panel - it should reflect the file change as well.
  4. Actual: no change is reported on either panels, unless I manually refresh them.

Additional information:

I see these errors in the Window output log: 024-05-15 12:06:26.286 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-15 12:06:26.288 [error] [File Watcher (universal)] restarting watcher after error: Invalid argument 2024-05-15 12:06:26.451 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma)

This problem does NOT happen when I open a folder on the local filesystem. This problem does NOT happen when I connect to the machine from a different machine in the same compute cluster (i.e. using the remote VS Code server causes file watch events to be reported as expected).

I tried also with all extensions disabled - same behavior.

bpasero commented 5 months ago

It is likely that the file watcher we leverage (https://github.com/parcel-bundler/watcher) does not support remote file systems, but I have not drilled in further. For example, they do support watchman as backend, which we currently do not expose and its possible this would enable such scenarios.

File events were never really supported for network drives, across all OS. In those cases we recommend using our remote extensions (such as SSH) where file events will work.

Treating as feature request.

SheepOfNoise commented 5 months ago

Dear Benjamin,

Thanks for your prompt response.

I thought so (no support for remote file systems) too, but how come it works well when I connect using Remote-SSH to another machine that has the same mount of the same remote file system? What does the remote-VS-Code-server do better?

Also - this used to work for my team up to a month or so ago. We didn't recall a change made to the remote file system or the machines we work on.

Thanks, Yoav


From: Benjamin Pasero @.> Sent: Wednesday, May 15, 2024 1:32 PM To: microsoft/vscode @.> Cc: SheepOfNoise @.>; Author @.> Subject: Re: [microsoft/vscode] Support mounted remote file systems (Issue #212793)

It is likely that the file watcher we leverage (https://github.com/parcel-bundler/watcher) does not support remote file systems, but I have not drilled in further. Treating as feature request.

— Reply to this email directly, view it on GitHubhttps://github.com/microsoft/vscode/issues/212793#issuecomment-2112150079, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AALYEHXMWAWBKUET4DOJX6LZCM2T3AVCNFSM6AAAAABHXYISEWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMJSGE2TAMBXHE. You are receiving this because you authored the thread.Message ID: @.***>

bpasero commented 5 months ago

Yeah, when connected via remote extension the file watcher runs inside the remote and sends events back to the client. In that case, file events will work. But in the local case, the file watcher relies on the OS reporting events from mounted network drives which is unsupported as far as I know even by the OS.

It is much more preferred to use remote extension, everything will work a lot better, including extensions.

SheepOfNoise commented 5 months ago

I clarify the setting:

  1. I have two machines L and R, identical for our discussion.
  2. They both have the same mounts to a remote file system.
  3. I launch VS Code on machine L, and try to receive file modification notification made to a mounted file system. This currently fails.
  4. I then connect using Remote SSH to machine R, and then open the same folder as before.
  5. Now, changes made to the same path on the remote file system (remote from the perspective of both machines!) are generating notification that update the said VS Code panels.
  6. To make sure the two machines are the same, I repeated the test with L and R reversed.
  7. At no point during this test was a local file system involved.

Yoav.


From: Benjamin Pasero @.> Sent: Wednesday, May 15, 2024 3:01 PM To: microsoft/vscode @.> Cc: SheepOfNoise @.>; Author @.> Subject: Re: [microsoft/vscode] Support mounted remote file systems (Issue #212793)

Yeah, when connected via remote extension the file watcher runs inside the remote and sends events back to the client. In that case, file events will work. But in the local case, the file watcher relies on the OS reporting events from mounted network drives which is unsupported as far as I know even by the OS.

— Reply to this email directly, view it on GitHubhttps://github.com/microsoft/vscode/issues/212793#issuecomment-2112342179, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AALYEHTBGJ53O2SESLTFIJDZCNFBPAVCNFSM6AAAAABHXYISEWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMJSGM2DEMJXHE. You are receiving this because you authored the thread.Message ID: @.***>

bpasero commented 5 months ago

Depends on what OS is involved in this setup? Is it all Linux everywhere?

SheepOfNoise commented 5 months ago

Depends on what OS is involved in this setup? Is it all Linux everywhere?

Yes, both machines run Rocky Linux 8.7.

bpasero commented 5 months ago

I cannot really explain that, maybe additional logs would give more hints. If you run code --verbose more logs are created that give info about file watching internals.

Local In this case, no remote extension is involved. You should find a "Window" output channel in the output panel that you can search for entries that contain File Watcher and attach here.

Remote In this case, you go via remote extension and you should find a "Server" output channel.

SheepOfNoise commented 5 months ago

Local - Window Output:

2024-05-16 15:51:35.852 [info] Started local extension host with pid 1760347. 2024-05-16 15:51:35.995 [warning] [remote-ssh]: Couldn't find message for key setting.usseExecServer.description. 2024-05-16 15:51:36.093 [warning] [twxs.cmake]: Cannot register 'cmake.cmakePath'. This property is already registered. 2024-05-16 15:51:38.650 [info] [perf] Render performance baseline is 38ms 2024-05-16 15:52:25.842 [info] Started local extension host with pid 1761567. 2024-05-16 15:52:26.248 [warning] [remote-ssh]: Couldn't find message for key setting.usseExecServer.description. 2024-05-16 15:52:26.385 [warning] [twxs.cmake]: Cannot register 'cmake.cmakePath'. This property is already registered. 2024-05-16 15:52:27.351 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-16 15:52:27.351 [error] [File Watcher (universal)] restarting watcher after error: Invalid argument 2024-05-16 15:52:27.786 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-16 15:52:27.787 [error] [File Watcher (universal)] restarting watcher after error: Invalid argument 2024-05-16 15:52:28.152 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-16 15:52:28.153 [error] [File Watcher (universal)] restarting watcher after error: Invalid argument 2024-05-16 15:52:28.438 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-16 15:52:28.439 [error] [File Watcher (universal)] restarting watcher after error: Invalid argument 2024-05-16 15:52:28.716 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-16 15:52:28.716 [error] [File Watcher (universal)] restarting watcher after error: Invalid argument 2024-05-16 15:52:28.977 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-16 15:52:28.978 [error] [File Watcher (universal)] gave up attempting to restart watcher after error: Invalid argument 2024-05-16 15:52:29.735 [info] [perf] Render performance baseline is 42ms 2024-05-16 15:52:30.331 [error] Cannot read properties of undefined (reading 'accessToken'): TypeError: Cannot read properties of undefined (reading 'accessToken') at p.z (vscode-file://vscode-app/usr/share/code/resources/app/out/vs/workbench/workbench.desktop.main.js:1686:21851) at p.C (vscode-file://vscode-app/usr/share/code/resources/app/out/vs/workbench/workbench.desktop.main.js:1686:22484) at d.value (vscode-file://vscode-app/usr/share/code/resources/app/out/vs/workbench/workbench.desktop.main.js:1686:21653) 2024-05-16 15:52:32.259 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/ns-3-simulations/support/venv/lib64/python3.9) 2024-05-16 15:52:32.261 [error] [File Watcher (universal)] gave up attempting to restart watcher after error: Invalid argument 2024-05-16 15:52:32.263 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/ns-3-simulations/support/venv/lib/python3.9/site-packages) 2024-05-16 15:52:32.263 [error] [File Watcher (universal)] gave up attempting to restart watcher after error: Invalid argument

Remote: Window Output:

2024-05-16 15:54:09.923 [info] Invoking resolveAuthority(ssh-remote)... 2024-05-16 15:54:09.923 [info] [LocalProcess0][resolveAuthority(ssh-remote,1)][0ms] obtaining proxy... 2024-05-16 15:54:09.943 [info] Started local extension host with pid 1764802. 2024-05-16 15:54:10.316 [info] [LocalProcess0][resolveAuthority(ssh-remote,1)][393ms] invoking... 2024-05-16 15:54:11.006 [info] [LocalProcess0][resolveAuthority(ssh-remote,1)][1084ms] returned Managed(1) 2024-05-16 15:54:11.006 [info] resolveAuthority(ssh-remote) returned 'Managed(1)' after 1084 ms 2024-05-16 15:54:11.076 [info] Creating a socket (renderer-Management-fc039c99-5233-4fd6-a383-d8f03776a838)... 2024-05-16 15:54:11.077 [info] Creating a socket (renderer-ExtensionHost-d5beaf5d-e89c-48f4-93c4-cfe4b383a0cf)... 2024-05-16 15:54:11.155 [info] Creating a socket (renderer-Management-fc039c99-5233-4fd6-a383-d8f03776a838) was successful after 79 ms. 2024-05-16 15:54:11.157 [info] Creating a socket (renderer-ExtensionHost-d5beaf5d-e89c-48f4-93c4-cfe4b383a0cf) was successful after 79 ms. 2024-05-16 15:54:11.461 [warning] [twxs.cmake]: Cannot register 'cmake.cmakePath'. This property is already registered. 2024-05-16 15:54:13.931 [warning] [remote-ssh]: Couldn't find message for key setting.usseExecServer.description. 2024-05-16 15:54:14.044 [error] Cannot read properties of undefined (reading 'accessToken'): TypeError: Cannot read properties of undefined (reading 'accessToken') at p.z (vscode-file://vscode-app/usr/share/code/resources/app/out/vs/workbench/workbench.desktop.main.js:1686:21851) at p.C (vscode-file://vscode-app/usr/share/code/resources/app/out/vs/workbench/workbench.desktop.main.js:1686:22484) at d.value (vscode-file://vscode-app/usr/share/code/resources/app/out/vs/workbench/workbench.desktop.main.js:1686:21653) 2024-05-16 15:54:14.086 [info] [perf] Render performance baseline is 42ms

Remoe: Server Output:

2024-05-16 15:54:11.168 [info] [][fc039c99][ManagementConnection] New connection established. 2024-05-16 15:54:11.171 [info] [][d5beaf5d][ExtensionHostConnection] New connection established. 2024-05-16 15:54:11.180 [info] [][d5beaf5d][ExtensionHostConnection] <1080924> Launched Extension Host Process.


From: Benjamin Pasero @.> Sent: Wednesday, May 15, 2024 3:52 PM To: microsoft/vscode @.> Cc: SheepOfNoise @.>; Author @.> Subject: Re: [microsoft/vscode] Support mounted remote file systems (Issue #212793)

I cannot really explain that, maybe additional logs would give more hints. If you run code --verbose more logs are created that give info about file watching internals.

Local In this case, no remote extension is involved. You should find a "Window" output channel in the output panel that you can search for entries that contain File Watcher and attach here.

Remote In this case, you go via remote extension and you should find a "Server" output channel.

— Reply to this email directly, view it on GitHubhttps://github.com/microsoft/vscode/issues/212793#issuecomment-2112439019, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AALYEHQRWJPQZ34NDAMGEZDZCNK7ZAVCNFSM6AAAAABHXYISEWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMJSGQZTSMBRHE. You are receiving this because you authored the thread.Message ID: @.***>

bpasero commented 5 months ago

Unfortunately this misses the verbose output from the server.

Curious how is /mnt/central/users/ylevy/workspace/ng-rdma mounted to your machine? Maybe I could try to reproduce this on my VM.

SheepOfNoise commented 5 months ago

I provide links (since I can't attach them to the mail) the local (window.txt) with error:

https://drive.google.com/file/d/1R2NipeaaHa_bUE4M1IsOyTDKRvMZyDzN/view?usp=drive_link

2024-05-16 16:14:40.265 [trace] MainThreadFileSystemEventService#$watch(): request to start watching uncorrelated (extension: ms-python.python, path: file:///mnt/central/users/ylevy/workspace/ng-rdma, recursive: false, session: 0.2711843595989176) 2024-05-16 16:14:40.319 [trace] MainThreadFileSystemEventService#$watch(): request to start watching uncorrelated (extension: ms-python.python, path: file:///mnt/central/users/ylevy/workspace/ng-rdma, recursive: true, session: 0.6639153164793736) 2024-05-16 16:14:40.320 [trace] MainThreadFileSystemEventService#$watch(): request to start watching uncorrelated (extension: ms-python.python, path: file:///mnt/central/users/ylevy/workspace/ng-rdma, recursive: true, session: 0.5216986430249373) 2024-05-16 16:14:40.390 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-16 16:14:40.390 [error] [File Watcher (universal)] restarting watcher after error: Invalid argument 2024-05-16 16:14:42.111 [error] [File Watcher (parcel)] Unexpected error: Invalid argument (EUNKNOWN) (path: /mnt/central/users/ylevy/workspace/ng-rdma) 2024-05-16 16:14:42.111 [error] [File Watcher (universal)] gave up attempting to restart watcher after error: Invalid argument

Note: the Window output pane probably doesn't contain the entire log as there were too many lines being output. Is there another way to open it?

And the remote (server.txt) where it works fine:

https://drive.google.com/file/d/1iQGoSMFfYu_FxfqP-RBjgVN0QnzzXg3i/view?usp=drive_link

2024-05-16 16:36:13.541 [trace] [File Watcher (parcel)] Request to start watching: /mnt/central/users/ylevy/workspace/ng-rdma (excludes: /.git/objects/,/.git/subtree-cache/,*/node_modules//,/.hg/store/,/mnt/central/users/ylevy/.vscode-server/extensions/, includes: , filter: , correlationId: ) 2024-05-16 16:36:13.563 [trace] Scanned system extensions: 31 2024-05-16 16:36:13.582 [trace] Scanned system extensions: 31 2024-05-16 16:36:13.589 [trace] [File Watcher (node.js)] Started watching: '/mnt/central/users/ylevy/workspace/ng-rdma/.vscode' 2024-05-16 16:36:13.597 [trace] [File Watcher (node.js)] Started watching: '/mnt/central/users/ylevy/workspace/ng-rdma/.vscode/settings.json' 2024-05-16 16:36:13.597 [trace] [File Watcher (node.js)] Started watching: '/mnt/central/users/ylevy/workspace/ng-rdma/.vscode/tasks.json' 2024-05-16 16:36:13.597 [trace] [File Watcher (node.js)] Started watching: '/mnt/central/users/ylevy/workspace/ng-rdma/.vscode/launch.json' 2024-05-16 16:36:13.669 [trace] [File Watcher (node.js)] Started watching: '/mnt/central/users/ylevy/.vscode-server/data/Machine/settings.json'


From: Benjamin Pasero @.> Sent: Thursday, May 16, 2024 4:04 PM To: microsoft/vscode @.> Cc: SheepOfNoise @.>; Author @.> Subject: Re: [microsoft/vscode] Support mounted remote file systems (Issue #212793)

Unfortunately this misses the verbose output from the server.

Curious how is /mnt/central/users/ylevy/workspace/ng-rdma mounted to your machine? Maybe I could try to reproduce this on my VM.

— Reply to this email directly, view it on GitHubhttps://github.com/microsoft/vscode/issues/212793#issuecomment-2115195414, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AALYEHTDGVNTCFY6IZPJ5JLZCSVFVAVCNFSM6AAAAABHXYISEWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMJVGE4TKNBRGQ. You are receiving this because you authored the thread.Message ID: @.***>

bpasero commented 5 months ago

Yeah really strange, I cannot explain. The only difference in the local vs remote case is how the watcher is natively compiled (for Electron, for node.js), but I would be surprised if that really makes any difference.

Again, how is this setup, could I try to emulate on my machine?

SheepOfNoise commented 5 months ago

I wrote the setup in the initial description.: Version: 1.90.0-insider Commit: bbc4ba1https://github.com/microsoft/vscode/commit/bbc4ba1eff648ee542972589216f211b7a6a08f2 Date: 2024-05-14T05:47:50.971Z Electron: 29.3.1 ElectronBuildId: 9464424 Chromium: 122.0.6261.156 Node.js: 20.9.0 V8: 12.2.281.27-electron.0 OS: Linux x64 4.18.0-425.3.1.el8.x86_64

Sent from Outlook for Androidhttps://aka.ms/AAb9ysg


From: Benjamin Pasero @.> Sent: Thursday, May 16, 2024 8:51:10 PM To: microsoft/vscode @.> Cc: SheepOfNoise @.>; Author @.> Subject: Re: [microsoft/vscode] Support mounted remote file systems (Issue #212793)

Yeah really strange, I cannot explain. The only difference in the local vs remote case is how the watcher is natively compiled (for Electron, for node.js), but I would be surprised if that really makes any difference.

Again, how is this setup, could I try to emulate on my machine?

— Reply to this email directly, view it on GitHubhttps://github.com/microsoft/vscode/issues/212793#issuecomment-2115859658, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AALYEHTFZRDOPP7Y56ZYMXDZCTWY5AVCNFSM6AAAAABHXYISEWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMJVHA2TSNRVHA. You are receiving this because you authored the thread.Message ID: @.***>

bpasero commented 5 months ago

I am asking specifically about details about the mounted file system: what commands did you use to add the mount, what kind of remote file system is that?

SheepOfNoise commented 5 months ago

I'm not much of an IT guy, but this is what I get from the mount list:

cat /proc/mounts

192.168.20.9:/mnt/local /mnt/central nfs4 rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.20.52,local_lock=none,addr=192.168.20.9 0 0


From: Benjamin Pasero @.> Sent: Thursday, May 16, 2024 9:43 PM To: microsoft/vscode @.> Cc: SheepOfNoise @.>; Author @.> Subject: Re: [microsoft/vscode] Support mounted remote file systems (Issue #212793)

I am asking specifically about details about the mounted file system: what commands did you use to add the mount, what kind of remote file system is that?

— Reply to this email directly, view it on GitHubhttps://github.com/microsoft/vscode/issues/212793#issuecomment-2115957107, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AALYEHT2KO5GYEXX6TVKRPTZCT45VAVCNFSM6AAAAABHXYISEWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMJVHE2TOMJQG4. You are receiving this because you authored the thread.Message ID: @.***>