You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2018/09/27 14:11:45 UTC

nifi git commit: 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

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 <ma...@hotmail.com>
Authored: Tue Sep 25 09:05:06 2018 -0400
Committer: Matt Gilman <ma...@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());
+    }
 }