NIFI-11238: Creating missing parameter providers when importing inherited provided contexts

Signed-off-by: Pierre Villard <pierre.villard.fr@gmail.com>

This closes #7002.
This commit is contained in:
Joe Gresock 2023-03-02 09:33:32 -05:00 committed by Pierre Villard
parent f7d3b75bcd
commit bf75070071
No known key found for this signature in database
GPG Key ID: F92A93B30C07C6D5

View File

@ -1536,7 +1536,7 @@ public class StandardVersionedComponentSynchronizer implements VersionedComponen
// Make sure that we have a unique name and add the Parameter Context if none exists
if (parameterContext == null) {
final String contextId = synchronizationOptions.getComponentIdGenerator().generateUuid(proposed.getIdentifier(), proposed.getInstanceIdentifier(), "Controller");
final ParameterContext added = createParameterContext(proposed, contextId, Collections.emptyMap());
final ParameterContext added = createParameterContext(proposed, contextId, Collections.emptyMap(), Collections.emptyMap(), synchronizationOptions.getComponentIdGenerator());
LOG.info("Successfully synchronized {} by adding it to the flow", added);
return;
}
@ -1947,16 +1947,16 @@ public class StandardVersionedComponentSynchronizer implements VersionedComponen
final ParameterContext selectedParameterContext;
if (contextByName == null) {
final String parameterContextId = componentIdGenerator.generateUuid(versionedParameterContext.getName(), versionedParameterContext.getName(), versionedParameterContext.getName());
selectedParameterContext = createParameterContext(versionedParameterContext, parameterContextId, versionedParameterContexts);
selectedParameterContext = createParameterContext(versionedParameterContext, parameterContextId, versionedParameterContexts, parameterProviderReferences, componentIdGenerator);
} else {
selectedParameterContext = contextByName;
addMissingConfiguration(versionedParameterContext, selectedParameterContext, versionedParameterContexts);
addMissingConfiguration(versionedParameterContext, selectedParameterContext, versionedParameterContexts, parameterProviderReferences, componentIdGenerator);
}
group.setParameterContext(selectedParameterContext);
} else {
// Update the current Parameter Context so that it has any Parameters included in the proposed context
addMissingConfiguration(versionedParameterContext, currentParamContext, versionedParameterContexts);
addMissingConfiguration(versionedParameterContext, currentParamContext, versionedParameterContexts, parameterProviderReferences, componentIdGenerator);
}
}
}
@ -2081,14 +2081,15 @@ public class StandardVersionedComponentSynchronizer implements VersionedComponen
}
private ParameterContext createParameterContext(final VersionedParameterContext versionedParameterContext, final String parameterContextId,
final Map<String, VersionedParameterContext> versionedParameterContexts) {
final Map<String, VersionedParameterContext> versionedParameterContexts,
final Map<String, ParameterProviderReference> parameterProviderReferences, final ComponentIdGenerator componentIdGenerator) {
final Map<String, Parameter> parameters = createParameterMap(versionedParameterContext.getParameters());
final List<String> parameterContextRefs = new ArrayList<>();
if (versionedParameterContext.getInheritedParameterContexts() != null) {
versionedParameterContext.getInheritedParameterContexts().stream()
.map(name -> createParameterReferenceId(name, versionedParameterContexts))
.map(name -> createParameterReferenceId(name, versionedParameterContexts, parameterProviderReferences, componentIdGenerator))
.forEach(parameterContextRefs::add);
}
@ -2118,29 +2119,35 @@ public class StandardVersionedComponentSynchronizer implements VersionedComponen
return parameters;
}
private String createParameterReferenceId(final String parameterContextName, final Map<String, VersionedParameterContext> versionedParameterContexts) {
private String createParameterReferenceId(final String parameterContextName, final Map<String, VersionedParameterContext> versionedParameterContexts,
final Map<String, ParameterProviderReference> parameterProviderReferences, final ComponentIdGenerator componentIdGenerator) {
final VersionedParameterContext versionedParameterContext = versionedParameterContexts.get(parameterContextName);
final ParameterContext selectedParameterContext = selectParameterContext(versionedParameterContext, versionedParameterContexts);
final ParameterContext selectedParameterContext = selectParameterContext(versionedParameterContext, versionedParameterContexts, parameterProviderReferences, componentIdGenerator);
return selectedParameterContext.getIdentifier();
}
private ParameterContext selectParameterContext(final VersionedParameterContext versionedParameterContext, final Map<String, VersionedParameterContext> versionedParameterContexts) {
private ParameterContext selectParameterContext(final VersionedParameterContext versionedParameterContext,
final Map<String, VersionedParameterContext> versionedParameterContexts,
final Map<String, ParameterProviderReference> parameterProviderReferences,
final ComponentIdGenerator componentIdGenerator) {
final ParameterContext contextByName = getParameterContextByName(versionedParameterContext.getName());
final ParameterContext selectedParameterContext;
if (contextByName == null) {
final String parameterContextId = context.getFlowMappingOptions().getComponentIdLookup().getComponentId(Optional.ofNullable(versionedParameterContext.getIdentifier()),
versionedParameterContext.getInstanceIdentifier());
selectedParameterContext = createParameterContext(versionedParameterContext, parameterContextId, versionedParameterContexts);
selectedParameterContext = createParameterContext(versionedParameterContext, parameterContextId, versionedParameterContexts, parameterProviderReferences, componentIdGenerator);
} else {
selectedParameterContext = contextByName;
addMissingConfiguration(versionedParameterContext, selectedParameterContext, versionedParameterContexts);
addMissingConfiguration(versionedParameterContext, selectedParameterContext, versionedParameterContexts, parameterProviderReferences, componentIdGenerator);
}
return selectedParameterContext;
}
private void addMissingConfiguration(final VersionedParameterContext versionedParameterContext, final ParameterContext currentParameterContext,
final Map<String, VersionedParameterContext> versionedParameterContexts) {
final Map<String, VersionedParameterContext> versionedParameterContexts,
final Map<String, ParameterProviderReference> parameterProviderReferences,
final ComponentIdGenerator componentIdGenerator) {
final Map<String, Parameter> parameters = new HashMap<>();
for (final VersionedParameter versionedParameter : versionedParameterContext.getParameters()) {
final Optional<Parameter> parameterOption = currentParameterContext.getParameter(versionedParameter.getName());
@ -2166,10 +2173,11 @@ public class StandardVersionedComponentSynchronizer implements VersionedComponen
if (versionedParameterContext.getInheritedParameterContexts() != null && !versionedParameterContext.getInheritedParameterContexts().isEmpty()
&& currentParameterContext.getInheritedParameterContexts().isEmpty()) {
currentParameterContext.setInheritedParameterContexts(versionedParameterContext.getInheritedParameterContexts().stream()
.map(name -> selectParameterContext(versionedParameterContexts.get(name), versionedParameterContexts))
.map(name -> selectParameterContext(versionedParameterContexts.get(name), versionedParameterContexts, parameterProviderReferences, componentIdGenerator))
.collect(Collectors.toList()));
}
if (versionedParameterContext.getParameterProvider() != null && currentParameterContext.getParameterProvider() == null) {
createMissingParameterProvider(versionedParameterContext, versionedParameterContext.getParameterProvider(), parameterProviderReferences, componentIdGenerator);
currentParameterContext.configureParameterProvider(getParameterProviderConfiguration(versionedParameterContext));
}
}