maven-mvnd icon indicating copy to clipboard operation
maven-mvnd copied to clipboard

File lock problems when running under WSL

Open mxsm opened this issue 2 years ago • 11 comments

Java version

openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-8u342-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)
root@GZYZFA00088591:~/rocketmq#

mvnd version

mvnd 0.8.2 linux-amd64 native client (2bba2d6a4d3a5012ddf9f1f42a22784cad4011e3)
Terminal: org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jansi.linux.LinuxNativePty
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /root/maven-mvnd-0.8.2-linux-amd64/mvn
Java version: 1.8.0_342, vendor: Private Build, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "5.10.16.3-microsoft-standard-wsl2", arch: "amd64", family: "unix"

image

mxsm avatar Dec 20 '22 08:12 mxsm

I am not sure mvnd is known to work on WSL at all. @gnodet do you happen to know?

Is there any stacktrace of you add -e to the mvnd command?

ppalaga avatar Dec 20 '22 09:12 ppalaga

Hi @ppalaga image

mxsm avatar Dec 20 '22 09:12 mxsm

Are there maybe some logs in ~/.m2/mvnd/registry/0.8.2/?

ppalaga avatar Dec 20 '22 09:12 ppalaga

@ppalaga I encountered the following problem when using mvnd to compile the RocketMQ project on the Windows platform.

mvnd 0.8.2 windows-amd64 native client (2bba2d6a4d3a5012ddf9f1f42a22784cad4011e3)
Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: D:\devtools\maven-mvnd-0.8.2-windows-amd64\mvn
Java version: 1.8.0_202, vendor: Oracle Corporation, runtime: D:\Java\jdk1.8.0_202\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

image

if use mvn -Prelease-all -DskipTests clean install -U not problem

mxsm avatar Dec 20 '22 09:12 mxsm

@ppalaga

17:49:18.818 D Initializing daemon with properties:
     mvnd.home=/root/maven-mvnd-0.8.2-linux-amd64
     jdk.java.options=--add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAME
D --add-opens java.base/sun.nio.fs=ALL-UNNAMED
     mvnd.noDaemon=false
     mvnd.debug=false
     mvnd.idleTimeout=3h
     mvnd.keepAlive=100ms
     mvnd.extClasspath=
     mvnd.coreExtensions=
     mvnd.enableAssertions=false
     mvnd.expirationCheckDelay=10s
     mvnd.duplicateDaemonGracePeriod=10s
     mvnd.socketFamily=inet

