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();