[
https://issues.apache.org/jira/browse/MRESOLVER-374?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17736697#comment-17736697
]
Victor Rubezhny commented on MRESOLVER-374:
-------------------------------------------
> Do I need anything special to run lemminx UTs?
I believe you already should have everything installed: Java-17, Maven > 3.9.1.
Git, GH utils.
To clone project, build and run the JUnit tests do the following:
```
$ git clone [https://github.com/eclipse/lemminx]
$ cd lemminx
$ ./mvnw clean install -DskipTests
$ cd ../
$ git clone [https://github.com/eclipse/lemminx-maven/]
$ cd lemminx-maven/
$ gh pr checkout 422 # To switch to PR-422 updating maven-resolver to v.1.9.13
$ mvn clean verify -Dtest=WorkspaceProjectsHyperlinkDetectorTest # Run the only
this JUnit test reproducing the issue
```
> Do you set anything related to locks? 1.9.13 has a (locking related) bug
> fixed, so it should be "more correct".
I don't think so, we have to build maven projects included to test workspace,
so during the initialization Workspace Reader gets the sorted list of URIs of
all maven projects included to workspace, sorts them briefly (parents - first,
then - children) using their GAV coordinates, then builds them trying to get
built `MavenProect`-s and store their infos to `MavenProjectCache`, so this
info can easily be used later without having a need to build again during the
work of JUnit test cases.
> Am I right if I see this:
> resolver -> workspaceReader -> projectCache -> modelBuilder -> resolver?
Yes, exactly
> With v.1.9.13 70% of acquire lock attempts end up with
> java.lang.IllegalStateException: Could not acquire lock(s)
> -----------------------------------------------------------------------------------------------------------------
>
> Key: MRESOLVER-374
> URL: https://issues.apache.org/jira/browse/MRESOLVER-374
> Project: Maven Resolver
> Issue Type: Bug
> Components: Resolver
> Affects Versions: 1.9.13
> Reporter: Victor Rubezhny
> Priority: Major
>
> While trying to update the maven resolver dependency of Lemminx-Maven project
> to v. 1.9.13 we faced the following problem -
> [https://github.com/eclipse/lemminx-maven/pull/422]
> With version v.1.9.13 more than 70% of attempts to build a Maven Project end
> up with getting `.IllegalStateException: Could not acquire lock(s)` exception:
>
> ```
> Jun 23, 2023 2:23:02 PM
> org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache
> SEVERE: Could not acquire lock(s)
> java.lang.IllegalStateException: Could not acquire lock(s)
> at
> org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter$AdaptedLockSyncContext.acquire(NamedLockFactoryAdapter.java:219)
> at
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:271)
> at
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:259)
> at
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:242)
> at
> org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:231)
> at
> org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:172)
> at
> org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.resolveCachedArtifactDescriptor(DfDependencyCollector.java:382)
> at
> org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.getArtifactDescriptorResult(DfDependencyCollector.java:368)
> at
> org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency(DfDependencyCollector.java:218)
> at
> org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency(DfDependencyCollector.java:156)
> at
> org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.process(DfDependencyCollector.java:138)
> at
> org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.doCollectDependencies(DfDependencyCollector.java:108)
> at
> org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies(DependencyCollectorDelegate.java:222)
> at
> org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:87)
> at
> org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:305)
> at
> org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:151)
> at
> org.apache.maven.project.DefaultProjectBuilder.resolveDependencies(DefaultProjectBuilder.java:224)
> at
> org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:202)
> at
> org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:139)
> at
> org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:159)
> at
> org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:240)
> at
> org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:130)
> at
> org.eclipse.lemminx.extensions.maven.MavenProjectCache.getLastSuccessfulMavenProject(MavenProjectCache.java:105)
> at
> org.eclipse.lemminx.extensions.maven.MavenLemminxWorkspaceReader$ResolveArtifactsAndPopulateWorkspaceRunnable.run(MavenLemminxWorkspaceReader.java:79)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> at java.base/java.lang.Thread.run(Thread.java:833)
> Suppressed: java.lang.IllegalStateException: Attempt 1: Could not acquire
> write lock for 'artifact:org.test.modules:ModuleA:0.0.1-SNAPSHOT' in 30
> SECONDS
> at
> org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter$AdaptedLockSyncContext.acquire(NamedLockFactoryAdapter.java:202)
> ... 26 more
> Suppressed: java.lang.IllegalStateException: Attempt 2: Could not acquire
> write lock for 'artifact:org.test.modules:ModuleA:0.0.1-SNAPSHOT' in 30
> SECONDS
> at
> org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter$AdaptedLockSyncContext.acquire(NamedLockFactoryAdapter.java:202)
> ... 26 more
> ```
>
> Every such failing attempt to acquire a lock takes ~60 seconds to finish
> (fail) - while normally a test Maven Project (from Lemminx-Maven JUnit tests)
> takes 5-50 ms to resolve.
>
> So building and running JUnit tests with maven-resolver v.1.9.13 took 3h 16m
> while it normally takes about 7m 30s to finish.
> Not a single `ProjectBuildingException` is returned during the tests so no
> recovery is possible for the projects that cannot be built for various
> reasons, as well as we don't have any statistics on how many "good and
> buildable' vs. `bad and not buildable` projects build attempts were ended up
> with that `lock failure`
>
> Every `IllegalStateException` happened in
> `org.eclipse.lemminx.extensions.maven.MavenLemminxWorkspaceReader` which
> loads (tried to build and cache information on workspace projects) at
> Lemminx-Maven (Lemminx Language Server) extension startup. The workspace
> projects are built one by one (not in parallel) trying to build parent
> projects first and child projects after all they parents are built. (but not
> controlling the built results - as it's quite possible that projects being
> edited may have errors).
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)