You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jo...@apache.org on 2022/12/03 00:42:18 UTC

[nifi] 05/06: 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

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

joewitt pushed a commit to branch support/nifi-1.19
in repository https://gitbox.apache.org/repos/asf/nifi.git

commit e362ee077fb4c86fcadab6ca951d70d37b1b02b6
Author: Mark Payne <ma...@hotmail.com>
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 <th...@gmail.com>
    
    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();