Hi Dan,

>From the configuration page "local named locks are only suited within one
JVM with a multithreaded access."
https://maven.apache.org/resolver/maven-resolver-named-locks/index.html
But the default lock factory is a local named lock (rwlock-local), so if
more than one JVM is running and accessing local Maven repo then we can
expect problems.

"The default setting is forkCount=1/reuseForks=true, which means that
maven-surefire-plugin creates one new JVM process to execute all tests in
one Maven module."
https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html

I run builds with at least 3 threads, so at any time there could be 4 JVMs
running.
So it seems as long as its using surefire-maven-plugin it will need to use
"file-lock".
This works fine on one machine (linux) but fails immediately with
failed-to-acquire error on another machine (Windows).

Do you agree with my assessment? Can you use file-lock factory successfully?

I see also that the time between starting the build and the error is 40s,
which happens to be exactly a third of the time it says it waited, so
something definitely not right here:

15:32:26  C:\ws\targ-2.2.16>cmd /C "set
JAVA_HOME=C:\opt\zulu11.54.25-ca-fx-jdk11.0.14.1-win_x64&& .\mvnw.cmd
--threads 3 ...."
15:33:02  [ERROR] Internal error: java.lang.IllegalStateException: Could
not acquire lock(s) -> [Help 1]
15:33:02  org.apache.maven.InternalErrorException: Internal error:
java.lang.IllegalStateException: Could not acquire lock(s)
15:33:02      at org.apache.maven.DefaultMaven.execute
(DefaultMaven.java:109)
15:33:02      at org.apache.maven.cli.MavenCli.execute (MavenCli.java:910)
15:33:02      at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
15:33:02      at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
15:33:02      at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0
(Native Method)
15:33:02      at jdk.internal.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:62)
15:33:02      at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:43)
15:33:02      at java.lang.reflect.Method.invoke (Method.java:566)
15:33:02      at
org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced
(Launcher.java:283)
15:33:02      at org.codehaus.plexus.classworlds.launcher.Launcher.launch
(Launcher.java:226)
15:33:02      at
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode
(Launcher.java:407)
15:33:02      at org.codehaus.plexus.classworlds.launcher.Launcher.main
(Launcher.java:348)
15:33:02  Caused by: java.lang.IllegalStateException: Could not acquire
lock(s)
15:33:02      at
org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter$AdaptedLockSyncContext.acquire
(NamedLockFactoryAdapter.java:219)
15:33:02      at
org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolve
(DefaultMetadataResolver.java:193)
15:33:02      at
org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolveMetadata
(DefaultMetadataResolver.java:179)
15:33:02      at
org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion
(DefaultVersionResolver.java:196)
15:33:02      at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve
(DefaultArtifactResolver.java:331)
15:33:02      at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts
(DefaultArtifactResolver.java:260)
15:33:02      at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact
(DefaultArtifactResolver.java:242)
15:33:02      at
org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact
(DefaultRepositorySystem.java:277)
15:33:02      at org.apache.maven.project.ProjectModelResolver.resolveModel
(ProjectModelResolver.java:172)
15:33:02      at org.apache.maven.project.ProjectModelResolver.resolveModel
(ProjectModelResolver.java:218)
15:33:02      at
org.apache.maven.model.building.DefaultModelBuilder.readParentExternally
(DefaultModelBuilder.java:1009)
15:33:02      at
org.apache.maven.model.building.DefaultModelBuilder.readParent
(DefaultModelBuilder.java:801)
15:33:02      at org.apache.maven.model.building.DefaultModelBuilder.build
(DefaultModelBuilder.java:327)
15:33:02      at org.apache.maven.model.building.DefaultModelBuilder.build
(DefaultModelBuilder.java:243)
15:33:02      at org.apache.maven.project.DefaultProjectBuilder.build
(DefaultProjectBuilder.java:447)
15:33:02      at org.apache.maven.project.DefaultProjectBuilder.build
(DefaultProjectBuilder.java:410)
15:33:02      at org.apache.maven.project.DefaultProjectBuilder.build
(DefaultProjectBuilder.java:367)
15:33:02      at org.apache.maven.graph.DefaultGraphBuilder.collectProjects
(DefaultGraphBuilder.java:349)
15:33:02      at
org.apache.maven.graph.DefaultGraphBuilder.getProjectsForMavenReactor
(DefaultGraphBuilder.java:340)
15:33:02      at org.apache.maven.graph.DefaultGraphBuilder.build
(DefaultGraphBuilder.java:76)
15:33:02      at org.apache.maven.DefaultMaven.buildGraph
(DefaultMaven.java:448)
15:33:02      at org.apache.maven.DefaultMaven.doExecute
(DefaultMaven.java:197)
15:33:02      at org.apache.maven.DefaultMaven.doExecute
(DefaultMaven.java:173)
15:33:02      at org.apache.maven.DefaultMaven.execute
(DefaultMaven.java:101)
15:33:02      at org.apache.maven.cli.MavenCli.execute (MavenCli.java:910)
15:33:02      at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
15:33:02      at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
15:33:02      at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0
(Native Method)
15:33:02      at jdk.internal.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:62)
15:33:02      at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:43)
15:33:02      at java.lang.reflect.Method.invoke (Method.java:566)
15:33:02      at
org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced
(Launcher.java:283)
15:33:02      at org.codehaus.plexus.classworlds.launcher.Launcher.launch
(Launcher.java:226)
15:33:02      at
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode
(Launcher.java:407)
15:33:02      at org.codehaus.plexus.classworlds.launcher.Launcher.main
(Launcher.java:348)
15:33:02      Suppressed: java.lang.IllegalStateException: Attempt 1: Could
not acquire write lock for
'C:\ws\targ-2.2.16\.m2\repository\.locks\com.segway~segway-build~1-SNAPSHOT.lock'
in 120 SECONDS

Delany


On Sat, 27 May 2023 at 08:28, Dan Tran <dant...@gmail.com> wrote:

> Hi
>
> My multi-threaded build encounters the below failure at the very end of the
> build
>
> *05:26:33*      Suppressed: java.lang.IllegalStateException: Attempt
> 1: Could not acquire read lock for
> 'artifact:ch.qos.logback:logback-classic:1.2.12' in 150
> SECONDS*05:26:33*          at
>
> org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter$AdaptedLockSyncContext.acquire
> (NamedLockFactoryAdapter.java:202)*05:26:33*          at
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve
> (DefaultArtifactResolver.java:275)*05:26:33*          at
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts
> (DefaultArtifactResolver.java:260)*05:26:33*          at
>
> org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies
> (DefaultRepositorySystem.java:352)*05:26:33*          at
> org.apache.maven.project.DefaultProjectDependenciesResolver.resolve
> (DefaultProjectDependenciesResolver.java:182)*05:26:33*          at
>
> org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies
> (LifecycleDependencyResolver.java:224)*05:26:33*          at
>
> org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies
> (LifecycleDependencyResolver.java:136)
>
>
> Some observation
>
>
> 1. Seems to happen only on slow build host/agent
>
> 2. The failure is 2/3 into the build where logback-classic is the most
> common dependency of all modules should be at local already
>
> 3. Increase lock time not helping
>
> 4. why readlock? instead of writelock
>
>
> Thought?
>
>
> Thanks
>
>
> -D
>

Reply via email to