Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Metals not starting when power directives like dockerFrom is in the code #6772

Open
yadavan88 opened this issue Sep 13, 2024 · 24 comments
Open

Comments

@yadavan88
Copy link

yadavan88 commented Sep 13, 2024

Describe the bug

EmailClient.scala

object EmailClient {
	def send() = println("email sent!")
}

Main.scala

//> using scala 3.3.3
//> using file EmailClient.scala
//> using packaging.dockerFrom openjdk:17

@main def main() = {
	EmailClient.send()
}

Open this directory in vscode and try to start the metals. It doesn't start. You will get the error in the metals.log

2024.09.13 09:43:36 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/test/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m

Auto completion will not work but the code runs fine through command line.
If you remove the docker directive, metals will start and everything works fine.
Also, if there is only single file, then also no issues with this directive. The problem comes only with the combination of file directive and dockerFrom directive.

Expected behavior

It should be able to work normally

Operating system

macOS

Editor/Extension

VS Code

Version of Metals

1.3.5

Extra context or search terms

This is Mac M3, if that is relevant.

@tgodzik
Copy link
Contributor

tgodzik commented Sep 13, 2024

Thanks for reporting! I can't seem to reproduce the issue. Are you maybe able to get stack traces of the metals process?
I suspect that the build server is not starting, but I am not sure how that would happen. Could also post the whole metals.log from .metals directory?

@yadavan88
Copy link
Author

Hi @tgodzik
Thanks for the quick response.
I am able to reproduce this exactly even in my MacBook Air. I am attaching the full logs, screenshots and the entire project as zip file for reference. Hope it can be reproduced.

metals.log

metals-test.zip

image

@tgodzik
Copy link
Contributor

tgodzik commented Sep 16, 2024

I don't see anything wrong in the logs. Would it be possible for you do get stack traces via jstack? You could also create a file: .metals/bsp.trace.json, which should get populated with the communication between Scala CLI and Metals.

I am looking into other possibilities. Also, are you using power option? You could add {"powerOptions":{"power":true}} to ide-launcher-options.json to make sure that is the case?

@yadavan88
Copy link
Author

yadavan88 commented Sep 16, 2024

Here is the bsp trace content:

[Trace - 10:52:27 am] Sending request 'build/initialize - (1)'
Params: {
  "displayName": "Metals",
  "version": "1.3.5",
  "bspVersion": "2.2.0-M2",
  "rootUri": "file:///Users/yadukrishnankrishnan/Downloads/metals-test/",
  "capabilities": {
    "languageIds": [
      "scala",
      "java"
    ],
    "jvmCompileClasspathReceiver": true
  },
  "data": {
    "javaSemanticdbVersion": "0.10.0",
    "semanticdbVersion": "4.9.9",
    "supportedScalaVersions": [
      "2.13.14",
      "2.12.19",
      "2.12.18",
      "2.12.17",
      "2.12.16",
      "2.13.11",
      "2.13.12",
      "2.13.13",
      "2.11.12"
    ],
    "enableBestEffortMode": false
  }
} 

I also tried with the power options.
Also have this error in metals.log, but not sure which action caused this

