NIFI-8537: Check that a property's dependencies are satisfied before checking if the referenced controller service valid/enabled

Signed-off-by: Matthew Burgess <mattyb149@apache.org>

This closes #5071
This commit is contained in:
Mark Payne 2021-05-12 15:27:40 -04:00 committed by Matthew Burgess
parent a274c12bbb
commit 97ed0efbc2
No known key found for this signature in database
GPG Key ID: 05D3DEB8126DAD24
2 changed files with 8 additions and 3 deletions

View File

@ -680,10 +680,8 @@ public abstract class AbstractComponentNode implements ComponentNode {
protected final Collection<ValidationResult> validateReferencedControllerServices(final ValidationContext validationContext) {
final Set<PropertyDescriptor> propertyDescriptors = validationContext.getProperties().keySet();
if (propertyDescriptors == null) {
return Collections.emptyList();
}
final ConfigurableComponent component = getComponent();
final Collection<ValidationResult> validationResults = new ArrayList<>();
for (final PropertyDescriptor descriptor : propertyDescriptors) {
if (descriptor.getControllerServiceDefinition() == null) {
@ -691,6 +689,11 @@ public abstract class AbstractComponentNode implements ComponentNode {
continue;
}
final boolean dependencySatisfied = validationContext.isDependencySatisfied(descriptor, component::getPropertyDescriptor);
if (!dependencySatisfied) {
continue;
}
final String controllerServiceId = validationContext.getProperty(descriptor).getValue();
if (controllerServiceId == null) {
continue;

View File

@ -52,6 +52,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@ -186,6 +187,7 @@ public class TestAbstractComponentNode {
final PropertyValue propertyValue = Mockito.mock(PropertyValue.class);
Mockito.when(propertyValue.getValue()).thenReturn(serviceIdentifier);
Mockito.when(context.getProperty(Mockito.eq(property))).thenReturn(propertyValue);
Mockito.when(context.isDependencySatisfied(Mockito.any(PropertyDescriptor.class), Mockito.any(Function.class))).thenReturn(true);
return context;
}