This is an automated email from the ASF dual-hosted git repository. kdoran pushed a commit to branch NIFI-15727 in repository https://gitbox.apache.org/repos/asf/nifi.git
commit b723a8dc485e6990203f46419a323806c4cc0b2b Author: Kevin Doran <[email protected]> AuthorDate: Wed Mar 18 13:18:01 2026 -0400 NIFI-15727 Fix ConnectorRepository syncFromProvider bug --- .../connector/StandardConnectorRepository.java | 3 +- .../connector/TestStandardConnectorRepository.java | 34 +++++++++++++++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorRepository.java b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorRepository.java index 2df018c6382..dcc53f2a472 100644 --- a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorRepository.java +++ b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/components/connector/StandardConnectorRepository.java @@ -463,10 +463,9 @@ public class StandardConnectorRepository implements ConnectorRepository { final List<VersionedConfigurationStep> workingFlowConfiguration = config.getWorkingFlowConfiguration(); if (workingFlowConfiguration != null) { - final MutableConnectorConfigurationContext workingConfigContext = connector.getWorkingFlowContext().getConfigurationContext(); for (final VersionedConfigurationStep step : workingFlowConfiguration) { final StepConfiguration stepConfiguration = toStepConfiguration(step); - workingConfigContext.replaceProperties(step.getName(), stepConfiguration); + connector.setConfiguration(step.getName(), stepConfiguration); } } } diff --git a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/components/connector/TestStandardConnectorRepository.java b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/components/connector/TestStandardConnectorRepository.java index 4089b274819..b833d74c6a1 100644 --- a/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/components/connector/TestStandardConnectorRepository.java +++ b/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/components/connector/TestStandardConnectorRepository.java @@ -211,12 +211,11 @@ public class TestStandardConnectorRepository { } @Test - public void testGetConnectorWithProviderOverridesWorkingConfig() { + public void testGetConnectorWithProviderOverridesWorkingConfig() throws FlowUpdateException { final ConnectorConfigurationProvider provider = mock(ConnectorConfigurationProvider.class); final StandardConnectorRepository repository = createRepositoryWithProvider(provider); - final MutableConnectorConfigurationContext workingConfigContext = mock(MutableConnectorConfigurationContext.class); - final ConnectorNode connector = createConnectorNodeWithWorkingConfig("connector-1", "Original Name", workingConfigContext); + final ConnectorNode connector = createSimpleConnectorNode("connector-1", "Original Name"); repository.addConnector(connector); final ConnectorWorkingConfiguration externalConfig = new ConnectorWorkingConfiguration(); @@ -229,7 +228,7 @@ public class TestStandardConnectorRepository { assertNotNull(result); verify(connector).setName("External Name"); - verify(workingConfigContext).replaceProperties(eq("step1"), any(StepConfiguration.class)); + verify(connector).setConfiguration(eq("step1"), any(StepConfiguration.class)); } @Test @@ -648,12 +647,11 @@ public class TestStandardConnectorRepository { } @Test - public void testSyncFromProviderAppliesNifiUuidsDirectly() { + public void testSyncFromProviderAppliesNifiUuidsDirectly() throws FlowUpdateException { final ConnectorConfigurationProvider provider = mock(ConnectorConfigurationProvider.class); final StandardConnectorRepository repository = createRepositoryWithProvider(provider); - final MutableConnectorConfigurationContext workingConfigContext = mock(MutableConnectorConfigurationContext.class); - final ConnectorNode connector = createConnectorNodeWithWorkingConfig("connector-1", "Test Connector", workingConfigContext); + final ConnectorNode connector = createSimpleConnectorNode("connector-1", "Test Connector"); repository.addConnector(connector); // Provider returns config with NiFi UUIDs (no translation needed in framework) @@ -670,7 +668,27 @@ public class TestStandardConnectorRepository { repository.getConnector("connector-1"); // Working config is updated with NiFi UUIDs as-is -- no translation in the repository - verify(workingConfigContext).replaceProperties(eq("step1"), any(StepConfiguration.class)); + verify(connector).setConfiguration(eq("step1"), any(StepConfiguration.class)); + } + + @Test + public void testSyncFromProviderSkipsSetConfigurationWhenNoSteps() throws FlowUpdateException { + final ConnectorConfigurationProvider provider = mock(ConnectorConfigurationProvider.class); + final StandardConnectorRepository repository = createRepositoryWithProvider(provider); + + final ConnectorNode connector = createSimpleConnectorNode("connector-1", "Test Connector"); + repository.addConnector(connector); + + final ConnectorWorkingConfiguration externalConfig = new ConnectorWorkingConfiguration(); + externalConfig.setName("External Name"); + externalConfig.setWorkingFlowConfiguration(null); + when(provider.load("connector-1")).thenReturn(Optional.of(externalConfig)); + + final ConnectorNode result = repository.getConnector("connector-1"); + + assertNotNull(result); + verify(connector).setName("External Name"); + verify(connector, never()).setConfiguration(anyString(), any(StepConfiguration.class)); } @Test