17:49:18.821 I Daemon started
17:49:18.822 D daemon is running. Sleeping until state changes.
17:49:18.841 I Client connected
17:49:18.854 I Waiting for request
17:49:18.857 I Request received: BuildRequest{args=[-e, -Prelease-all, -DskipTests, -Dquickly, clean, install, -U, -Dstyle.color=always, -T, 11, -b, smart, -Dmvnd.terminalWidth=209], workingDir='/root/rocketmq
', projectDir='/root/rocketmq', env='{PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/d/Java/jdk-17.0.5/bin:/mnt/d/VMware/VMware Workstation/bin/:/mnt/c/Progr
am Files/Common Files/Oracle/Java/javapath:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerS
hell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/d/Git/cmd:/mnt/d/devtools/apache-maven-3.8.6/bin:/mnt/d/devtools/gradle-5.2.1/bin:/mnt/d/cmder:/mnt/d
/Java/jdk-17.0.5/jre/bin:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/d/devtools/maven-mvnd-0.8.2-wi
ndows-amd64/bin:/mnt/d/nodejs/:/mnt/d/Go/bin:/mnt/c/Program Files/dotnet/:/mnt/d/TortoiseGit/bin:/mnt/d/bazel:/mnt/c/Users/liujianbo/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/liujianbo/AppData/Local/Git
HubDesktop/bin:/mnt/c/Users/liujianbo/AppData/Roaming/npm:/mnt/c/Users/liujianbo/go/bin:/mnt/c/Users/liujianbo/AppData/Local/JetBrains/Toolbox/scripts:/snap/bin:/usr/local/go/bin:/root/maven-mvnd-0.8.2-linux-a
md64/bin, WT_SESSION=763e228b-a583-4ea2-9fcd-cb4622a4f75a, LESSCLOSE=/usr/bin/lesspipe %s %s, LESSOPEN=| /usr/bin/lesspipe %s, SHELL=/bin/bash, XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop,
 WSL_INTEROP=/run/WSL/8_interop, WSL_DISTRO_NAME=Ubuntu-20.04, HOSTTYPE=x86_64, JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre, OLDPWD=/root, TERM=xterm-256color, MOTD_SHOWN=update-motd, USER=root, LANG=C.UTF
-8, NAME=GZYZFA00088591, WT_PROFILE_ID={07b52e3e-de2c-5db4-bd2d-ba144ed6c273}, WSLENV=WT_SESSION::WT_PROFILE_ID, LOGNAME=root, LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=4
0;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31
:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;3
1:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.es
d=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.sv
gz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=
01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.
flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:, PWD=/root/rocketmq, SHLVL=1, HOME=/roo
t, _=/root/maven-mvnd-0.8.2-linux-amd64/bin/mvnd}'}
17:49:18.862 I Executing request
17:49:18.920 I Dispatch message: BuildLogMessage{payload='[INFO] Error stacktraces are turned on.'}
17:49:18.922 I Dispatch message: BuildLogMessage{payload='[INFO] Processing build on daemon ca6d1908'}
17:49:18.935 I Dispatch message: BuildLogMessage{payload='[INFO] Scanning for projects...'}
17:49:18.962 E Error while building project
java.lang.Error: java.io.IOException: No such file or directory
        at sun.nio.ch.FileKey.create(FileKey.java:46)
        at sun.nio.ch.SharedFileLockTable.<init>(FileLockTable.java:120)
        at sun.nio.ch.FileLockTable.newSharedFileLockTable(FileLockTable.java:47)
        at sun.nio.ch.FileChannelImpl.fileLockTable(FileChannelImpl.java:1039)
        at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1106)
        at org.eclipse.aether.named.support.FileLockNamedLock.obtainFileLock(FileLockNamedLock.java:273)
        at org.eclipse.aether.named.support.FileLockNamedLock.doLockExclusively(FileLockNamedLock.java:206)
        at org.eclipse.aether.named.support.Retry.retry(Retry.java:69)
        at org.eclipse.aether.named.support.FileLockNamedLock.lockExclusively(FileLockNamedLock.java:100)
        at org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter$AdaptedLockSyncContext.acquire(NamedLockFactoryAdapter.java:154)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:233)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:212)
        at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:272)
        at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:192)
        at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:242)
        at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:1150)
        at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:916)
        at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:361)
        at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:267)
        at org.apache.maven.project.CachingProjectBuilder.build(CachingProjectBuilder.java:404)
        at org.apache.maven.project.CachingProjectBuilder.build(CachingProjectBuilder.java:373)
        at org.apache.maven.project.CachingProjectBuilder.build(CachingProjectBuilder.java:343)
        at org.apache.maven.graph.DefaultGraphBuilder.collectProjects(DefaultGraphBuilder.java:414)
        at org.apache.maven.graph.DefaultGraphBuilder.getProjectsForMavenReactor(DefaultGraphBuilder.java:405)
        at org.apache.maven.graph.DefaultGraphBuilder.build(DefaultGraphBuilder.java:82)
        at org.apache.maven.DefaultMaven.buildGraph(DefaultMaven.java:532)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:219)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
        at org.apache.maven.cli.DaemonMavenCli.execute(DaemonMavenCli.java:687)
        at org.apache.maven.cli.DaemonMavenCli.doMain(DaemonMavenCli.java:239)
        at org.apache.maven.cli.DaemonMavenCli.main(DaemonMavenCli.java:215)
        at org.mvndaemon.mvnd.daemon.Server.handle(Server.java:572)
        at org.mvndaemon.mvnd.daemon.Server.client(Server.java:256)
        at org.mvndaemon.mvnd.daemon.Server.accept(Server.java:224)
        at java.lang.Thread.run(Thread.java:750)
Caused by: java.io.IOException: No such file or directory
        at sun.nio.ch.FileKey.init(Native Method)
        at sun.nio.ch.FileKey.create(FileKey.java:44)
        ... 35 common frames omitted
