GoogleCloudPlatform / GoogleCloudPlatform/google-cloud-eclipse

DataflowDependencyManager#getProjectMajorVersion() is expensive

Open
#2,630 0 comments 0 reactions 0 assignees View on GitHub
cleanup enhancement p4 priority: p4
Dominant language
Java
Stars
90
Forks
52
PR merge metrics
No merged PRs in 30d

Description

`DataflowDependencyManager#getProjectMajorVersion(IProject)` is used to detect the Dataflow API major version (1.x, 2.x, or 3.x) required by a project. The implementation retrieves the version(s) of the `com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all` dependency from the project's Maven pom.xml, which returns a version range.

```java
public MajorVersion getProjectMajorVersion(IProject project) {
VersionRange projectVersionRange = getActualDataflowVersionRange(project);
if (projectVersionRange == null) {
return null;
}
if (projectVersionRange.getRecommendedVersion() != null) {
return MajorVersion.fromVersion(projectVersionRange.getRecommendedVersion());
} else {
ArtifactVersion dataflowVersion = getLatestDataflowDependencyInRange(projectVersionRange);
return MajorVersion.fromVersion(dataflowVersion);
}
}
```

If there is no recommended version range, then `getLatestDataflowDependencyInRange()` is called which does a network fetch, which can be fairly expensive.

We should be able to avoid this network fetch for our usual cases, where the Dataflow dependency is either a fixed version like `2.1.0` (as per the Dataflow 2.x project generator) or a known version range like `[1.0.0,1.99)` (as per the Dataflow 1.x project generator).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.