2024.09.16 10:53:56 INFO  Running BSP server List(/Users/yadukrishnan/Library/Application Support/Coursier/bin/.scala-cli.aux, bsp, --json-options, /Users/yadukrishnan/temp/metals-test/.scala-build/ide-options-v2.json, --json-launcher-options, /Users/yadukrishnan/temp/metals-test/.scala-build/ide-launcher-options.json, --envs-file, /Users/yadukrishnan/temp/metals-test/.scala-build/ide-envs.json, /Users/yadukrishnan/temp/metals-test)�[0m
2024.09.16 10:53:56 ERROR Running process '/Users/yadukrishnan/Library/Application Support/Coursier/bin/.scala-cli.aux bsp --json-options /Users/yadukrishnan/temp/metals-test/.scala-build/ide-options-v2.json --json-launcher-options /Users/yadukrishnan/temp/metals-test/.scala-build/ide-launcher-options.json --envs-file /Users/yadukrishnan/temp/metals-test/.scala-build/ide-envs.json /Users/yadukrishnan/temp/metals-test' failed
java.io.IOException: Cannot run program "/Users/yadukrishnan/Library/Application Support/Coursier/bin/.scala-cli.aux" (in directory "/Users/yadukrishnankrishnan/Downloads/metals-test"): error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
	at scala.meta.internal.process.SystemProcess$.run(SystemProcess.scala:48)
	at scala.meta.internal.bsp.BspServers.newConnection$1(BspServers.scala:117)
	at scala.meta.internal.bsp.BspServers.$anonfun$newServer$8(BspServers.scala:160)
	at scala.meta.internal.metals.BuildServerConnection$.setupServer$1(BuildServerConnection.scala:593)
	at scala.meta.internal.metals.BuildServerConnection$.fromSockets(BuildServerConnection.scala:661)
	at scala.meta.internal.bsp.BspServers.newServer(BspServers.scala:155)
	at scala.meta.internal.bsp.BspConnector.connect$1(BspConnector.scala:167)
	at scala.meta.internal.bsp.BspConnector.connect(BspConnector.scala:214)
	at scala.meta.internal.metals.ProjectMetalsLspService.$anonfun$autoConnectToBuildServer$4(ProjectMetalsLspService.scala:915)
	at scala.meta.internal.metals.TimerProvider.withTimer(TimerProvider.scala:38)
	at scala.meta.internal.metals.TimerProvider.timed(TimerProvider.scala:14)
	at scala.meta.internal.metals.ProjectMetalsLspService.$anonfun$autoConnectToBuildServer$3(ProjectMetalsLspService.scala:915)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:470)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.lang.Thread.run(Thread.java:833)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.ProcessImpl.forkAndExec(Native Method)
	at java.lang.ProcessImpl.<init>(ProcessImpl.java:314)
	at java.lang.ProcessImpl.start(ProcessImpl.java:244)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
	at scala.meta.internal.process.SystemProcess$.run(SystemProcess.scala:48)
	at scala.meta.internal.bsp.BspServers.newConnection$1(BspServers.scala:117)
	at scala.meta.internal.bsp.BspServers.$anonfun$newServer$8(BspServers.scala:160)
	at scala.meta.internal.metals.BuildServerConnection$.setupServer$1(BuildServerConnection.scala:593)
	at scala.meta.internal.metals.BuildServerConnection$.fromSockets(BuildServerConnection.scala:661)
	at scala.meta.internal.bsp.BspServers.newServer(BspServers.scala:155)
	at scala.meta.internal.bsp.BspConnector.connect$1(BspConnector.scala:167)
	at scala.meta.internal.bsp.BspConnector.connect(BspConnector.scala:214)
	at scala.meta.internal.metals.ProjectMetalsLspService.$anonfun$autoConnectToBuildServer$4(ProjectMetalsLspService.scala:915)
	at scala.meta.internal.metals.TimerProvider.withTimer(TimerProvider.scala:38)
	at scala.meta.internal.metals.TimerProvider.timed(TimerProvider.scala:14)
	at scala.meta.internal.metals.ProjectMetalsLspService.$anonfun$autoConnectToBuildServer$3(ProjectMetalsLspService.scala:915)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:470)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.lang.Thread.run(Thread.java:833)
