This is an automated email from the ASF dual-hosted git repository.
markap14 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/master by this push:
new b78aeb6 NIFI-6382 Fix verifyUpdate for parameter contexts to account
for deletions
b78aeb6 is described below
commit b78aeb67a1aa29ff86515467e5e2ffdb463af0c3
Author: Bryan Bende <[email protected]>
AuthorDate: Tue Aug 20 14:12:18 2019 -0400
NIFI-6382 Fix verifyUpdate for parameter contexts to account for deletions
This closes #3661.
Signed-off-by: Mark Payne <[email protected]>
---
.../web/dao/impl/StandardParameterContextDAO.java | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterContextDAO.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterContextDAO.java
index 4b02b9d..9ad06a3 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterContextDAO.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterContextDAO.java
@@ -150,21 +150,27 @@ public class StandardParameterContextDAO implements
ParameterContextDAO {
final ParameterReferenceManager referenceManager =
currentContext.getParameterReferenceManager();
for (final ProcessorNode processor :
referenceManager.getProcessorsReferencing(currentContext, parameterName)) {
- verifyParameterUpdate(parameterName, processor,
parameterDto.getSensitive(), currentContext.getName(), verifyComponentStates,
processor.isRunning(), "Processor that is running");
+ verifyParameterUpdate(parameterDto, processor,
currentContext.getName(), verifyComponentStates, processor.isRunning(),
"Processor that is running");
}
for (final ControllerServiceNode serviceNode :
referenceManager.getControllerServicesReferencing(currentContext,
parameterName)) {
- verifyParameterUpdate(parameterName, serviceNode,
parameterDto.getSensitive(), currentContext.getName(), verifyComponentStates,
+ verifyParameterUpdate(parameterDto, serviceNode,
currentContext.getName(), verifyComponentStates,
serviceNode.getState() != ControllerServiceState.DISABLED,
"Controller Service that is enabled");
}
}
}
- private void verifyParameterUpdate(final String parameterName, final
ComponentNode component, final Boolean parameterSensitive, final String
contextName,
+ private void verifyParameterUpdate(final ParameterDTO parameterDto, final
ComponentNode component, final String contextName,
final boolean
verifyComponentStates, final boolean active, final String activeExplanation) {
+
+ final String parameterName = parameterDto.getName();
+ final Boolean parameterSensitive = parameterDto.getSensitive();
+ final boolean parameterDeletion = parameterDto.getDescription() ==
null && parameterDto.getSensitive() == null && parameterDto.getValue() == null;
+
// For any parameter that is added or modified, we need to ensure that
the new configuration will not result in a Sensitive Parameter being referenced
by a non-Sensitive Property
// or a Non-Sensitive Parameter being referenced by a Sensitive
Property.
- // Additionally, if 'verifyComponentStates', we must ensure that any
component that references a value that is to be updated is stopped (if a
processor) or disabled (if a controller service)
+ // Additionally, if 'verifyComponentStates' or parameter is being
deleted, we must ensure that any component that references a value that is to
be updated
+ // is stopped (if a processor) or disabled (if a controller service).
for (final Map.Entry<PropertyDescriptor, PropertyConfiguration> entry
: component.getProperties().entrySet()) {
final PropertyConfiguration configuration = entry.getValue();
if (configuration == null) {
@@ -174,17 +180,17 @@ public class StandardParameterContextDAO implements
ParameterContextDAO {
for (final ParameterReference reference :
configuration.getParameterReferences()) {
final String referencedParameterName =
reference.getParameterName();
if (referencedParameterName.equals(parameterName)) {
- if (entry.getKey().isSensitive() &&
!Boolean.TRUE.equals(parameterSensitive)) {
+ if (entry.getKey().isSensitive() && !parameterDeletion &&
!Boolean.TRUE.equals(parameterSensitive)) {
throw new IllegalStateException("Cannot update
Parameter Context " + contextName + " because the update would add a
Non-Sensitive Parameter " +
"named '" + parameterName + "' but this Parameter
already is referenced by a Sensitive Property.");
}
- if (!entry.getKey().isSensitive() &&
Boolean.TRUE.equals(parameterSensitive)) {
+ if (!entry.getKey().isSensitive() && !parameterDeletion &&
Boolean.TRUE.equals(parameterSensitive)) {
throw new IllegalStateException("Cannot update
Parameter Context " + contextName + " because the update would add a Sensitive
Parameter named " +
"'" + parameterName + "' but this Parameter
already is referenced by a Non-Sensitive Property.");
}
- if (verifyComponentStates && active) {
+ if (active && (verifyComponentStates ||
parameterDeletion)) {
throw new IllegalStateException("Cannot update
Parameter Context " + contextName + " because it has Parameters that are being
referenced by a " +
activeExplanation + ".");
}