17:49:18.962 I Dispatch message: BuildException{message='java.io.IOException: No such file or directory', className='java.lang.Error', stackTrace='java.lang.Error: java.io.IOException: No such file or director
y
        at sun.nio.ch.FileKey.create(FileKey.java:46)
        at sun.nio.ch.SharedFileLockTable.<init>(FileLockTable.java:120)
        at sun.nio.ch.FileLockTable.newSharedFileLockTable(FileLockTable.java:47)
        at sun.nio.ch.FileChannelImpl.fileLockTable(FileChannelImpl.java:1039)
        at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1106)
        at org.eclipse.aether.named.support.FileLockNamedLock.obtainFileLock(FileLockNamedLock.java:273)
        at org.eclipse.aether.named.support.FileLockNamedLock.doLockExclusively(FileLockNamedLock.java:206)
        at org.eclipse.aether.named.support.Retry.retry(Retry.java:69)
        at org.eclipse.aether.named.support.FileLockNamedLock.lockExclusively(FileLockNamedLock.java:100)
        at org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter$AdaptedLockSyncContext.acquire(NamedLockFactoryAdapter.java:154)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:233)
        at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:212)
        at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:272)
        at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:192)
        at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:242)
        at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:1150)
        at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:916)
        at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:361)
        at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:267)
        at org.apache.maven.project.CachingProjectBuilder.build(CachingProjectBuilder.java:404)
        at org.apache.maven.project.CachingProjectBuilder.build(CachingProjectBuilder.java:373)
        at org.apache.maven.project.CachingProjectBuilder.build(CachingProjectBuilder.java:343)
        at org.apache.maven.graph.DefaultGraphBuilder.collectProjects(DefaultGraphBuilder.java:414)
        at org.apache.maven.graph.DefaultGraphBuilder.getProjectsForMavenReactor(DefaultGraphBuilder.java:405)
        at org.apache.maven.graph.DefaultGraphBuilder.build(DefaultGraphBuilder.java:82)
        at org.apache.maven.DefaultMaven.buildGraph(DefaultMaven.java:532)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:219)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
        at org.apache.maven.cli.DaemonMavenCli.execute(DaemonMavenCli.java:687)
        at org.apache.maven.cli.DaemonMavenCli.doMain(DaemonMavenCli.java:239)
        at org.apache.maven.cli.DaemonMavenCli.main(DaemonMavenCli.java:215)
        at org.mvndaemon.mvnd.daemon.Server.handle(Server.java:572)
        at org.mvndaemon.mvnd.daemon.Server.client(Server.java:256)
        at org.mvndaemon.mvnd.daemon.Server.accept(Server.java:224)
        at java.lang.Thread.run(Thread.java:750)
Caused by: java.io.IOException: No such file or directory
        at sun.nio.ch.FileKey.init(Native Method)
        at sun.nio.ch.FileKey.create(FileKey.java:44)
        ... 35 more
'}
17:49:18.963 I No more message to dispatch
17:49:18.963 I Daemon back to idle
17:49:18.963 I Updating state to: Idle
17:49:18.963 D daemon is running. Sleeping until state changes.
17:49:28.821 D Expiration check running
17:49:38.821 D Expiration check running
17:49:48.821 D Expiration check running
17:49:58.821 D Expiration check running
17:50:08.821 D Expiration check running
17:50:18.821 D Expiration check running
17:50:28.821 D Expiration check running
17:50:38.821 D Expiration check running
17:50:48.821 D Expiration check running
17:50:58.821 D Expiration check running
17:51:08.821 D Expiration check running
17:51:18.821 D Expiration check running
17:51:28.821 D Expiration check running
17:51:38.821 D Expiration check running

mxsm avatar Dec 20 '22 09:12 mxsm

This is a maven resolver bug. It seems similar to https://github.com/takari/takari-local-repository/issues/6 @cstamas ?

gnodet avatar Mar 13 '23 19:03 gnodet

FYI https://github.com/microsoft/WSL/issues/5762

cstamas avatar Mar 14 '23 13:03 cstamas

In short, WSL2 "sells" itself as Linux, but LockFileEx is not supported. This will not work until fixed by WSL2. User could experiment by some other locking solutions like Redis backed one https://maven.apache.org/resolver/maven-resolver-named-locks-redisson/index.html

Or, just as experiment, do this:

  • make sure are daemons are shut down
  • invoke ONE build (to make sure ONE daemon runs) with this -Daether.syncContext.named.factory=rwlock-local

This would make mvnd use "jvm local" locking (not multi process capable), but would at least show is there any other issue on WSL2.

cstamas avatar Mar 14 '23 14:03 cstamas

This is a maven resolver bug. It seems similar to takari/takari-local-repository#6 @cstamas ?

Takari "shared repository" is unrelated to resolver named locks, and did suffer for bug never fixed, is not related in any way.

cstamas avatar Mar 14 '23 14:03 cstamas

Resurrecting the previous IPC SyncContext could be an idea, see https://issues.apache.org/jira/browse/MRESOLVER-342 As a short term improvement, we could also detect and log a WARNING, as mvnd uses the file lock by default.

gnodet avatar Mar 14 '23 15:03 gnodet

To whom it may concern: According to my findings, the file-lock named lock factory in Resolver is broken. See: https://issues.apache.org/jira/browse/MNG-7705

michael-o avatar Mar 14 '23 16:03 michael-o