�[0m
2024.09.16 10:53:56 INFO  tracing is enabled: /Users/yadukrishnankrishnan/Downloads/metals-test/.metals/bsp.trace.json�[0m
2024.09.16 10:54:02 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m

But after these changes, the program is not running

[E] Caught bloop.data.Project$ProjectReadException: Failed to load project from /Users/yadukrishnankrishnan/Downloads/metals-test/.scala-build/.bloop/metals-test_d0706328d4-9f8be73145.json
Bloop 'bsp' command exited with code 1. Something may be wrong with the current configuration.
Running the clean sub-command to clear the working directory and remove caches might help.
If the error persists, please report the issue as a bug and attach a log with increased verbosity by passing -v -v -v.
Error: java.lang.RuntimeException: Bloop BSP connection in /Users/yadukrishnankrishnan/Library/Caches/ScalaCli/bsp-sockets/proc-7362 was unexpectedly closed or bloop didn't start.
For more details, please see '/Users/yadukrishnankrishnan/Downloads/metals-test/.scala-build/stacktraces/1726477063-1729102292817811323.log'

So I cleaned it up using scala-cli clean . and then it runs through command line as before

@yadavan88
Copy link
Author

Just an update:
I killed the java processes and suddenly it is working fine in the project. No idea why
image
[bsp.trace.json](https://github.com/user-attachments/files/
ide-launcher-options.json
17010648/bsp.trace.json)
metals.log

But attaching the logs in case something makes sense:

@tgodzik
Copy link
Contributor

tgodzik commented Sep 16, 2024

This is quite curious:
"/Users/yadukrishnan/Library/Application Support/Coursier/bin/.scala-cli.aux"

Looks like Metals was unable to start Scala CLI. Maybe it had the executable cached somehow and it got removed/reinstalled in the meantime? Did you change anything recently? Though why would it be influenced by the docker directive 🤔

Does bsp.trace only contain the first message as you pasted above?

@tgodzik tgodzik added the needs more information Use if we need more information for a specific ticket label Sep 16, 2024
@tgodzik
Copy link
Contributor

tgodzik commented Sep 16, 2024

Anyway, do let me know if that happens again. We could not reproduce on any of our machines.

@yadavan88
Copy link
Author

I havent made any changes recently.
I am still able to reproduce the issue from the attached zip file. I just used the same zip and cleared all metadata and tried again. Getting the exact same problem. In both of my laptops I am getting this issue.

Here is the bsp trace file
bsp.trace.json

@tgodzik
Copy link
Contributor

tgodzik commented Sep 16, 2024

Would be great to compare both using a diff of some kind to see what exactly is different.

@yadavan88
Copy link
Author

which two files?

@tgodzik
Copy link
Contributor

tgodzik commented Sep 16, 2024

I would say the whole dirs if possible, not exactly sure which file might have caused it. Though I would rather bet on the json files inside scala-build/.bloop

@yadavan88
Copy link
Author

there were 3 json files in one dir and 4 in another.
when compariging, there is no diff other than the dir path
image

@yadavan88
Copy link
Author

I have multiple scala-cli projects at work. When I added the docker directive, all those projects stopped working correctly in metals. I am not sure what is going wrong!

@tgodzik
Copy link
Contributor

tgodzik commented Sep 17, 2024

Maybe the problem is not exact directives but the order of adding them? 🤔

@tgodzik
Copy link
Contributor

tgodzik commented Sep 17, 2024

Btw. Are you using Metals 1.3.3 ? Could you try with a newer version like 1.3.5 or latest snapshot? And maybe post again metals.log if it stills doesn't work

@yadavan88
Copy link
Author

No, mine is metals 1.3.5.
image

I again cleared the metals log. Cliecked on import, compile and connect to build server.
Here si the current metals.log

2024.09.17 16:23:55 INFO  time: Imported build in 0.13s�[0m
2024.09.17 16:23:55 INFO  Correctly reloaded workspace�[0m
2024.09.17 16:23:55 INFO  running doctor check�[0m
2024.09.17 16:23:55 INFO  java targets: �[0m
2024.09.17 16:23:58 INFO  time: indexed workspace in 3.17s�[0m
2024.09.17 16:24:33 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:24:34 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
Sep 17, 2024 4:24:34 PM org.eclipse.lsp4j.jsonrpc.RemoteEndpoint handleCancellation
WARNING: Unmatched cancel notification for request id 12
2024.09.17 16:24:35 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:24:36 INFO  time: code lens generation in 2.15s�[0m
2024.09.17 16:24:51 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:24:51 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:24:52 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:24:52 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:24:53 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:24:59 INFO  Disconnecting from scala-cli session...�[0m
2024.09.17 16:24:59 INFO  Shut down connection with build server.�[0m
2024.09.17 16:24:59 INFO  Attempting to connect to the build server...�[0m
2024.09.17 16:24:59 INFO  Running BSP server List(/Users/yadukrishnankrishnan/Library/Application Support/Coursier/bin/.scala-cli.aux, --power, bsp, --json-options, /Users/yadukrishnankrishnan/Downloads/metals-test 2/.scala-build/ide-options-v2.json, --json-launcher-options, /Users/yadukrishnankrishnan/Downloads/metals-test 2/.scala-build/ide-launcher-options.json, --envs-file, /Users/yadukrishnankrishnan/Downloads/metals-test 2/.scala-build/ide-envs.json, /Users/yadukrishnankrishnan/Downloads/metals-test 2)�[0m
2024.09.17 16:24:59 INFO  tracing is enabled: /Users/yadukrishnankrishnan/Downloads/metals-test 2/.metals/bsp.trace.json�[0m
2024.09.17 16:25:00 INFO  time: Connected to build server in 1.39s�[0m
2024.09.17 16:25:00 INFO  Connected to Build server: scala-cli v1.5.0�[0m
2024.09.17 16:25:00 INFO  running doctor check�[0m
2024.09.17 16:25:00 INFO  java targets: �[0m
2024.09.17 16:25:03 INFO  time: indexed workspace in 3.32s�[0m
2024.09.17 16:25:04 WARN  no build target for: /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala�[0m
2024.09.17 16:25:04 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:25:04 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:25:06 INFO  Disconnecting from scala-cli session...�[0m
2024.09.17 16:25:06 INFO  Shut down connection with build server.�[0m
2024.09.17 16:25:06 INFO  Attempting to connect to the build server...�[0m
2024.09.17 16:25:06 INFO  Running BSP server List(/Users/yadukrishnankrishnan/Library/Application Support/Coursier/bin/.scala-cli.aux, --power, bsp, --json-options, /Users/yadukrishnankrishnan/Downloads/metals-test 2/.scala-build/ide-options-v2.json, --json-launcher-options, /Users/yadukrishnankrishnan/Downloads/metals-test 2/.scala-build/ide-launcher-options.json, --envs-file, /Users/yadukrishnankrishnan/Downloads/metals-test 2/.scala-build/ide-envs.json, /Users/yadukrishnankrishnan/Downloads/metals-test 2)�[0m
2024.09.17 16:25:07 INFO  tracing is enabled: /Users/yadukrishnankrishnan/Downloads/metals-test 2/.metals/bsp.trace.json�[0m
2024.09.17 16:25:08 INFO  time: Connected to build server in 1.34s�[0m
2024.09.17 16:25:08 INFO  Connected to Build server: scala-cli v1.5.0�[0m
2024.09.17 16:25:08 INFO  running doctor check�[0m
2024.09.17 16:25:08 INFO  java targets: �[0m
2024.09.17 16:25:11 INFO  time: indexed workspace in 3.31s�[0m
2024.09.17 16:25:11 WARN  no build target for: /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala�[0m
2024.09.17 16:25:11 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:25:11 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m
2024.09.17 16:25:52 INFO  no build target found for /Users/yadukrishnankrishnan/Downloads/metals-test 2/Main.scala. Using presentation compiler with project's scala-library version: 3.3.3�[0m

@yadavan88
Copy link
Author

WHen i click on restart build server, i get this
image

@tgodzik
Copy link
Contributor

tgodzik commented Sep 17, 2024

No, mine is metals 1.3.5.

Ach sorry, the first metals.log mentioned 1.3.3.

That looks like we are connecting, but the bsp server is processing something internally. Is the bsp.tace.json the same as previously? We might need to find the bsp server process and jstack it. I still can't seem to reproduce.

@yadavan88
Copy link
Author

Right now, it stopped working even without those directves.
I found the bsp process and ran jstack. Here is it.
jstack.log

//> using scala 3.3.3
// //> using file EmailClient.scala

@main def main() = {
	//EmailClient.send()
}

Even this code doesn't work now

@yadavan88
Copy link
Author

I cleaned up everything, killed all java processes. Still it is not working. I see this log in the metals doctor. What does this mean?

Metals Doctor
Metals Java: 17 from Eclipse Adoptium located at /Users/yadukrishnankrishnan/Library/Caches/Coursier/arc/https/github.com/adoptium/temurin17-binaries/releases/download/jdk-17%252B35/OpenJDK17-jdk_x64_mac_hotspot_17_35.tar.gz/jdk-17+35/Contents/Home

Metals Server version: 1.3.5

Below are listed the build targets for this workspace. One build target corresponds to one classpath. For example, normally one sbt project maps to two build targets: main and test.

Project's Java: 11.0.19 located at /Users/yadukrishnankrishnan/Library/Caches/Coursier/arc/https/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.19%252B7/OpenJDK11U-jdk_x64_mac_hotspot_11.0.19_7.tar.gz/jdk-11.0.19+7/Contents/Home

Build definition is coming from scala-cli.

Build server currently being used is scala-cli v1.5.0. ([Reset](command:metals.reset-choice?%5B%22Build+server+selection%22%5D))

⚠️ No build targets were detected in this workspace so most functionality won't work.

Make sure the workspace directory '/Users/yadukrishnankrishnan/Downloads/metals-test 2' matches the root of your build.
Try removing the directories .metals/ and .bloop/, then restart metals And import the build again.

@tgodzik
Copy link
Contributor

tgodzik commented Sep 17, 2024

Looks like Scala CLi is not returning any build targets, so it seems to be hanging somewhere. Is there any additional process started aside from Bloop and Metals? The jstack you sent is Bloop server itself and everything seems to be ok there.

@yadavan88
Copy link
Author

I had killed all java processes and started the metals again in the same dir. Now I can see 2 java processes running.

  1. related to daemon:/Users/yadukrishnankrishnan/Library/Caches/ScalaCli/bloop/daemon
  2. related to scala.meta.metals.Main

@yadavan88
Copy link
Author

test-met.zip

Here is the sample zip file. The docker directive is commented out. I am doing the steps as follows exactly:

  • Run scala-cli setup-ide . in this directory
  • open it in vscode (code .)
  • In the metals sidebar, import and compile module. After indexing, it shows the run dialog correctly as expected. Attaching the screenshot.
image
  • Then, uncomment the docker directive
  • Clean up all the metadata hidden directories
  • Run scala-cli setup-ide .
  • Open in vs code code .
  • Import the project and clean and compile.
  • But, metals doesn't start. Here is the screenshot of that as well.
image

@yadavan88
Copy link
Author

@tgodzik
Now, I added {"powerOptions":{"power":true}} again into the ide launcher options. Did clean compile and it worked!
However, it still show the "Starts Metals", but also it shows then "run" dialog.
I am sure that this was not working yesterday. Not sure how or why!

image

@tgodzik tgodzik added investigation needed and removed needs more information Use if we need more information for a specific ticket labels Sep 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Triage
Development

No branches or pull requests

2 participants