This is an automated email from the ASF dual-hosted git repository.

bbende pushed a commit to branch NIFI-15258
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/NIFI-15258 by this push:
     new 60da16560f NIFI-15485: Include provider name when providing fqn for 
secrets (#10801)
60da16560f is described below

commit 60da16560fdf9ffe2fb5356c06fb9788d4cb0dea
Author: Mark Payne <[email protected]>
AuthorDate: Thu Jan 22 09:31:17 2026 -0500

    NIFI-15485: Include provider name when providing fqn for secrets (#10801)
---
 .../secrets/ParameterProviderSecretProvider.java   |  2 +-
 .../secrets/ParameterProviderSecretsManager.java   | 16 +++++++--
 .../StandardConnectorConfigurationContext.java     | 38 ++++++++++++++--------
 3 files changed, 39 insertions(+), 17 deletions(-)

diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java
 
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java
index c4d7563da0..c44d5f10fd 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java
@@ -66,7 +66,7 @@ public class ParameterProviderSecretProvider implements 
SecretProvider {
             .providerName(getProviderName())
             .groupName(groupName)
             .name(descriptor.getName())
-            .fullyQualifiedName(groupName + "." + descriptor.getName())
+            .fullyQualifiedName(getProviderName() + "." + groupName + "." + 
descriptor.getName())
             .description(descriptor.getDescription())
             .value(parameter.getValue())
             .authorizable(parameterProvider)
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java
 
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java
index e4c57c1df6..edd1348393 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretsManager.java
@@ -140,8 +140,20 @@ public class ParameterProviderSecretsManager implements 
SecretsManager {
             return null;
         }
 
-        // No Provider found by ID, search by Provider Name
-        final String providerName = secretReference.getProviderName();
+        // No Provider found by ID, extract Provider Name so we can search by 
it.
+        // If not explicitly provided, extract from FQN, if it is provided.
+        String providerName = secretReference.getProviderName();
+        if (providerName == null) {
+            final String fqn = secretReference.getFullyQualifiedName();
+            if (fqn != null) {
+                final int dotIndex = fqn.indexOf('.');
+                if (dotIndex > 0) {
+                    providerName = fqn.substring(0, dotIndex);
+                }
+            }
+        }
+
+        // Search by Provider Name
         if (providerName != null) {
             for (final SecretProvider provider : providers) {
                 if (providerName.equals(provider.getProviderName())) {
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorConfigurationContext.java
 
b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorConfigurationContext.java
index b601d154ed..bc7c2b9d68 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorConfigurationContext.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorConfigurationContext.java
@@ -152,17 +152,18 @@ public class StandardConnectorConfigurationContext 
implements MutableConnectorCo
         try {
             final StepConfiguration existingConfig = 
propertyConfigurations.get(stepName);
             final Map<String, ConnectorValueReference> existingProperties = 
existingConfig != null ? existingConfig.getPropertyValues() : new HashMap<>();
-            if (Objects.equals(existingProperties, 
configuration.getPropertyValues())) {
-                return ConfigurationUpdateResult.NO_CHANGES;
-            }
-
             final Map<String, ConnectorValueReference> mergedProperties = new 
HashMap<>(existingProperties);
             mergedProperties.putAll(configuration.getPropertyValues());
 
             final StepConfiguration resolvedConfig = 
resolvePropertyValues(mergedProperties);
 
-            this.propertyConfigurations.put(stepName, new 
StepConfiguration(new HashMap<>(mergedProperties)));
-            this.resolvedPropertyConfigurations.put(stepName, resolvedConfig);
+            final StepConfiguration updatedStepConfig = new 
StepConfiguration(new HashMap<>(mergedProperties));
+            final StepConfiguration existingStepConfig = 
this.propertyConfigurations.put(stepName, updatedStepConfig);
+            final StepConfiguration existingResolvedStepConfig = 
this.resolvedPropertyConfigurations.put(stepName, resolvedConfig);
+
+            if (Objects.equals(existingStepConfig, updatedStepConfig) && 
Objects.equals(existingResolvedStepConfig, resolvedConfig)) {
+                return ConfigurationUpdateResult.NO_CHANGES;
+            }
 
             return ConfigurationUpdateResult.CHANGES_MADE;
         } finally {
@@ -231,6 +232,16 @@ public class StandardConnectorConfigurationContext 
implements MutableConnectorCo
             }
         }
 
+        // Try to find by Fully Qualified Name prefix
+        final String fqn = secretReference.getFullyQualifiedName();
+        if (fqn != null) {
+            for (final SecretProvider provider : providers) {
+                if (fqn.startsWith(provider.getProviderName() + ".")) {
+                    return provider;
+                }
+            }
+        }
+
         return null;
     }
 
@@ -238,16 +249,15 @@ public class StandardConnectorConfigurationContext 
implements MutableConnectorCo
     public ConfigurationUpdateResult replaceProperties(final String stepName, 
final StepConfiguration configuration) {
         writeLock.lock();
         try {
-            final StepConfiguration existingConfig = 
propertyConfigurations.get(stepName);
-            final Map<String, ConnectorValueReference> existingProperties = 
existingConfig != null ? existingConfig.getPropertyValues() : new HashMap<>();
-            if (Objects.equals(existingProperties, 
configuration.getPropertyValues())) {
-                return ConfigurationUpdateResult.NO_CHANGES;
-            }
-
             final StepConfiguration resolvedConfig = 
resolvePropertyValues(configuration.getPropertyValues());
 
-            this.propertyConfigurations.put(stepName, new 
StepConfiguration(new HashMap<>(configuration.getPropertyValues())));
-            this.resolvedPropertyConfigurations.put(stepName, resolvedConfig);
+            final StepConfiguration updatedStepConfig = new 
StepConfiguration(new HashMap<>(configuration.getPropertyValues()));
+            final StepConfiguration existingStepConfig = 
this.propertyConfigurations.put(stepName, updatedStepConfig);
+            final StepConfiguration existingResolvedStepConfig = 
this.resolvedPropertyConfigurations.put(stepName, resolvedConfig);
+
+            if (Objects.equals(existingStepConfig, updatedStepConfig) && 
Objects.equals(existingResolvedStepConfig, resolvedConfig)) {
+                return ConfigurationUpdateResult.NO_CHANGES;
+            }
 
             return ConfigurationUpdateResult.CHANGES_MADE;
         } finally {

Reply via email to