This is an automated email from the ASF dual-hosted git repository.
mosermw pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new f1457bad8e NIFI-14404 Cleared Sensitive Dynamic Property Names on
Migration
f1457bad8e is described below
commit f1457bad8eaa3615c55225a6c19e699ceb102a10
Author: exceptionfactory <[email protected]>
AuthorDate: Fri Apr 18 15:13:56 2025 -0500
NIFI-14404 Cleared Sensitive Dynamic Property Names on Migration
- Updated overwriteProperties method to clear existing Sensitive Dynamic
Property Names before setting updated values
- Clearing existing values avoids validation issues when loading Flow
Definitions that contain sensitive property descriptors which Components
identified as renamed or removed
Signed-off-by: Mike Moser <[email protected]>
Closes #9885
---
.../nifi/controller/AbstractComponentNode.java | 12 +++++++----
.../nifi/controller/TestAbstractComponentNode.java | 25 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 4 deletions(-)
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
b/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
index 27b18743ab..b6011e6b59 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
@@ -238,13 +238,14 @@ public abstract class AbstractComponentNode implements
ComponentNode {
* @param properties Map of Property Name to Value
*/
protected void overwriteProperties(final Map<String, String> properties) {
- // Update properties.
final Map<String, String> updatedProperties = new
HashMap<>(properties);
- final Set<String> sensitiveDynamicPropNames = new HashSet<>();
+
+ // Build set of Sensitive Dynamic Property Names based on updated
Properties
+ final Set<String> updatedSensitiveDynamicPropertyNames = new
HashSet<>();
for (final String propertyName : updatedProperties.keySet()) {
final PropertyDescriptor descriptor =
getPropertyDescriptor(propertyName);
if (descriptor != null && descriptor.isDynamic() &&
descriptor.isSensitive()) {
- sensitiveDynamicPropNames.add(propertyName);
+ updatedSensitiveDynamicPropertyNames.add(propertyName);
}
}
@@ -253,7 +254,10 @@ public abstract class AbstractComponentNode implements
ComponentNode {
updatedProperties.putIfAbsent(descriptor.getName(), null);
}
- setProperties(updatedProperties, true, sensitiveDynamicPropNames);
+ // Clear existing Sensitive Dynamic Property Names to avoid cases
where a sensitive property name has been changed or removed
+ sensitiveDynamicPropertyNames.getAndSet(Set.of());
+
+ setProperties(updatedProperties, true,
updatedSensitiveDynamicPropertyNames);
}
/**
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/test/java/org/apache/nifi/controller/TestAbstractComponentNode.java
b/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/test/java/org/apache/nifi/controller/TestAbstractComponentNode.java
index c83b352160..ed27ec5937 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/test/java/org/apache/nifi/controller/TestAbstractComponentNode.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/test/java/org/apache/nifi/controller/TestAbstractComponentNode.java
@@ -78,6 +78,10 @@ public class TestAbstractComponentNode {
private static final String PROPERTY_VALUE = "abstract-property-value";
+ private static final String SECOND_PROPERTY_NAME = "Second Property";
+
+ private static final String SECOND_PROPERTY_VALUE = "2";
+
@Timeout(5)
@Test
public void testGetValidationStatusWithTimeout() {
@@ -399,6 +403,27 @@ public class TestAbstractComponentNode {
assertFalse(removedPropertyDescriptor.isSensitive());
}
+ @Test
+ public void testOverwritePropertiesSensitiveDynamicPropertyNames() {
+ final AbstractComponentNode node = new LocalComponentNode();
+
+ final Map<String, String> properties = Map.of(PROPERTY_NAME,
PROPERTY_VALUE);
+ final Set<String> sensitiveDynamicPropertyNames =
Collections.singleton(PROPERTY_NAME);
+ node.setProperties(properties, false, sensitiveDynamicPropertyNames);
+
+ final PropertyDescriptor propertyDescriptor =
node.getPropertyDescriptor(PROPERTY_NAME);
+ assertTrue(propertyDescriptor.isDynamic());
+ assertTrue(propertyDescriptor.isSensitive());
+
+ // Overwrite Properties which clears existing Sensitive Dynamic
Property Names
+ final Map<String, String> secondProperties =
Map.of(SECOND_PROPERTY_NAME, SECOND_PROPERTY_VALUE);
+ node.overwriteProperties(secondProperties);
+
+ final PropertyDescriptor updatedPropertyDescriptor =
node.getPropertyDescriptor(PROPERTY_NAME);
+ assertTrue(updatedPropertyDescriptor.isDynamic());
+ assertFalse(updatedPropertyDescriptor.isSensitive());
+ }
+
private ValidationContext getServiceValidationContext(final
ControllerServiceState serviceState, final ControllerServiceProvider
serviceProvider) {
final ValidationContext context = mock(ValidationContext.class);