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

thenatog 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 e1c8c96111 NIFI-10937, NIFI-10938, NIFI-10939: When restoring flow 
from XML, properly parse XML for registry clients, looking for 'id' tag instead 
of 'identifier' tag. Fixed typo in error message about Reporting Task for 
Registry Clients. Updated StandardFlowComparator so that we compare sub-process 
groups' contents only if the Flow Coordinates are different by more than their 
version
e1c8c96111 is described below

commit e1c8c9611118c6634160dfe0dad3f6f6c6b56b4d
Author: Mark Payne <[email protected]>
AuthorDate: Fri Dec 2 16:31:34 2022 -0500

    NIFI-10937, NIFI-10938, NIFI-10939: When restoring flow from XML, properly 
parse XML for registry clients, looking for 'id' tag instead of 'identifier' 
tag. Fixed typo in error message about Reporting Task for Registry Clients. 
Updated StandardFlowComparator so that we compare sub-process groups' contents 
only if the Flow Coordinates are different by more than their version
    
    Signed-off-by: Nathan Gough <[email protected]>
    
    This closes #6752.
---
 .../nifi/registry/flow/GhostFlowRegistryClient.java    |  4 ++--
 .../controller/serialization/FlowFromDOMFactory.java   |  2 +-
 .../apache/nifi/fingerprint/FingerprintFactory.java    | 17 +----------------
 .../registry/flow/diff/StandardFlowComparator.java     | 18 ++++++++++++++----
 4 files changed, 18 insertions(+), 23 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/registry/flow/GhostFlowRegistryClient.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/registry/flow/GhostFlowRegistryClient.java
index 3f5228e1e2..93983d992e 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/registry/flow/GhostFlowRegistryClient.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/registry/flow/GhostFlowRegistryClient.java
@@ -51,9 +51,9 @@ public class GhostFlowRegistryClient implements 
FlowRegistryClient {
     public Collection<ValidationResult> validate(final ValidationContext 
context) {
         return Collections.singleton(new ValidationResult.Builder()
                 .input("Any Property")
-                .subject("Missing Reporting Task")
+                .subject("Missing Registry Client")
                 .valid(false)
-                .explanation("Reporting Task is of type " + canonicalClassName 
+ ", but this is not a valid Reporting Task type")
+                .explanation("Registry Client is of type " + 
canonicalClassName + ", but this is not a valid Registry Client type")
                 .build());
     }
 
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/FlowFromDOMFactory.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/FlowFromDOMFactory.java
index 8b5e84414e..fcf5d29cff 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/FlowFromDOMFactory.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/serialization/FlowFromDOMFactory.java
@@ -161,7 +161,7 @@ public class FlowFromDOMFactory {
             return getFlowRegistryClientFromOldStyleConfig(element);
         }
 
-        dto.setId(getString(element, "identifier"));
+        dto.setId(getString(element, "id"));
         dto.setName(getString(element, "name"));
         dto.setDescription(getString(element, "description"));
         dto.setUri(getString(element, "uri"));
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java
index cc5c84fbb4..524b91fb95 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java
@@ -197,22 +197,7 @@ public class FingerprintFactory {
                     
registryClientDtos.add(FlowFromDOMFactory.getFlowRegistryClient(flowRegistryElement,
 encryptor, encodingVersion));
                 }
 
-                Collections.sort(registryClientDtos, new 
Comparator<FlowRegistryClientDTO>() {
-                    @Override
-                    public int compare(final FlowRegistryClientDTO o1, final 
FlowRegistryClientDTO o2) {
-                        if (o1 == null && o2 == null) {
-                            return 0;
-                        }
-                        if (o1 == null && o2 != null) {
-                            return 1;
-                        }
-                        if (o1 != null && o2 == null) {
-                            return -1;
-                        }
-
-                        return o1.getId().compareTo(o2.getId());
-                    }
-                });
+                
registryClientDtos.sort(Comparator.comparing(FlowRegistryClientDTO::getId));
 
                 for (final FlowRegistryClientDTO registryClientDto : 
registryClientDtos) {
                     addFlowRegistryFingerprint(builder, registryClientDto);
diff --git 
a/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StandardFlowComparator.java
 
b/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StandardFlowComparator.java
index 6e88d3384e..df1a37ff84 100644
--- 
a/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StandardFlowComparator.java
+++ 
b/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StandardFlowComparator.java
@@ -52,6 +52,7 @@ public class StandardFlowComparator implements FlowComparator 
{
 
     private static final String ENCRYPTED_VALUE_PREFIX = "enc{";
     private static final String ENCRYPTED_VALUE_SUFFIX = "}";
+    private static final String FLOW_VERSION = "Flow Version";
 
     private static final String DEFAULT_LOAD_BALANCE_STRATEGY = 
"DO_NOT_LOAD_BALANCE";
     private static final String DEFAULT_PARTITIONING_ATTRIBUTE = "";
@@ -526,8 +527,10 @@ public class StandardFlowComparator implements 
FlowComparator {
         // - both versions say the group is not under version control
         // OR
         // - both versions say the group IS under version control but disagree 
about the coordinates
+        final boolean coordinatesDifferOtherThanVersion = 
flowCoordinateDifferences.stream()
+            .anyMatch(diff -> !diff.getFieldName().isPresent() || 
!diff.getFieldName().get().equals(FLOW_VERSION));
         final boolean compareGroupContents = (groupACoordinates == null && 
groupBCoordinates == null)
-            || (groupACoordinates != null && groupBCoordinates != null && 
!flowCoordinateDifferences.isEmpty());
+            || (groupACoordinates != null && groupBCoordinates != null && 
coordinatesDifferOtherThanVersion);
 
         if (compareGroupContents) {
             differences.addAll(compareComponents(groupA.getConnections(), 
groupB.getConnections(), this::compare));
@@ -557,13 +560,20 @@ public class StandardFlowComparator implements 
FlowComparator {
             return;
         }
 
-        if (!Objects.equals(coordinatesA.getBucketId(), 
coordinatesB.getBucketId()) || !Objects.equals(coordinatesA.getFlowId(), 
coordinatesB.getFlowId())
-                || !Objects.equals(coordinatesA.getVersion(), 
coordinatesB.getVersion())) {
-
+        if (!Objects.equals(coordinatesA.getBucketId(), 
coordinatesB.getBucketId())) {
+            
differences.add(difference(DifferenceType.VERSIONED_FLOW_COORDINATES_CHANGED, 
groupA, groupB, coordinatesA, coordinatesB));
+            return;
+        }
+        if (!Objects.equals(coordinatesA.getFlowId(), 
coordinatesB.getFlowId())) {
             
differences.add(difference(DifferenceType.VERSIONED_FLOW_COORDINATES_CHANGED, 
groupA, groupB, coordinatesA, coordinatesB));
             return;
         }
 
+        if (!Objects.equals(coordinatesA.getVersion(), 
coordinatesB.getVersion())) {
+            
differences.add(difference(DifferenceType.VERSIONED_FLOW_COORDINATES_CHANGED, 
groupA, groupB, FLOW_VERSION, FLOW_VERSION, coordinatesA, coordinatesB));
+            return;
+        }
+
         // If Registry URL is specified for both coordinates, compare them
         final String registryUrlA = coordinatesA.getRegistryUrl();
         final String registryUrlB = coordinatesB.getRegistryUrl();

Reply via email to