use of io.cdap.cdap.api.app.ApplicationUpdateContext in project cdap by caskdata.
the class ETLStage method upgradePlugin.
/**
* Upgrade plugin used in the stage.
* 1. If plugin is using fixed version and a new plugin artifact is found with higher version in SYSTEM scope,
* use the new plugin.
* 2. If plugin is using a plugin range and a new plugin artifact is found with higher version in SYSTEM scope,
* move the upper bound of the range to include the new plugin artifact. Also change plugin scope.
* If new plugin is in range, do not change range. (Note: It would not change range even though new plugin is in
* different scope).
*
* @param updateContext To use helper functions like getPluginArtifacts.
* @return Updated plugin object to be used for the udated stage. Returned null if no changes to current plugin.
*/
private ETLPlugin upgradePlugin(ApplicationUpdateContext updateContext) throws Exception {
// Find the plugin with max version from available candidates.
Optional<ArtifactId> newPluginCandidate = updateContext.getPluginArtifacts(plugin.getType(), plugin.getName(), null).stream().max(Comparator.comparing(artifactId -> artifactId.getVersion()));
if (!newPluginCandidate.isPresent()) {
// TODO: Consider throwing exception here.
return plugin;
}
ArtifactId newPlugin = newPluginCandidate.get();
String newVersion = getUpgradedVersionString(newPlugin);
// If getUpgradedVersionString returns null, candidate plugin is not valid for upgrade.
if (newVersion == null) {
return plugin;
}
ArtifactSelectorConfig newArtifactSelectorConfig = new ArtifactSelectorConfig(newPlugin.getScope().name(), newPlugin.getName(), newVersion);
io.cdap.cdap.etl.proto.v2.ETLPlugin upgradedEtlPlugin = new io.cdap.cdap.etl.proto.v2.ETLPlugin(plugin.getName(), plugin.getType(), plugin.getProperties(), newArtifactSelectorConfig, plugin.getLabel());
return upgradedEtlPlugin;
}
Aggregations