[MNG-8148] DefaultProjectDependenciesResolver takes up to several minutes for some modules of the project
- Dominant language
- Java
- Stars
- 5.3k
- Forks
- 3.1k
- Avg merge
- 21h 11m
- Merged PRs (30d)
- 312
Description
**[Sergey Nuyanzin](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=sergey%20nuyanzin)** opened **[MNG-8148](https://issues.apache.org/jira/browse/MNG-8148?redirect=false)** and commented
The project is relatively small (5 modules and maybe about 1k classes in total)
unfortunately it is private so I couldn't share the source
1 thing that may be makes sense to mention is that some modules generates code for protobuf integration.
also I was able to take thread dump of maven build
and this is the thing which I faced. most of the times when the build was hanging
```
"main" #1 prio=5 os_prio=31 cpu=394695.18ms elapsed=448.93s tid=0x000000015d80a800 nid=0x2403 runnable [0x000000016dec4000]
java.lang.Thread.State: RUNNABLE
at org.eclipse.aether.util.graph.transformer.ConflictMarker.analyze(ConflictMarker.java:133)
at org.eclipse.aether.util.graph.transformer.ConflictMarker.analyze(ConflictMarker.java:133)
at org.eclipse.aether.util.graph.transformer.ConflictMarker.analyze(ConflictMarker.java:133)
at org.eclipse.aether.util.graph.transformer.ConflictMarker.analyze(ConflictMarker.java:133)
at org.eclipse.aether.util.graph.transformer.ConflictMarker.analyze(ConflictMarker.java:133)
at org.eclipse.aether.util.graph.transformer.ConflictMarker.transformGraph(ConflictMarker.java:63)
at org.eclipse.aether.util.graph.transformer.ConflictIdSorter.transformGraph(ConflictIdSorter.java:58)
at org.eclipse.aether.util.graph.transformer.ConflictResolver.transformGraph(ConflictResolver.java:172)
at org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer.transformGraph(ChainedDependencyGraphTransformer.java:71)
at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies(DependencyCollectorDelegate.java:246)
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:87)
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:306)
at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:151)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:224)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:136)
at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:355)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:313)
```
and
```
"main" #1 prio=5 os_prio=31 cpu=456718.35ms elapsed=518.34s tid=0x0000000127811000 nid=0x2403 runnable [0x000000016b3ac000]
java.lang.Thread.State: RUNNABLE
at java.util.HashMap.hash(java.base@11.0.23/HashMap.java:340)
at java.util.LinkedHashMap.get(java.base@11.0.23/LinkedHashMap.java:440)
at org.eclipse.aether.util.graph.transformer.ConflictIdSorter.buildConflitIdDAG(ConflictIdSorter.java:110)
at org.eclipse.aether.util.graph.transformer.ConflictIdSorter.buildConflitIdDAG(ConflictIdSorter.java:122)
at org.eclipse.aether.util.graph.transformer.ConflictIdSorter.buildConflitIdDAG(ConflictIdSorter.java:122)
at org.eclipse.aether.util.graph.transformer.ConflictIdSorter.buildConflitIdDAG(ConflictIdSorter.java:122)
at org.eclipse.aether.util.graph.transformer.ConflictIdSorter.transformGraph(ConflictIdSorter.java:78)
at org.eclipse.aether.util.graph.transformer.ConflictResolver.transformGraph(ConflictResolver.java:172)
at org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer.transformGraph(ChainedDependencyGraphTransformer.java:71)
at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies(DependencyCollectorDelegate.java:246)
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:87)
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:306)
at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:151)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:224)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:136)
at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:355)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:313)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:906)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:206)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.23/Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.23/NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.23/DelegatingMethodAccessorImpl.java:43)
```
any hints what to do to find the root cause would be welcome
---
No further details from [MNG-8148](https://issues.apache.org/jira/browse/MNG-8148?redirect=false)
Contributor guide
Research direction
Start with the reported thread dumps and inspect ConflictMarker.analyze and ConflictIdSorter.buildConflitIdDAG, then trace their calls through DefaultProjectDependenciesResolver.resolve. Reproduce the dependency-resolution delay with a comparable multi-module project and dependency graph. Done means the root cause is established and resolution no longer takes several minutes for affected modules.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100