redhat-developer / redhat-developer/vscode-java

Reloading a window apprently clears Java project settings due to different workspace storage chosen

Aperta
#3,671 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
TypeScript
Stelle
2.3k
Fork
546
Merge medio
20h 1m
PR unite (30g)
11

Descrizione

Environment
  • Operating System: macOS (local host) + Linux (SSH remote host)
  • JDK version: 17.0.9
  • Visual Studio Code version: 1.89.1
  • Java extension version: 1.31.0
Steps To Reproduce
  1. Open a large Java project on a remote machine with SSH remote development
  2. Configure the Java project, e.g. add some source paths
  3. Reload the window
Current Result

Configuration added in the step 2 is apparently lost.

Expected Result

Configuration added in the step 2 is kept.

Additional Informations

I found that the -data directory passed to jdt.ls differs before/after the reload.

  • Before: -data /usr/local/google/home/nya/.vscode-server/data/User/workspaceStorage/4f53a3d603ab9ba87f981c0821b0dc62/redhat.java/jdt_ws
  • After: -data /usr/local/google/home/nya/.vscode-server/data/User/workspaceStorage/4f53a3d603ab9ba87f981c0821b0dc62-1/redhat.java/jdt_ws

Notice the -1 suffix added to the workspace storage directory.

In fact, a VSCode extension may receive different context.storageUri for the identical workspace when multiple instances of VSCode opens the workspace concurrently (c.f. https://github.com/microsoft/vscode/issues/128234). This can happen even on a window reload because a storage directory lock is released only on the VSCode process exit (https://github.com/microsoft/vscode/blob/5f646b8e67a869ef33061085ffe0e377d5ba040c/src/vs/workbench/api/node/extHostStoragePaths.ts#L52).

I guess this problem happens only in remote development because VSCode skips obtaining locks for local extension hosts (https://github.com/microsoft/vscode/issues/128528).

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo il flusso di ricaricamento SSH remoto e confronta context.storageUri dell'estensione con il percorso -data di jdt.ls prima e dopo il ricaricamento. Esamina il comportamento di VS Code extHostStoragePaths.ts a cui si fa riferimento e la gestione dell'avvio di jdt.ls da parte dell'estensione. Il lavoro è completato quando le impostazioni del progetto Java rimangono disponibili dopo il ricaricamento invece di essere spostate in una directory di archiviazione dell'area di lavoro -1.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java, typescript, vscode
Ambito
developer-experience, tooling
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.