GoogleCloudPlatform / GoogleCloudPlatform/cloud-opensource-java
Investigate the slowness in building a class path for spring-cloud-gcp-starter-pubsub
- Dominant language
- Java
- Stars
- 163
- Forks
- 80
- PR merge metrics
- No merged PRs in 30d
Description
To reproduce, here is argument for StaticLinkageChecker:
```
-m
https://repo.spring.io/milestone
-a
org.springframework.cloud:spring-cloud-gcp-starter-pubsub:1.1.0.RC2
```
This takes forever (more than 5 minutes, before I give up)
# Investigation
## BFS loop
When checked with debugger, breadth-first iteration in `DependencyGraphBuilder.levelOrder` has more than 20,000 items in the queue. Something seems wrong.

## Does this happen with Maven central?
Maven central has 1.1.0.RELEASE. It can cause the problem.
Arguments:
```
-a org.springframework.cloud:spring-cloud-gcp-starter-pubsub:1.1.0.RELEASE
```
### Duplicate in BFS loop?
There were duplicate Maven artifacts in the BFS loop. After avoiding the duplicate, the number of visited Maven artifacts is now 3781. Created a class path of 1466 elements.
## Run for a night
I started Tuesday night 5:00pm and it still running at Wednesday 9:00 am. (more than 16 hours)
## JProfiler
`DefaultRepositorySystem.collectDependencies` occupies the most time. This is to fetch dependencies.

The method is called every dependency node in the tree. In the case of spring-cloud-gcp-starter-pubsub,
## Are there duplicate HTTP fetch for same artifact many times?
To check.
It does make many HTTP request while iterating 2 million items (2 million after waiting for 1 hour)

Contributor guide
Assessment
This issue has not been assessed yet.