Repository: nifi Updated Branches: refs/heads/master ca70dbbb3 -> ad4c886fb
NIFI-5634: When merging RPG entities, ensure that we only send back the ports that are common to all nodes - even if that means sending back no ports This closes #3030 Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/ad4c886f Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/ad4c886f Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/ad4c886f Branch: refs/heads/master Commit: ad4c886fbf2af2bc98ebe12200c4b119df67b90f Parents: ca70dbb Author: Mark Payne <marka...@hotmail.com> Authored: Tue Sep 25 09:05:06 2018 -0400 Committer: Matt Gilman <matt.c.gil...@gmail.com> Committed: Thu Sep 27 10:11:15 2018 -0400 ---------------------------------------------------------------------- .../manager/RemoteProcessGroupEntityMerger.java | 14 +++- .../RemoteProcessGroupEntityMergerTest.java | 79 ++++++++++++++++++++ 2 files changed, 91 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/ad4c886f/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMerger.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMerger.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMerger.java index 5207524..d210873 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMerger.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMerger.java @@ -23,6 +23,7 @@ import org.apache.nifi.web.api.dto.RemoteProcessGroupPortDTO; import org.apache.nifi.web.api.dto.status.RemoteProcessGroupStatusDTO; import org.apache.nifi.web.api.entity.RemoteProcessGroupEntity; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -124,11 +125,20 @@ public class RemoteProcessGroupEntityMerger implements ComponentEntityMerger<Rem } if (remoteProcessGroupContents != null) { - if (mergedInputPorts != null && !mergedInputPorts.isEmpty()) { + if (mergedInputPorts == null) { + remoteProcessGroupContents.setInputPorts(Collections.emptySet()); + clientDto.setInputPortCount(0); + } else { remoteProcessGroupContents.setInputPorts(mergedInputPorts); + clientDto.setInputPortCount(mergedInputPorts.size()); } - if (mergedOutputPorts != null && !mergedOutputPorts.isEmpty()) { + + if (mergedOutputPorts == null) { + remoteProcessGroupContents.setOutputPorts(Collections.emptySet()); + clientDto.setOutputPortCount(0); + } else { remoteProcessGroupContents.setOutputPorts(mergedOutputPorts); + clientDto.setOutputPortCount(mergedOutputPorts.size()); } } http://git-wip-us.apache.org/repos/asf/nifi/blob/ad4c886f/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMergerTest.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMergerTest.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMergerTest.java index ac73df7..e519a4b 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMergerTest.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/RemoteProcessGroupEntityMergerTest.java @@ -122,4 +122,83 @@ public class RemoteProcessGroupEntityMergerTest { assertEquals(1, entity1.getComponent().getContents().getOutputPorts().size()); assertEquals("out1", entity1.getComponent().getContents().getOutputPorts().iterator().next().getName()); } + + @Test + public void testNoPortsAvailableOnOneNode() throws Exception { + final NodeIdentifier node1 = new NodeIdentifier("node-1", "host-1", 8080, "host-1", 19998, null, null, null, false); + final NodeIdentifier node2 = new NodeIdentifier("node-2", "host-2", 8081, "host-2", 19999, null, null, null, false); + + final PermissionsDTO permissions = new PermissionsDTO(); + permissions.setCanRead(true); + permissions.setCanWrite(true); + + final PermissionsDTO opsPermissions = new PermissionsDTO(); + opsPermissions.setCanRead(false); + opsPermissions.setCanWrite(false); + + final RemoteProcessGroupStatusDTO status = new RemoteProcessGroupStatusDTO(); + status.setAggregateSnapshot(new RemoteProcessGroupStatusSnapshotDTO()); + + final RemoteProcessGroupPortDTO in1_1 = new RemoteProcessGroupPortDTO(); + in1_1.setName("in1"); + + final RemoteProcessGroupPortDTO in1_2 = new RemoteProcessGroupPortDTO(); + in1_2.setName("in2"); + + final Set<RemoteProcessGroupPortDTO> inputs1 = new HashSet<>(); + inputs1.add(in1_1); + inputs1.add(in1_2); + + final RemoteProcessGroupPortDTO out1_1 = new RemoteProcessGroupPortDTO(); + out1_1.setName("out1"); + + final Set<RemoteProcessGroupPortDTO> outputs1 = new HashSet<>(); + outputs1.add(out1_1); + + final RemoteProcessGroupContentsDTO contents1 = new RemoteProcessGroupContentsDTO(); + contents1.setInputPorts(inputs1); + contents1.setOutputPorts(outputs1); + + final RemoteProcessGroupDTO rpg1 = new RemoteProcessGroupDTO(); + rpg1.setContents(contents1); + rpg1.setInputPortCount(2); + rpg1.setOutputPortCount(1); + + final RemoteProcessGroupEntity entity1 = new RemoteProcessGroupEntity(); + entity1.setPermissions(permissions); + entity1.setOperatePermissions(opsPermissions); + entity1.setStatus(status); + entity1.setComponent(rpg1); + + final Set<RemoteProcessGroupPortDTO> inputs2 = new HashSet<>(); + final Set<RemoteProcessGroupPortDTO> outputs2 = new HashSet<>(); + + final RemoteProcessGroupContentsDTO contents2 = new RemoteProcessGroupContentsDTO(); + contents2.setInputPorts(inputs2); + contents2.setOutputPorts(outputs2); + + final RemoteProcessGroupDTO rpg2 = new RemoteProcessGroupDTO(); + rpg2.setContents(contents2); + rpg2.setInputPortCount(0); + rpg2.setOutputPortCount(0); + + final RemoteProcessGroupEntity entity2 = new RemoteProcessGroupEntity(); + entity2.setPermissions(permissions); + entity2.setOperatePermissions(opsPermissions); + entity2.setStatus(status); + entity2.setComponent(rpg2); + + final Map<NodeIdentifier, RemoteProcessGroupEntity> nodeMap = new HashMap<>(); + nodeMap.put(node1, entity1); + nodeMap.put(node2, entity2); + + final RemoteProcessGroupEntityMerger merger = new RemoteProcessGroupEntityMerger(); + merger.merge(entity1, nodeMap); + + // should only include ports in common to all rpg's + assertEquals(0, entity1.getComponent().getContents().getInputPorts().size()); + assertEquals(0, entity1.getComponent().getContents().getOutputPorts().size()); + assertEquals(0, entity1.getComponent().getInputPortCount().intValue()); + assertEquals(0, entity1.getComponent().getOutputPortCount().intValue()); + } }