google-cloud-eclipse icon indicating copy to clipboard operation
google-cloud-eclipse copied to clipboard

DataflowDependencyManager#getProjectMajorVersion() is expensive

Open briandealwis opened this issue 8 years ago • 0 comments

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.

  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).

briandealwis avatar Dec 05 '17 21:12 briandealwis