This is an automated email from the ASF dual-hosted git repository. bsimon pushed a commit to branch support/nifi-1.x in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/support/nifi-1.x by this push: new 4a6e6751d5 NIFI-11213 Showing version change in older (pre 1.18.0) contained version flows properly (#7017) 4a6e6751d5 is described below commit 4a6e6751d5478514ab6fe937685b057193365f65 Author: simonbence <61191107+simonbe...@users.noreply.github.com> AuthorDate: Mon Mar 20 16:52:07 2023 +0100 NIFI-11213 Showing version change in older (pre 1.18.0) contained version flows properly (#7017) --- .../apache/nifi/util/FlowDifferenceFilters.java | 22 +++------- .../diff/ConciseEvolvingDifferenceDescriptor.java | 2 +- .../registry/flow/diff/FlowDifferenceUtil.java | 50 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 16 deletions(-) diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/util/FlowDifferenceFilters.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/util/FlowDifferenceFilters.java index db714946db..ad2fa76122 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/util/FlowDifferenceFilters.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/util/FlowDifferenceFilters.java @@ -34,6 +34,7 @@ import org.apache.nifi.groups.ProcessGroup; import org.apache.nifi.processor.Relationship; import org.apache.nifi.registry.flow.diff.DifferenceType; import org.apache.nifi.registry.flow.diff.FlowDifference; +import org.apache.nifi.registry.flow.diff.FlowDifferenceUtil; import org.apache.nifi.registry.flow.mapping.InstantiatedVersionedComponent; import org.apache.nifi.registry.flow.mapping.InstantiatedVersionedControllerService; import org.apache.nifi.registry.flow.mapping.InstantiatedVersionedProcessor; @@ -192,22 +193,13 @@ public class FlowDifferenceFilters { final VersionedFlowCoordinates coordinatesB = versionedProcessGroupB.getVersionedFlowCoordinates(); if (coordinatesA != null && coordinatesB != null) { - String registryUrlA = coordinatesA.getRegistryUrl(); - String registryUrlB = coordinatesB.getRegistryUrl(); - - if (registryUrlA != null && registryUrlB != null && !registryUrlA.equals(registryUrlB)) { - if (registryUrlA.endsWith("/")) { - registryUrlA = registryUrlA.substring(0, registryUrlA.length() - 1); - } - - if (registryUrlB.endsWith("/")) { - registryUrlB = registryUrlB.substring(0, registryUrlB.length() - 1); - } - - if (registryUrlA.equals(registryUrlB)) { - return true; - } + if (coordinatesA.getStorageLocation() != null || coordinatesB.getStorageLocation() != null) { + return false; } + + return !FlowDifferenceUtil.areRegistryStrictlyEqual(coordinatesA, coordinatesB) + && FlowDifferenceUtil.areRegistryUrlsEqual(coordinatesA, coordinatesB) + && coordinatesA.getVersion() == coordinatesB.getVersion(); } } } diff --git a/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/ConciseEvolvingDifferenceDescriptor.java b/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/ConciseEvolvingDifferenceDescriptor.java index 144f865af4..3fc4e4b1bf 100644 --- a/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/ConciseEvolvingDifferenceDescriptor.java +++ b/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/ConciseEvolvingDifferenceDescriptor.java @@ -80,7 +80,7 @@ public class ConciseEvolvingDifferenceDescriptor implements DifferenceDescriptor final VersionedFlowCoordinates coordinatesB = (VersionedFlowCoordinates) valueB; // If the two vary only by version, then use a more concise message. If anything else is different, then use a fully explanation. - if (Objects.equals(coordinatesA.getRegistryUrl(), coordinatesB.getRegistryUrl()) && Objects.equals(coordinatesA.getBucketId(), coordinatesB.getBucketId()) + if (FlowDifferenceUtil.areRegistryUrlsEqual(coordinatesA, coordinatesB) && Objects.equals(coordinatesA.getBucketId(), coordinatesB.getBucketId()) && Objects.equals(coordinatesA.getFlowId(), coordinatesB.getFlowId()) && coordinatesA.getVersion() != coordinatesB.getVersion()) { description = String.format("Flow Version changed from %s to %s", coordinatesA.getVersion(), coordinatesB.getVersion()); diff --git a/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/FlowDifferenceUtil.java b/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/FlowDifferenceUtil.java new file mode 100644 index 0000000000..1d69b06bfb --- /dev/null +++ b/nifi-registry/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/FlowDifferenceUtil.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.nifi.registry.flow.diff; + +import org.apache.nifi.flow.VersionedFlowCoordinates; + +public final class FlowDifferenceUtil { + + private FlowDifferenceUtil() { + // Not to be instantiated + } + + public static boolean areRegistryStrictlyEqual(final VersionedFlowCoordinates coordinatesA, final VersionedFlowCoordinates coordinatesB) { + final String registryUrlA = coordinatesA.getRegistryUrl(); + final String registryUrlB = coordinatesB.getRegistryUrl(); + return registryUrlA != null && registryUrlB != null && registryUrlA.equals(registryUrlB); + } + + public static boolean areRegistryUrlsEqual(final VersionedFlowCoordinates coordinatesA, final VersionedFlowCoordinates coordinatesB) { + final String registryUrlA = coordinatesA.getRegistryUrl(); + final String registryUrlB = coordinatesB.getRegistryUrl(); + + if (registryUrlA != null && registryUrlB != null) { + if (registryUrlA.equals(registryUrlB)) { + return true; + } + + final String normalizedRegistryUrlA = registryUrlA.endsWith("/") ? registryUrlA.substring(0, registryUrlA.length() - 1) : registryUrlA; + final String normalizedRegistryUrlB = registryUrlB.endsWith("/") ? registryUrlB.substring(0, registryUrlB.length() - 1) : registryUrlB; + + return normalizedRegistryUrlA.equals(normalizedRegistryUrlB); + } + + return false; + } +}