This is an automated email from the ASF dual-hosted git repository.
exceptionfactory 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 8b6797bcbe9 NIFI-15838 Preserve prioritizer order in Git flow Registry
serialization (#11140)
8b6797bcbe9 is described below
commit 8b6797bcbe92c9fde535ca389fd6e9a9cf761a50
Author: Pierre Villard <[email protected]>
AuthorDate: Tue Apr 21 21:00:22 2026 +0200
NIFI-15838 Preserve prioritizer order in Git flow Registry serialization
(#11140)
Signed-off-by: David Handermann <[email protected]>
---
.../serialize/SortedStringCollectionsModule.java | 2 +-
.../JacksonFlowSnapshotSerializerTest.java | 55 ++++++++++++++++++++++
2 files changed, 56 insertions(+), 1 deletion(-)
diff --git
a/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/main/java/org/apache/nifi/registry/flow/git/serialize/SortedStringCollectionsModule.java
b/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/main/java/org/apache/nifi/registry/flow/git/serialize/SortedStringCollectionsModule.java
index 215d7db1fe3..47b37d02f0b 100644
---
a/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/main/java/org/apache/nifi/registry/flow/git/serialize/SortedStringCollectionsModule.java
+++
b/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/main/java/org/apache/nifi/registry/flow/git/serialize/SortedStringCollectionsModule.java
@@ -29,7 +29,7 @@ import java.util.Set;
public class SortedStringCollectionsModule extends SimpleModule {
- final Set<String> fieldsToSkipSorting =
Set.of("inheritedParameterContexts");
+ final Set<String> fieldsToSkipSorting =
Set.of("inheritedParameterContexts", "prioritizers");
@Override
public void setupModule(final SetupContext context) {
diff --git
a/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/test/java/org/apache/nifi/registry/flow/git/serialize/JacksonFlowSnapshotSerializerTest.java
b/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/test/java/org/apache/nifi/registry/flow/git/serialize/JacksonFlowSnapshotSerializerTest.java
index 4d986b29855..17b523e8387 100644
---
a/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/test/java/org/apache/nifi/registry/flow/git/serialize/JacksonFlowSnapshotSerializerTest.java
+++
b/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/test/java/org/apache/nifi/registry/flow/git/serialize/JacksonFlowSnapshotSerializerTest.java
@@ -19,6 +19,9 @@ package org.apache.nifi.registry.flow.git.serialize;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
+import org.apache.nifi.flow.ConnectableComponent;
+import org.apache.nifi.flow.ConnectableComponentType;
+import org.apache.nifi.flow.VersionedConnection;
import org.apache.nifi.flow.VersionedListenPortDefinition;
import org.apache.nifi.flow.VersionedParameter;
import org.apache.nifi.flow.VersionedParameterContext;
@@ -30,7 +33,9 @@ import org.apache.nifi.flow.VersionedResourceType;
import org.apache.nifi.registry.flow.RegisteredFlowSnapshot;
import org.junit.jupiter.api.Test;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -116,4 +121,54 @@ public class JacksonFlowSnapshotSerializerTest {
assertEquals("name3", parameters.get(2).get("name").asText());
}
+ @Test
+ public void testPrioritizerOrderPreserved() throws IOException {
+ final JacksonFlowSnapshotSerializer serializer = new
JacksonFlowSnapshotSerializer();
+
+ final List<String> prioritizers = List.of(
+ "org.apache.nifi.prioritizer.PriorityAttributePrioritizer",
+ "org.apache.nifi.prioritizer.FirstInFirstOutPrioritizer",
+ "org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer"
+ );
+
+ final ConnectableComponent source = new ConnectableComponent();
+ source.setId("source-id");
+ source.setType(ConnectableComponentType.PROCESSOR);
+ source.setGroupId("pg1");
+
+ final ConnectableComponent destination = new ConnectableComponent();
+ destination.setId("destination-id");
+ destination.setType(ConnectableComponentType.PROCESSOR);
+ destination.setGroupId("pg1");
+
+ final VersionedConnection connection = new VersionedConnection();
+ connection.setIdentifier("conn1");
+ connection.setSource(source);
+ connection.setDestination(destination);
+ connection.setPrioritizers(prioritizers);
+ connection.setSelectedRelationships(Set.of("success"));
+
+ final VersionedProcessGroup processGroup = new VersionedProcessGroup();
+ processGroup.setIdentifier("pg1");
+ processGroup.setConnections(Set.of(connection));
+
+ final RegisteredFlowSnapshot flowSnapshot = new
RegisteredFlowSnapshot();
+ flowSnapshot.setFlowContents(processGroup);
+
+ final String jsonString = serializer.serialize(flowSnapshot);
+
+ final JsonNode flow = OBJECT_MAPPER.readTree(jsonString);
+ final ArrayNode connections = (ArrayNode)
flow.get("flowContents").get("connections");
+ assertEquals(1, connections.size());
+
+ final ArrayNode serializedPrioritizers = (ArrayNode)
connections.get(0).get("prioritizers");
+ assertEquals(3, serializedPrioritizers.size());
+
assertEquals("org.apache.nifi.prioritizer.PriorityAttributePrioritizer",
serializedPrioritizers.get(0).asText());
+ assertEquals("org.apache.nifi.prioritizer.FirstInFirstOutPrioritizer",
serializedPrioritizers.get(1).asText());
+
assertEquals("org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer",
serializedPrioritizers.get(2).asText());
+
+ final RegisteredFlowSnapshot deserialized = serializer.deserialize(new
ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8)));
+ assertEquals(prioritizers,
deserialized.getFlowContents().getConnections().iterator().next().getPrioritizers());
+ }
+
}