Repository: nifi-minifi
Updated Branches:
  refs/heads/master 974c536ca -> d987f0bd1


MINIFI-46 - Supporting multiple relationships for MiNiFi connections
- Incrementing minifi config version number

This closes #40

Signed-off-by: Joseph Percivall <joeperciv...@yahoo.com>


Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi/commit/d987f0bd
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi/tree/d987f0bd
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi/diff/d987f0bd

Branch: refs/heads/master
Commit: d987f0bd15f3e5467905cc77f3015485c2f0191d
Parents: 974c536
Author: Bryan Rosander <bryanrosan...@gmail.com>
Authored: Fri Sep 30 09:32:40 2016 -0400
Committer: Joseph Percivall <joeperciv...@yahoo.com>
Committed: Thu Oct 6 10:22:24 2016 -0400

----------------------------------------------------------------------
 .../bootstrap/util/ConfigTransformer.java       |   4 +-
 .../minifi/commons/schema/ConfigSchema.java     |   2 +-
 .../minifi/commons/schema/ConnectionSchema.java |  28 +-
 .../schema/serialization/SchemaLoader.java      |   1 +
 .../commons/schema/ConnectionSchemaTest.java    | 317 +++++++++++++++++
 .../schema/serialization/SchemaLoaderTest.java  |   8 +
 .../src/main/markdown/System_Admin_Guide.md     |   2 +-
 .../dto/ConnectionSchemaFunction.java           |   8 +-
 .../toolkit/configuration/ConfigMainTest.java   |   5 +
 .../configuration/dto/ConnectionSchemaTest.java |  16 +-
 .../src/test/resources/CsvToJson.yml            |  14 +-
 .../resources/DecompressionCircularFlow.yml     |  44 ++-
 .../resources/InvokeHttpMiNiFiTemplateTest.yml  |  35 +-
 .../test/resources/MultipleRelationships.xml    | 339 +++++++++++++++++++
 .../test/resources/MultipleRelationships.yml    | 149 ++++++++
 ...aceTextExpressionLanguageCSVReformatting.yml |  11 +-
 .../src/test/resources/StressTestFramework.yml  |   8 +-
 17 files changed, 932 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
----------------------------------------------------------------------
diff --git 
a/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
 
b/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
index ff16703..87659ea 100644
--- 
a/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
+++ 
b/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
@@ -539,7 +539,9 @@ public final class ConfigTransformer {
                 addTextElement(element, "destinationType", "PROCESSOR");
             }
 
-            addTextElement(element, "relationship", 
connectionProperties.getSourceRelationshipName());
+            for (String relationshipName : 
connectionProperties.getSourceRelationshipNames()) {
+                addTextElement(element, "relationship", relationshipName);
+            }
 
             addTextElement(element, "maxWorkQueueSize", 
String.valueOf(connectionProperties.getMaxWorkQueueSize()));
             addTextElement(element, "maxWorkQueueDataSize", 
connectionProperties.getMaxWorkQueueDataSize());

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
----------------------------------------------------------------------
diff --git 
a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
 
b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
index 11119b4..6ed2dca 100644
--- 
a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
+++ 
b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConfigSchema.java
@@ -53,7 +53,7 @@ public class ConfigSchema extends BaseSchema {
     public static final String 
FOUND_THE_FOLLOWING_DUPLICATE_REMOTE_INPUT_PORT_IDS = "Found the following 
duplicate remote input port ids: ";
     public static final String FOUND_THE_FOLLOWING_DUPLICATE_IDS = "Found the 
following ids that occur both in Processors and Remote Input Ports: ";
     public static final String 
CANNOT_LOOK_UP_PROCESSOR_ID_FROM_PROCESSOR_NAME_DUE_TO_DUPLICATE_PROCESSOR_NAMES
 = "Cannot look up Processor id from Processor name due to duplicate Processor 
names: ";
-    public static final int CONFIG_VERSION = 1;
+    public static final int CONFIG_VERSION = 2;
     public static final String 
CONNECTIONS_REFER_TO_PROCESSOR_NAMES_THAT_DONT_EXIST = "Connection(s) refer to 
Processor names that don't exist: ";
     public static String TOP_LEVEL_NAME = "top level";
     public static final String VERSION = "MiNiFi Config Version";

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConnectionSchema.java
----------------------------------------------------------------------
diff --git 
a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConnectionSchema.java
 
b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConnectionSchema.java
index ebf166d..ceba2ca 100644
--- 
a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConnectionSchema.java
+++ 
b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ConnectionSchema.java
@@ -20,6 +20,8 @@ package org.apache.nifi.minifi.commons.schema;
 import org.apache.nifi.minifi.commons.schema.common.BaseSchemaWithIdAndName;
 import org.apache.nifi.minifi.commons.schema.common.StringUtil;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -29,6 +31,7 @@ import static 
org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.CO
 public class ConnectionSchema extends BaseSchemaWithIdAndName {
     public static final String SOURCE_ID_KEY = "source id";
     public static final String SOURCE_RELATIONSHIP_NAME_KEY = "source 
relationship name";
+    public static final String SOURCE_RELATIONSHIP_NAMES_KEY = "source 
relationship names";
     public static final String DESTINATION_ID_KEY = "destination id";
     public static final String MAX_WORK_QUEUE_SIZE_KEY = "max work queue size";
     public static final String MAX_WORK_QUEUE_DATA_SIZE_KEY = "max work queue 
data size";
@@ -42,7 +45,7 @@ public class ConnectionSchema extends BaseSchemaWithIdAndName 
{
     public static final String DEFAULT_FLOWFILE_EXPIRATION = "0 sec";
 
     private String sourceId;
-    private String sourceRelationshipName;
+    private List<String> sourceRelationshipNames;
     private String destinationId;
 
     private String sourceName;
@@ -60,7 +63,22 @@ public class ConnectionSchema extends 
BaseSchemaWithIdAndName {
         if (StringUtil.isNullOrEmpty(sourceId)) {
             sourceName = getRequiredKeyAsType(map, SOURCE_NAME_KEY, 
String.class, CONNECTIONS_KEY);
         }
-        sourceRelationshipName = getRequiredKeyAsType(map, 
SOURCE_RELATIONSHIP_NAME_KEY, String.class, CONNECTIONS_KEY);
+
+        String sourceRelationshipName = getOptionalKeyAsType(map, 
SOURCE_RELATIONSHIP_NAME_KEY, String.class, CONNECTIONS_KEY, null);
+        if (StringUtil.isNullOrEmpty(sourceRelationshipName)) {
+            sourceRelationshipNames = getOptionalKeyAsType(map, 
SOURCE_RELATIONSHIP_NAMES_KEY, List.class, CONNECTIONS_KEY, new ArrayList());
+            if (sourceRelationshipNames.isEmpty()) {
+                addValidationIssue(getIssueText(SOURCE_RELATIONSHIP_NAMES_KEY, 
CONNECTIONS_KEY, "expected at least one relationship to be specified"));
+            }
+        } else {
+            if (map.containsKey(SOURCE_RELATIONSHIP_NAMES_KEY)) {
+                addValidationIssue("Only one of " + 
SOURCE_RELATIONSHIP_NAME_KEY + ", " + SOURCE_RELATIONSHIP_NAMES_KEY + " should 
be set per connection.  Found both on "
+                        + (StringUtil.isNullOrEmpty(getName()) ? getId() : 
getName()));
+                sourceRelationshipNames = getRequiredKeyAsType(map, 
SOURCE_RELATIONSHIP_NAMES_KEY, List.class, CONNECTIONS_KEY);
+            } else {
+                sourceRelationshipNames = new 
ArrayList<>(Arrays.asList(sourceRelationshipName));
+            }
+        }
 
         destinationId = getOptionalKeyAsType(map, DESTINATION_ID_KEY, 
String.class, CONNECTIONS_KEY, "");
         if (StringUtil.isNullOrEmpty(getDestinationId())) {
@@ -77,7 +95,7 @@ public class ConnectionSchema extends BaseSchemaWithIdAndName 
{
     public Map<String, Object> toMap() {
         Map<String, Object> result = super.toMap();
         result.put(SOURCE_ID_KEY, sourceId);
-        result.put(SOURCE_RELATIONSHIP_NAME_KEY, sourceRelationshipName);
+        result.put(SOURCE_RELATIONSHIP_NAMES_KEY, sourceRelationshipNames);
         result.put(DESTINATION_ID_KEY, destinationId);
 
         result.put(MAX_WORK_QUEUE_SIZE_KEY, maxWorkQueueSize);
@@ -103,8 +121,8 @@ public class ConnectionSchema extends 
BaseSchemaWithIdAndName {
         this.destinationId = destinationId;
     }
 
-    public String getSourceRelationshipName() {
-        return sourceRelationshipName;
+    public List<String> getSourceRelationshipNames() {
+        return sourceRelationshipNames;
     }
 
     public Number getMaxWorkQueueSize() {

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoader.java
----------------------------------------------------------------------
diff --git 
a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoader.java
 
b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoader.java
index a5bf14c..9d73bb7 100644
--- 
a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoader.java
+++ 
b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoader.java
@@ -36,6 +36,7 @@ public class SchemaLoader {
         Map<String, Function<Map, ConfigSchema>> result = new HashMap<>();
         result.put(String.valueOf((Object)null), ConfigSchema::new);
         result.put("", ConfigSchema::new);
+        result.put("1", ConfigSchema::new);
         result.put(Integer.toString(ConfigSchema.CONFIG_VERSION), 
ConfigSchema::new);
         return result;
     }

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/ConnectionSchemaTest.java
----------------------------------------------------------------------
diff --git 
a/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/ConnectionSchemaTest.java
 
b/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/ConnectionSchemaTest.java
new file mode 100644
index 0000000..0d37df9
--- /dev/null
+++ 
b/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/ConnectionSchemaTest.java
@@ -0,0 +1,317 @@
+/*
+ *
+ *  * 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.minifi.commons.schema;
+
+import org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+
+public class ConnectionSchemaTest {
+    private String testId;
+    private String testName;
+    private String testSourceId;
+    private String testSourceRelationShip1;
+    private String testSourceRelationShip2;
+    private List<String> testSourceRelationships;
+    private String testDestinationId;
+    private String testSourceName;
+    private String testDestinationName;
+    private int testMaxWorkQueueSize;
+    private String testMaxWorkQueueDataSize;
+    private String testFlowfileExpiration;
+    private String testQueuePrioritizerClass;
+
+    @Before
+    public void setup() {
+        testId = "testId";
+        testName = "testName";
+        testSourceId = "testSourceId";
+        testSourceRelationShip1 = "testSourceRelationShip1";
+        testSourceRelationShip2 = "testSourceRelationShip2";
+        testSourceRelationships = Arrays.asList(testSourceRelationShip1, 
testSourceRelationShip2);
+        testDestinationId = "testDestinationId";
+        testSourceName = "testSourceName";
+        testDestinationName = "testDestinationName";
+        testMaxWorkQueueSize = 55;
+        testMaxWorkQueueDataSize = "testMaxWorkQueueDataSize";
+        testFlowfileExpiration = "testFlowfileExpiration";
+        testQueuePrioritizerClass = "testQueuePrioritizerClass";
+    }
+
+    private ConnectionSchema createSchema(int expectedValidationIssues) {
+        return createSchema(createMap(), expectedValidationIssues);
+    }
+
+    private ConnectionSchema createSchema(Map<String, Object> map, int 
expectedValidationIssues) {
+        ConnectionSchema connectionSchema = new ConnectionSchema(map);
+        assertEquals(expectedValidationIssues, 
connectionSchema.getValidationIssues().size());
+        return connectionSchema;
+    }
+
+    private Map<String, Object> createMap() {
+        Map<String, Object> map = new HashMap<>();
+        map.put(CommonPropertyKeys.ID_KEY, testId);
+        map.put(CommonPropertyKeys.NAME_KEY, testName);
+        map.put(ConnectionSchema.SOURCE_ID_KEY, testSourceId);
+        map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY, 
testSourceRelationships);
+        map.put(ConnectionSchema.DESTINATION_ID_KEY, testDestinationId);
+        map.put(ConnectionSchema.SOURCE_NAME_KEY, testSourceName);
+        map.put(ConnectionSchema.DESTINATION_NAME_KEY, testDestinationName);
+        map.put(ConnectionSchema.MAX_WORK_QUEUE_SIZE_KEY, 
testMaxWorkQueueSize);
+        map.put(ConnectionSchema.MAX_WORK_QUEUE_DATA_SIZE_KEY, 
testMaxWorkQueueDataSize);
+        map.put(ConnectionSchema.FLOWFILE_EXPIRATION__KEY, 
testFlowfileExpiration);
+        map.put(ConnectionSchema.QUEUE_PRIORITIZER_CLASS_KEY, 
testQueuePrioritizerClass);
+        return map;
+    }
+
+    @Test
+    public void testIdKey() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testId, schema.getId());
+        assertEquals(schema.getId(), 
schema.toMap().get(CommonPropertyKeys.ID_KEY));
+    }
+
+    @Test
+    public void testNoId() {
+        Map<String, Object> map = createMap();
+        map.remove(CommonPropertyKeys.ID_KEY);
+        ConnectionSchema schema = createSchema(map, 1);
+        assertEquals("", schema.getId());
+        assertEquals(schema.getId(), 
schema.toMap().get(CommonPropertyKeys.ID_KEY));
+    }
+
+    @Test
+    public void testName() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testName, schema.getName());
+        assertEquals(schema.getName(), 
schema.toMap().get(CommonPropertyKeys.NAME_KEY));
+    }
+
+    @Test
+    public void testNoName() {
+        Map<String, Object> map = createMap();
+        map.remove(CommonPropertyKeys.NAME_KEY);
+        ConnectionSchema schema = createSchema(map, 0);
+        assertEquals("", schema.getName());
+        assertEquals(schema.getName(), 
schema.toMap().get(CommonPropertyKeys.NAME_KEY));
+    }
+
+    @Test
+    public void testSourceId() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testSourceId, schema.getSourceId());
+        assertEquals(schema.getSourceId(), 
schema.toMap().get(ConnectionSchema.SOURCE_ID_KEY));
+    }
+
+    @Test
+    public void testNoSourceId() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.SOURCE_ID_KEY);
+        ConnectionSchema schema = createSchema(map, 1);
+        assertEquals("", schema.getSourceId());
+        assertEquals(schema.getSourceId(), 
schema.toMap().get(ConnectionSchema.SOURCE_ID_KEY));
+    }
+
+    @Test
+    public void testNoSourceNameWithId() {
+        ConnectionSchema schema = createSchema(0);
+        assertNull(schema.getSourceName());
+        
assertFalse(schema.toMap().containsKey(ConnectionSchema.SOURCE_NAME_KEY));
+    }
+
+    @Test
+    public void testSourceNameNoId() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.SOURCE_ID_KEY);
+        ConnectionSchema schema = createSchema(map, 1);
+        assertEquals("", schema.getSourceId());
+        assertEquals(testSourceName, schema.getSourceName());
+        Map<String, Object> outputMap = schema.toMap();
+        assertEquals(schema.getSourceId(), 
outputMap.get(ConnectionSchema.SOURCE_ID_KEY));
+        
assertFalse(schema.toMap().containsKey(ConnectionSchema.SOURCE_NAME_KEY));
+    }
+
+    @Test
+    public void testNoSourceIdOrSourceName() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.SOURCE_ID_KEY);
+        map.remove(ConnectionSchema.SOURCE_NAME_KEY);
+        ConnectionSchema schema = createSchema(map, 2);
+        assertEquals("", schema.getSourceId());
+        assertNull(schema.getSourceName());
+        Map<String, Object> outputMap = schema.toMap();
+        assertEquals(schema.getSourceId(), 
outputMap.get(ConnectionSchema.SOURCE_ID_KEY));
+        
assertFalse(schema.toMap().containsKey(ConnectionSchema.SOURCE_NAME_KEY));
+    }
+
+    @Test
+    public void testSourceRelationShipNames() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testSourceRelationships, 
schema.getSourceRelationshipNames());
+        assertEquals(schema.getSourceRelationshipNames(), 
schema.toMap().get(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY));
+    }
+
+    @Test
+    public void testSourceRelationshipName() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY);
+        map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAME_KEY, 
testSourceRelationShip1);
+        ConnectionSchema schema = createSchema(map, 0);
+        assertEquals(new ArrayList<>(Arrays.asList(testSourceRelationShip1)), 
schema.getSourceRelationshipNames());
+        assertEquals(schema.getSourceRelationshipNames(), 
schema.toMap().get(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY));
+    }
+
+    @Test
+    public void testSourceRelationshipNameAndSourceRelationshipNames() {
+        Map<String, Object> map = createMap();
+        map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAME_KEY, 
testSourceRelationShip1);
+        ConnectionSchema schema = createSchema(map, 1);
+        assertEquals(testSourceRelationships, 
schema.getSourceRelationshipNames());
+        assertEquals(schema.getSourceRelationshipNames(), 
schema.toMap().get(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY));
+    }
+
+    @Test
+    public void testNoSourceRelationshipNames() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY);
+        ConnectionSchema schema = createSchema(map, 1);
+        assertEquals(new ArrayList<>(), schema.getSourceRelationshipNames());
+        assertEquals(schema.getSourceRelationshipNames(), 
schema.toMap().get(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY));
+    }
+
+    @Test
+    public void testDestinationId() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testDestinationId, schema.getDestinationId());
+        assertEquals(schema.getDestinationId(), 
schema.toMap().get(ConnectionSchema.DESTINATION_ID_KEY));
+    }
+
+    @Test
+    public void testNoDestinationId() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.DESTINATION_ID_KEY);
+        ConnectionSchema schema = createSchema(map, 1);
+        assertEquals("", schema.getDestinationId());
+        assertEquals(schema.getDestinationId(), 
schema.toMap().get(ConnectionSchema.DESTINATION_ID_KEY));
+    }
+
+    @Test
+    public void testDestinationNameWithId() {
+        ConnectionSchema schema = createSchema(0);
+        assertNull(schema.getDestinationName());
+        
assertFalse(schema.toMap().containsKey(ConnectionSchema.DESTINATION_NAME_KEY));
+    }
+
+    @Test
+    public void testDestinationNameNoId() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.DESTINATION_ID_KEY);
+        ConnectionSchema schema = createSchema(map, 1);
+        assertEquals(testDestinationName, schema.getDestinationName());
+        
assertFalse(schema.toMap().containsKey(ConnectionSchema.DESTINATION_NAME_KEY));
+    }
+
+    @Test
+    public void testNoDestinationNameNoId() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.DESTINATION_ID_KEY);
+        map.remove(ConnectionSchema.DESTINATION_NAME_KEY);
+        ConnectionSchema schema = createSchema(map, 2);
+        assertEquals("", schema.getDestinationId());
+        assertNull(schema.getDestinationName());
+        Map<String, Object> outputMap = schema.toMap();
+        assertEquals(schema.getDestinationId(), 
outputMap.get(ConnectionSchema.DESTINATION_ID_KEY));
+        
assertFalse(outputMap.containsKey(ConnectionSchema.DESTINATION_NAME_KEY));
+    }
+
+    @Test
+    public void testMaxWorkQueueSize() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testMaxWorkQueueSize, schema.getMaxWorkQueueSize());
+        assertEquals(schema.getMaxWorkQueueSize(), 
schema.toMap().get(ConnectionSchema.MAX_WORK_QUEUE_SIZE_KEY));
+    }
+
+    @Test
+    public void testNoMaxWorkQueueSize() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.MAX_WORK_QUEUE_SIZE_KEY);
+        ConnectionSchema schema = createSchema(map, 0);
+        assertEquals(ConnectionSchema.DEFAULT_MAX_WORK_QUEUE_SIZE, 
schema.getMaxWorkQueueSize());
+        assertEquals(schema.getMaxWorkQueueSize(), 
schema.toMap().get(ConnectionSchema.MAX_WORK_QUEUE_SIZE_KEY));
+    }
+
+    @Test
+    public void testMaxWorkQueueDataSize() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testMaxWorkQueueDataSize, 
schema.getMaxWorkQueueDataSize());
+        assertEquals(schema.getMaxWorkQueueDataSize(), 
schema.toMap().get(ConnectionSchema.MAX_WORK_QUEUE_DATA_SIZE_KEY));
+    }
+
+    @Test
+    public void testNoMaxWorkQueueDataSize() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.MAX_WORK_QUEUE_DATA_SIZE_KEY);
+        ConnectionSchema schema = createSchema(map, 0);
+        assertEquals(ConnectionSchema.DEFAULT_MAX_QUEUE_DATA_SIZE, 
schema.getMaxWorkQueueDataSize());
+        assertEquals(schema.getMaxWorkQueueDataSize(), 
schema.toMap().get(ConnectionSchema.MAX_WORK_QUEUE_DATA_SIZE_KEY));
+    }
+
+    @Test
+    public void testFlowFileExpiration() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testFlowfileExpiration, schema.getFlowfileExpiration());
+        assertEquals(schema.getFlowfileExpiration(), 
schema.toMap().get(ConnectionSchema.FLOWFILE_EXPIRATION__KEY));
+    }
+
+    @Test
+    public void testNoFlowFileExpiration() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.FLOWFILE_EXPIRATION__KEY);
+        ConnectionSchema schema = createSchema(map, 0);
+        assertEquals(ConnectionSchema.DEFAULT_FLOWFILE_EXPIRATION, 
schema.getFlowfileExpiration());
+        assertEquals(schema.getFlowfileExpiration(), 
schema.toMap().get(ConnectionSchema.FLOWFILE_EXPIRATION__KEY));
+    }
+
+    @Test
+    public void testQueuePrioritizer() {
+        ConnectionSchema schema = createSchema(0);
+        assertEquals(testQueuePrioritizerClass, 
schema.getQueuePrioritizerClass());
+        assertEquals(schema.getQueuePrioritizerClass(), 
schema.toMap().get(ConnectionSchema.QUEUE_PRIORITIZER_CLASS_KEY));
+    }
+
+    @Test
+    public void testNoQueuePrioritizer() {
+        Map<String, Object> map = createMap();
+        map.remove(ConnectionSchema.QUEUE_PRIORITIZER_CLASS_KEY);
+        ConnectionSchema schema = createSchema(map, 0);
+        assertEquals("", schema.getQueuePrioritizerClass());
+        assertEquals(schema.getQueuePrioritizerClass(), 
schema.toMap().get(ConnectionSchema.QUEUE_PRIORITIZER_CLASS_KEY));
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoaderTest.java
----------------------------------------------------------------------
diff --git 
a/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoaderTest.java
 
b/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoaderTest.java
index 8d64afa..c1b63d0 100644
--- 
a/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoaderTest.java
+++ 
b/minifi-commons/minifi-commons-schema/src/test/java/org/apache/nifi/minifi/commons/schema/serialization/SchemaLoaderTest.java
@@ -49,6 +49,14 @@ public class SchemaLoaderTest {
     @Test
     public void testMinimalConfigV1Version() throws IOException, 
SchemaLoaderException {
         Map<String, Object> yamlAsMap = 
SchemaLoader.loadYamlAsMap(SchemaLoaderTest.class.getClassLoader().getResourceAsStream("config-minimal.yml"));
+        yamlAsMap.put(ConfigSchema.VERSION, "1");
+        ConfigSchema configSchema = 
SchemaLoader.loadConfigSchemaFromYaml(yamlAsMap);
+        validateMinimalConfigVersion1Parse(configSchema);
+    }
+
+    @Test
+    public void testMinimalConfigV2Version() throws IOException, 
SchemaLoaderException {
+        Map<String, Object> yamlAsMap = 
SchemaLoader.loadYamlAsMap(SchemaLoaderTest.class.getClassLoader().getResourceAsStream("config-minimal.yml"));
         yamlAsMap.put(ConfigSchema.VERSION, ConfigSchema.CONFIG_VERSION);
         ConfigSchema configSchema = 
SchemaLoader.loadConfigSchemaFromYaml(yamlAsMap);
         validateMinimalConfigVersion1Parse(configSchema);

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-docs/src/main/markdown/System_Admin_Guide.md
----------------------------------------------------------------------
diff --git a/minifi-docs/src/main/markdown/System_Admin_Guide.md 
b/minifi-docs/src/main/markdown/System_Admin_Guide.md
index 5ee87e0..a27bde3 100644
--- a/minifi-docs/src/main/markdown/System_Admin_Guide.md
+++ b/minifi-docs/src/main/markdown/System_Admin_Guide.md
@@ -176,7 +176,7 @@ The first section of config.yml is for naming and 
commenting on the file.
 
  Property             | Description
 --------------------- | -----------
-MiNiFi Config Version | The version of the configuration file.  The default 
value if this property is missing or empty is 1 which is the only version (and 
correct value) currently.
+MiNiFi Config Version | The version of the configuration file.  The default 
value if this property is missing or empty is 1, the current value is 2.
 name                  | The name of the file.
 comment               | A comment describing the usage of this config file.
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaFunction.java
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaFunction.java
 
b/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaFunction.java
index 169d3d1..d3d71e6 100644
--- 
a/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaFunction.java
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaFunction.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 
 import static 
org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.CONNECTIONS_KEY;
 import static 
org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.ID_KEY;
@@ -40,9 +41,7 @@ public class ConnectionSchemaFunction implements 
Function<ConnectionDTO, Connect
         map.put(NAME_KEY, connectionDTO.getName());
         map.put(ConnectionSchema.SOURCE_ID_KEY, 
connectionDTO.getSource().getId());
         Set<String> selectedRelationships = 
BaseSchema.nullToEmpty(connectionDTO.getSelectedRelationships());
-        if (selectedRelationships.size() > 0) {
-            map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAME_KEY, 
selectedRelationships.iterator().next());
-        }
+        map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY, 
selectedRelationships.stream().sorted().collect(Collectors.toList()));
         map.put(ConnectionSchema.DESTINATION_ID_KEY, 
connectionDTO.getDestination().getId());
 
         map.put(ConnectionSchema.MAX_WORK_QUEUE_SIZE_KEY, 
connectionDTO.getBackPressureObjectThreshold());
@@ -56,9 +55,6 @@ public class ConnectionSchemaFunction implements 
Function<ConnectionDTO, Connect
         if 
(ConnectableType.FUNNEL.name().equals(connectionDTO.getSource().getType())) {
             connectionSchema.addValidationIssue("Connection " + 
connectionDTO.getName() + " has type " + ConnectableType.FUNNEL.name() + " 
which is not supported by MiNiFi");
         }
-        if (selectedRelationships.size() > 1) {
-            
connectionSchema.addValidationIssue(ConnectionSchema.SOURCE_RELATIONSHIP_NAME_KEY,
 CONNECTIONS_KEY, " has more than one selected relationship");
-        }
         if (queuePrioritizers.size() > 1) {
             
connectionSchema.addValidationIssue(ConnectionSchema.QUEUE_PRIORITIZER_CLASS_KEY,
 CONNECTIONS_KEY, " has more than one queue prioritizer");
         }

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMainTest.java
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMainTest.java
 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMainTest.java
index 3e21e76..5ca4933 100644
--- 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMainTest.java
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/ConfigMainTest.java
@@ -173,6 +173,11 @@ public class ConfigMainTest {
         transformRoundTrip("StressTestFramework");
     }
 
+    @Test
+    public void testTransformRoundTripMultipleRelationships() throws 
IOException, JAXBException, SchemaLoaderException {
+        transformRoundTrip("MultipleRelationships");
+    }
+
     @Test(expected = SchemaLoaderException.class)
     public void testFailToTransformProcessGroup() throws IOException, 
JAXBException, SchemaLoaderException {
         
ConfigMain.transformTemplateToSchema(getClass().getClassLoader().getResourceAsStream("TemplateWithProcessGroup.xml")).toMap();

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaTest.java
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaTest.java
 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaTest.java
index d8e8e48..b4efa76 100644
--- 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaTest.java
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ConnectionSchemaTest.java
@@ -25,9 +25,11 @@ import org.apache.nifi.web.api.dto.ConnectionDTO;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.stream.Collectors;
 
 import static org.junit.Assert.assertEquals;
@@ -70,7 +72,7 @@ public class ConnectionSchemaTest extends 
BaseSchemaTester<ConnectionSchema, Con
         map.put(CommonPropertyKeys.ID_KEY, testId);
         map.put(CommonPropertyKeys.NAME_KEY, testName);
         map.put(ConnectionSchema.SOURCE_ID_KEY, testSourceId);
-        map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAME_KEY, 
testSelectedRelationship);
+        map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY, new 
ArrayList<>(Arrays.asList(testSelectedRelationship)));
         map.put(ConnectionSchema.DESTINATION_ID_KEY, testDestinationId);
         map.put(ConnectionSchema.MAX_WORK_QUEUE_SIZE_KEY, 
testMaxWorkQueueSize);
         map.put(ConnectionSchema.MAX_WORK_QUEUE_DATA_SIZE_KEY, 
testMaxWorkQueueDataSize);
@@ -101,17 +103,19 @@ public class ConnectionSchemaTest extends 
BaseSchemaTester<ConnectionSchema, Con
 
     @Test
     public void testDtoMultipleSourceRelationships() {
-        dto.setSelectedRelationships(Arrays.asList("one", 
"two").stream().collect(Collectors.toSet()));
-        assertEquals(1, 
dtoSchemaFunction.apply(dto).getValidationIssues().size());
+        List<String> relationships = Arrays.asList("one", "two");
+        
dto.setSelectedRelationships(relationships.stream().collect(Collectors.toSet()));
+        map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY, new 
ArrayList<>(relationships));
+        assertDtoAndMapConstructorAreSame(0);
     }
 
     @Test
     public void testNoSelectedRelationshipName() {
         dto.setSelectedRelationships(null);
-        map.remove(ConnectionSchema.SOURCE_RELATIONSHIP_NAME_KEY);
+        map.remove(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY);
         assertDtoAndMapConstructorAreSame(1);
         dto.setSelectedRelationships(Collections.emptySet());
-        map.remove(ConnectionSchema.SOURCE_RELATIONSHIP_NAME_KEY);
+        map.put(ConnectionSchema.SOURCE_RELATIONSHIP_NAMES_KEY, new 
ArrayList<>());
         assertDtoAndMapConstructorAreSame(1);
     }
 
@@ -163,7 +167,7 @@ public class ConnectionSchemaTest extends 
BaseSchemaTester<ConnectionSchema, Con
         assertEquals(one.getName(), two.getName());
         assertEquals(one.getId(), two.getId());
         assertEquals(one.getSourceId(), two.getSourceId());
-        assertEquals(one.getSourceRelationshipName(), 
two.getSourceRelationshipName());
+        assertEquals(one.getSourceRelationshipNames(), 
two.getSourceRelationshipNames());
         assertEquals(one.getDestinationId(), two.getDestinationId());
         assertEquals(one.getMaxWorkQueueSize(), two.getMaxWorkQueueSize());
         assertEquals(one.getMaxWorkQueueDataSize(), 
two.getMaxWorkQueueDataSize());

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/CsvToJson.yml
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/CsvToJson.yml 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/CsvToJson.yml
index 48d2ad2..b4993e3 100644
--- 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/CsvToJson.yml
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/CsvToJson.yml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-MiNiFi Config Version: 1
+MiNiFi Config Version: 2
 Flow Controller:
   name: CsvToJsonWorking
   comment: ''
@@ -152,7 +152,8 @@ Connections:
 - name: ExtractText/matched/ReplaceText2
   id: 56ef3e2e-ee35-4598-9fbe-ae86050960b0
   source id: 5f0ec33c-0a07-4305-a3a9-9a3ba0548ac6
-  source relationship name: matched
+  source relationship names:
+  - matched
   destination id: 8db2ebc8-12c8-4396-89b6-479d907fbc6b
   max work queue size: 0
   max work queue data size: 0 MB
@@ -161,7 +162,8 @@ Connections:
 - name: GenerateFlowFile/success/ReplaceText
   id: 0cc34e0a-0ae9-44ba-838f-792ed393a301
   source id: ffb6d4e9-9d6c-4fbe-ab8a-52bad90ce2e5
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: cdcc2028-238b-42b7-bf95-dd4f301b91fc
   max work queue size: 0
   max work queue data size: 0 MB
@@ -170,7 +172,8 @@ Connections:
 - name: ReplaceText/success/ExtractText
   id: e32e19cb-6c4c-4c6c-a8db-408447ba2ca2
   source id: cdcc2028-238b-42b7-bf95-dd4f301b91fc
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 5f0ec33c-0a07-4305-a3a9-9a3ba0548ac6
   max work queue size: 0
   max work queue data size: 0 MB
@@ -179,7 +182,8 @@ Connections:
 - name: ReplaceText2/success/UpdateAttribute
   id: b061c170-19da-4e84-9709-327303fef579
   source id: 8db2ebc8-12c8-4396-89b6-479d907fbc6b
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 1d00089c-78cd-467f-9aa6-31e3bdf90cb0
   max work queue size: 0
   max work queue data size: 0 MB

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/DecompressionCircularFlow.yml
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/DecompressionCircularFlow.yml
 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/DecompressionCircularFlow.yml
index 86c7847..fdec427 100644
--- 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/DecompressionCircularFlow.yml
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/DecompressionCircularFlow.yml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-MiNiFi Config Version: 1
+MiNiFi Config Version: 2
 Flow Controller:
   name: DecompressionCircularFlow2
   comment: ''
@@ -191,7 +191,8 @@ Connections:
 - name: Compressed?/gzip/Uncompress GZIP
   id: 5de215d5-9f7e-414b-98aa-2edaa0514d99
   source id: 1377e3cc-db4e-4832-8a90-c8dc9e08f603
-  source relationship name: gzip
+  source relationship names:
+  - gzip
   destination id: 0bdda776-0c7e-4723-b3ce-969b7d10a922
   max work queue size: 0
   max work queue data size: 0 MB
@@ -200,7 +201,8 @@ Connections:
 - name: Compressed?/unmatched/LogAttribute
   id: a72e8727-9a5c-44dd-a4f5-cf94b3422c1a
   source id: 1377e3cc-db4e-4832-8a90-c8dc9e08f603
-  source relationship name: unmatched
+  source relationship names:
+  - unmatched
   destination id: 7209cf79-23ba-421c-b1c3-925ed86c302d
   max work queue size: 0
   max work queue data size: 0 MB
@@ -209,7 +211,8 @@ Connections:
 - name: GZIP CompressContent/failure/GZIP CompressContent
   id: 4f98618d-2443-465d-9856-bbf7c1ee49e1
   source id: 9e28dd28-8116-4199-aeab-bc7a1002aec5
-  source relationship name: failure
+  source relationship names:
+  - failure
   destination id: 9e28dd28-8116-4199-aeab-bc7a1002aec5
   max work queue size: 0
   max work queue data size: 0 MB
@@ -218,7 +221,8 @@ Connections:
 - name: GZIP CompressContent/success/GZIP CompressContent2
   id: 5cdc2e79-ec8c-4f7d-a3ab-d284c80e3afe
   source id: 9e28dd28-8116-4199-aeab-bc7a1002aec5
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: e227167f-62af-49cc-8fb5-a5b5e5251066
   max work queue size: 0
   max work queue data size: 0 MB
@@ -227,7 +231,8 @@ Connections:
 - name: GZIP CompressContent2/failure/GZIP CompressContent2
   id: f6ff74cf-a30b-4916-86b3-e269266666ff
   source id: e227167f-62af-49cc-8fb5-a5b5e5251066
-  source relationship name: failure
+  source relationship names:
+  - failure
   destination id: e227167f-62af-49cc-8fb5-a5b5e5251066
   max work queue size: 0
   max work queue data size: 0 MB
@@ -236,7 +241,8 @@ Connections:
 - name: GZIP CompressContent2/success/GZIP CompressContent3
   id: ac822b4f-7d0d-462a-8ac0-03e9032ebefb
   source id: e227167f-62af-49cc-8fb5-a5b5e5251066
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: defa6d98-3e98-41dd-82ac-1bdfd39eacfc
   max work queue size: 0
   max work queue data size: 0 MB
@@ -245,7 +251,8 @@ Connections:
 - name: GZIP CompressContent3/failure/GZIP CompressContent3
   id: bdfdb568-682d-4d3b-b87b-99199c15505c
   source id: defa6d98-3e98-41dd-82ac-1bdfd39eacfc
-  source relationship name: failure
+  source relationship names:
+  - failure
   destination id: defa6d98-3e98-41dd-82ac-1bdfd39eacfc
   max work queue size: 0
   max work queue data size: 0 MB
@@ -254,7 +261,8 @@ Connections:
 - name: GZIP CompressContent3/success/GZIP CompressContent4
   id: 645ec08f-3d6d-4255-b4d9-0f6d61708974
   source id: defa6d98-3e98-41dd-82ac-1bdfd39eacfc
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 9d33bbc9-2f51-43c8-aa8a-94dcc367b371
   max work queue size: 0
   max work queue data size: 0 MB
@@ -263,7 +271,8 @@ Connections:
 - name: GZIP CompressContent4/failure/GZIP CompressContent4
   id: 42bd2967-d74a-4e22-9b16-9e0a51024658
   source id: 9d33bbc9-2f51-43c8-aa8a-94dcc367b371
-  source relationship name: failure
+  source relationship names:
+  - failure
   destination id: 9d33bbc9-2f51-43c8-aa8a-94dcc367b371
   max work queue size: 0
   max work queue data size: 0 MB
@@ -272,7 +281,8 @@ Connections:
 - name: GZIP CompressContent4/success/Uncompress GZIP
   id: 6eeca4aa-04c7-4774-aee5-bb6340c3a7b6
   source id: 9d33bbc9-2f51-43c8-aa8a-94dcc367b371
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 0bdda776-0c7e-4723-b3ce-969b7d10a922
   max work queue size: 0
   max work queue data size: 0 MB
@@ -281,7 +291,8 @@ Connections:
 - name: GenerateFlowFile/success/GZIP CompressContent
   id: 299f7d1f-e216-43a3-ad0b-7a6d6680dacc
   source id: ad8ff6a3-ba60-4b9b-af9e-0773c8afc1c9
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 9e28dd28-8116-4199-aeab-bc7a1002aec5
   max work queue size: 0
   max work queue data size: 0 MB
@@ -290,7 +301,8 @@ Connections:
 - name: IdentifyMimeType/success/Compressed?
   id: ded9891b-4433-4f56-9fc0-1a240146835f
   source id: 212097d4-2ea8-497b-b574-b1354fae40f2
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 1377e3cc-db4e-4832-8a90-c8dc9e08f603
   max work queue size: 0
   max work queue data size: 0 MB
@@ -299,7 +311,8 @@ Connections:
 - name: Uncompress GZIP/failure/Uncompress GZIP
   id: 37f15fde-d463-41b1-9fe7-28c72cd6c871
   source id: 0bdda776-0c7e-4723-b3ce-969b7d10a922
-  source relationship name: failure
+  source relationship names:
+  - failure
   destination id: 0bdda776-0c7e-4723-b3ce-969b7d10a922
   max work queue size: 0
   max work queue data size: 0 MB
@@ -308,7 +321,8 @@ Connections:
 - name: Uncompress GZIP/success/IdentifyMimeType
   id: bb250fb4-0b15-418f-83f9-83a43bd3de9c
   source id: 0bdda776-0c7e-4723-b3ce-969b7d10a922
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 212097d4-2ea8-497b-b574-b1354fae40f2
   max work queue size: 0
   max work queue data size: 0 MB

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/InvokeHttpMiNiFiTemplateTest.yml
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/InvokeHttpMiNiFiTemplateTest.yml
 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/InvokeHttpMiNiFiTemplateTest.yml
index 90ed378..dcd75be 100644
--- 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/InvokeHttpMiNiFiTemplateTest.yml
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/InvokeHttpMiNiFiTemplateTest.yml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-MiNiFi Config Version: 1
+MiNiFi Config Version: 2
 Flow Controller:
   name: InvokeHttpMiNiFiTemplateTest2
   comment: ''
@@ -170,7 +170,8 @@ Connections:
 - name: Route On Status Code/200/LogAttribute
   id: 3039718a-bb40-4811-9b74-ecbe926daae8
   source id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
-  source relationship name: '200'
+  source relationship names:
+  - '200'
   destination id: 0a73c5e4-7216-4cdf-9008-ace353478d55
   max work queue size: 0
   max work queue data size: 0 MB
@@ -179,7 +180,8 @@ Connections:
 - name: Route On Status Code/200/b23a4621-cf19-42e6-967c-ffd3716e6a24
   id: 4a7bdaf1-eba0-4317-92f2-93cef6240c28
   source id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
-  source relationship name: '200'
+  source relationship names:
+  - '200'
   destination id: b23a4621-cf19-42e6-967c-ffd3716e6a24
   max work queue size: 10000
   max work queue data size: 1 GB
@@ -188,7 +190,8 @@ Connections:
 - name: Route On Status Code/unmatched/LogAttribute2
   id: 9f948a25-afb4-4598-9a01-cfb7e3aa5920
   source id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
-  source relationship name: unmatched
+  source relationship names:
+  - unmatched
   destination id: 0bda7282-7a4f-4d39-83e5-ea86aa63f1dc
   max work queue size: 10000
   max work queue data size: 1 GB
@@ -197,7 +200,8 @@ Connections:
 - name: Route On Status Code/unmatched/b23a4621-cf19-42e6-967c-ffd3716e6a24
   id: 7299c143-46f6-4a94-aa24-ec47db16f73e
   source id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
-  source relationship name: unmatched
+  source relationship names:
+  - unmatched
   destination id: b23a4621-cf19-42e6-967c-ffd3716e6a24
   max work queue size: 10000
   max work queue data size: 1 GB
@@ -206,7 +210,8 @@ Connections:
 - name: Search Google/Failure/Route On Status Code
   id: 451b153a-8a4e-4bed-99ab-5159e499bcf1
   source id: 66649998-3b08-4b41-9f07-a51d999743f6
-  source relationship name: Failure
+  source relationship names:
+  - Failure
   destination id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
   max work queue size: 10000
   max work queue data size: 1 GB
@@ -215,7 +220,8 @@ Connections:
 - name: Search Google/No Retry/Route On Status Code
   id: ddbc1711-8cda-4418-b6ee-895763ef1a97
   source id: 66649998-3b08-4b41-9f07-a51d999743f6
-  source relationship name: No Retry
+  source relationship names:
+  - No Retry
   destination id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
   max work queue size: 10000
   max work queue data size: 1 GB
@@ -224,7 +230,8 @@ Connections:
 - name: Search Google/Original/Route On Status Code
   id: b97044aa-3401-49df-86ab-bc440cd8f6c8
   source id: 66649998-3b08-4b41-9f07-a51d999743f6
-  source relationship name: Original
+  source relationship names:
+  - Original
   destination id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
   max work queue size: 10000
   max work queue data size: 1 GB
@@ -233,7 +240,8 @@ Connections:
 - name: Search Google/Response/Route On Status Code
   id: c6a06d31-51fb-488f-bcde-495102f8c93f
   source id: 66649998-3b08-4b41-9f07-a51d999743f6
-  source relationship name: Response
+  source relationship names:
+  - Response
   destination id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
   max work queue size: 10000
   max work queue data size: 1 GB
@@ -242,7 +250,8 @@ Connections:
 - name: Search Google/Retry/Route On Status Code
   id: 3172a4b6-c35b-4d2f-a7c1-68eb16cc1b37
   source id: 66649998-3b08-4b41-9f07-a51d999743f6
-  source relationship name: Retry
+  source relationship names:
+  - Retry
   destination id: dcff217a-a25c-424f-b9f1-d82c55bfa61b
   max work queue size: 10000
   max work queue data size: 1 GB
@@ -251,7 +260,8 @@ Connections:
 - name: Source/success/q=nifi
   id: 2ef71cd8-eb24-4653-8526-34ab84e79328
   source id: fcb378d7-6438-41d3-8485-7da85e870ca4
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 6638cd15-0aaf-4bba-a18a-722cf85038b6
   max work queue size: 0
   max work queue data size: 0 MB
@@ -260,7 +270,8 @@ Connections:
 - name: q=nifi/success/Search Google
   id: ee5ee5bf-a552-43cf-9514-c14d40350bff
   source id: 6638cd15-0aaf-4bba-a18a-722cf85038b6
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 66649998-3b08-4b41-9f07-a51d999743f6
   max work queue size: 0
   max work queue data size: 0 MB

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/MultipleRelationships.xml
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/MultipleRelationships.xml
 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/MultipleRelationships.xml
new file mode 100644
index 0000000..13c60dd
--- /dev/null
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/MultipleRelationships.xml
@@ -0,0 +1,339 @@
+<?xml version="1.0" ?>
+<!--
+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.
+ -->
+<template encoding-version="1.0">
+  <description></description>
+  <groupId>7c73bce2-0157-1000-1ea7-07d5d9c57c74</groupId>
+  <name>MultipleRelationships</name>
+  <snippet>
+    <connections>
+      <id>7c798ca3-0157-1000-0000-000000000000</id>
+      <parentGroupId>7c73bce2-0157-1000-0000-000000000000</parentGroupId>
+      <backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
+      <backPressureObjectThreshold>10000</backPressureObjectThreshold>
+      <destination>
+        <groupId>7c73bce2-0157-1000-0000-000000000000</groupId>
+        <id>7c75ab71-0157-1000-0000-000000000000</id>
+        <type>PROCESSOR</type>
+      </destination>
+      <flowFileExpiration>0 sec</flowFileExpiration>
+      <labelIndex>1</labelIndex>
+      <name></name>
+      <selectedRelationships>abc</selectedRelationships>
+      <selectedRelationships>unmatched</selectedRelationships>
+      <source>
+        <groupId>7c73bce2-0157-1000-0000-000000000000</groupId>
+        <id>7c768622-0157-1000-0000-000000000000</id>
+        <type>PROCESSOR</type>
+      </source>
+      <zIndex>0</zIndex>
+    </connections>
+    <connections>
+      <id>7c79cce3-0157-1000-0000-000000000000</id>
+      <parentGroupId>7c73bce2-0157-1000-0000-000000000000</parentGroupId>
+      <backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
+      <backPressureObjectThreshold>10000</backPressureObjectThreshold>
+      <destination>
+        <groupId>7c73bce2-0157-1000-0000-000000000000</groupId>
+        <id>7c79ba25-0157-1000-0000-000000000000</id>
+        <type>PROCESSOR</type>
+      </destination>
+      <flowFileExpiration>0 sec</flowFileExpiration>
+      <labelIndex>1</labelIndex>
+      <name></name>
+      <selectedRelationships>success</selectedRelationships>
+      <source>
+        <groupId>7c73bce2-0157-1000-0000-000000000000</groupId>
+        <id>7c755ed6-0157-1000-0000-000000000000</id>
+        <type>PROCESSOR</type>
+      </source>
+      <zIndex>0</zIndex>
+    </connections>
+    <connections>
+      <id>7c79d576-0157-1000-0000-000000000000</id>
+      <parentGroupId>7c73bce2-0157-1000-0000-000000000000</parentGroupId>
+      <backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
+      <backPressureObjectThreshold>10000</backPressureObjectThreshold>
+      <destination>
+        <groupId>7c73bce2-0157-1000-0000-000000000000</groupId>
+        <id>7c768622-0157-1000-0000-000000000000</id>
+        <type>PROCESSOR</type>
+      </destination>
+      <flowFileExpiration>0 sec</flowFileExpiration>
+      <labelIndex>1</labelIndex>
+      <name></name>
+      <selectedRelationships>success</selectedRelationships>
+      <source>
+        <groupId>7c73bce2-0157-1000-0000-000000000000</groupId>
+        <id>7c79ba25-0157-1000-0000-000000000000</id>
+        <type>PROCESSOR</type>
+      </source>
+      <zIndex>0</zIndex>
+    </connections>
+    <processors>
+      <id>7c755ed6-0157-1000-0000-000000000000</id>
+      <parentGroupId>7c73bce2-0157-1000-0000-000000000000</parentGroupId>
+      <position>
+        <x>0.0</x>
+        <y>0.0</y>
+      </position>
+      <config>
+        <bulletinLevel>WARN</bulletinLevel>
+        <comments></comments>
+        <concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
+        <descriptors>
+          <entry>
+            <key>File Size</key>
+            <value>
+              <name>File Size</name>
+            </value>
+          </entry>
+          <entry>
+            <key>Batch Size</key>
+            <value>
+              <name>Batch Size</name>
+            </value>
+          </entry>
+          <entry>
+            <key>Data Format</key>
+            <value>
+              <name>Data Format</name>
+            </value>
+          </entry>
+          <entry>
+            <key>Unique FlowFiles</key>
+            <value>
+              <name>Unique FlowFiles</name>
+            </value>
+          </entry>
+        </descriptors>
+        <lossTolerant>false</lossTolerant>
+        <penaltyDuration>30 sec</penaltyDuration>
+        <properties>
+          <entry>
+            <key>File Size</key>
+            <value>0 B</value>
+          </entry>
+          <entry>
+            <key>Batch Size</key>
+            <value>1</value>
+          </entry>
+          <entry>
+            <key>Data Format</key>
+            <value>Binary</value>
+          </entry>
+          <entry>
+            <key>Unique FlowFiles</key>
+            <value>false</value>
+          </entry>
+        </properties>
+        <runDurationMillis>0</runDurationMillis>
+        <schedulingPeriod>0 sec</schedulingPeriod>
+        <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
+        <yieldDuration>1 sec</yieldDuration>
+      </config>
+      <name>GenerateFlowFile</name>
+      <relationships>
+        <autoTerminate>false</autoTerminate>
+        <name>success</name>
+      </relationships>
+      <style></style>
+      <type>org.apache.nifi.processors.standard.GenerateFlowFile</type>
+    </processors>
+    <processors>
+      <id>7c75ab71-0157-1000-0000-000000000000</id>
+      <parentGroupId>7c73bce2-0157-1000-0000-000000000000</parentGroupId>
+      <position>
+        <x>3.10443115234375</x>
+        <y>580.1210327148438</y>
+      </position>
+      <config>
+        <bulletinLevel>WARN</bulletinLevel>
+        <comments></comments>
+        <concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
+        <descriptors>
+          <entry>
+            <key>Log Level</key>
+            <value>
+              <name>Log Level</name>
+            </value>
+          </entry>
+          <entry>
+            <key>Log Payload</key>
+            <value>
+              <name>Log Payload</name>
+            </value>
+          </entry>
+          <entry>
+            <key>Attributes to Log</key>
+            <value>
+              <name>Attributes to Log</name>
+            </value>
+          </entry>
+          <entry>
+            <key>Attributes to Ignore</key>
+            <value>
+              <name>Attributes to Ignore</name>
+            </value>
+          </entry>
+          <entry>
+            <key>Log prefix</key>
+            <value>
+              <name>Log prefix</name>
+            </value>
+          </entry>
+        </descriptors>
+        <lossTolerant>false</lossTolerant>
+        <penaltyDuration>30 sec</penaltyDuration>
+        <properties>
+          <entry>
+            <key>Log Level</key>
+            <value>info</value>
+          </entry>
+          <entry>
+            <key>Log Payload</key>
+            <value>false</value>
+          </entry>
+          <entry>
+            <key>Attributes to Log</key>
+          </entry>
+          <entry>
+            <key>Attributes to Ignore</key>
+          </entry>
+          <entry>
+            <key>Log prefix</key>
+          </entry>
+        </properties>
+        <runDurationMillis>0</runDurationMillis>
+        <schedulingPeriod>0 sec</schedulingPeriod>
+        <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
+        <yieldDuration>1 sec</yieldDuration>
+      </config>
+      <name>LogAttribute</name>
+      <relationships>
+        <autoTerminate>true</autoTerminate>
+        <name>success</name>
+      </relationships>
+      <style></style>
+      <type>org.apache.nifi.processors.standard.LogAttribute</type>
+    </processors>
+    <processors>
+      <id>7c768622-0157-1000-0000-000000000000</id>
+      <parentGroupId>7c73bce2-0157-1000-0000-000000000000</parentGroupId>
+      <position>
+        <x>3.89630126953125</x>
+        <y>386.68919372558594</y>
+      </position>
+      <config>
+        <bulletinLevel>WARN</bulletinLevel>
+        <comments></comments>
+        <concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
+        <descriptors>
+          <entry>
+            <key>Routing Strategy</key>
+            <value>
+              <name>Routing Strategy</name>
+            </value>
+          </entry>
+          <entry>
+            <key>abc</key>
+            <value>
+              <name>abc</name>
+            </value>
+          </entry>
+        </descriptors>
+        <lossTolerant>false</lossTolerant>
+        <penaltyDuration>30 sec</penaltyDuration>
+        <properties>
+          <entry>
+            <key>Routing Strategy</key>
+            <value>Route to Property name</value>
+          </entry>
+          <entry>
+            <key>abc</key>
+            <value>${filename:equals('abc')}</value>
+          </entry>
+        </properties>
+        <runDurationMillis>0</runDurationMillis>
+        <schedulingPeriod>0 sec</schedulingPeriod>
+        <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
+        <yieldDuration>1 sec</yieldDuration>
+      </config>
+      <name>RouteOnAttribute</name>
+      <relationships>
+        <autoTerminate>false</autoTerminate>
+        <name>abc</name>
+      </relationships>
+      <relationships>
+        <autoTerminate>false</autoTerminate>
+        <name>unmatched</name>
+      </relationships>
+      <style></style>
+      <type>org.apache.nifi.processors.standard.RouteOnAttribute</type>
+    </processors>
+    <processors>
+      <id>7c79ba25-0157-1000-0000-000000000000</id>
+      <parentGroupId>7c73bce2-0157-1000-0000-000000000000</parentGroupId>
+      <position>
+        <x>15.0</x>
+        <y>199.0</y>
+      </position>
+      <config>
+        <bulletinLevel>WARN</bulletinLevel>
+        <comments></comments>
+        <concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
+        <descriptors>
+          <entry>
+            <key>Delete Attributes Expression</key>
+            <value>
+              <name>Delete Attributes Expression</name>
+            </value>
+          </entry>
+          <entry>
+            <key>filename</key>
+            <value>
+              <name>filename</name>
+            </value>
+          </entry>
+        </descriptors>
+        <lossTolerant>false</lossTolerant>
+        <penaltyDuration>30 sec</penaltyDuration>
+        <properties>
+          <entry>
+            <key>Delete Attributes Expression</key>
+          </entry>
+          <entry>
+            <key>filename</key>
+            <value>abc</value>
+          </entry>
+        </properties>
+        <runDurationMillis>0</runDurationMillis>
+        <schedulingPeriod>0 sec</schedulingPeriod>
+        <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
+        <yieldDuration>1 sec</yieldDuration>
+      </config>
+      <name>UpdateAttribute</name>
+      <relationships>
+        <autoTerminate>false</autoTerminate>
+        <name>success</name>
+      </relationships>
+      <style></style>
+      <type>org.apache.nifi.processors.attributes.UpdateAttribute</type>
+    </processors>
+  </snippet>
+  <timestamp>09/30/2016 15:03:09 EDT</timestamp>
+</template>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/MultipleRelationships.yml
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/MultipleRelationships.yml
 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/MultipleRelationships.yml
new file mode 100644
index 0000000..2850e67
--- /dev/null
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/MultipleRelationships.yml
@@ -0,0 +1,149 @@
+# 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.
+
+MiNiFi Config Version: 2
+Flow Controller:
+  name: MultipleRelationships
+  comment: ''
+Core Properties:
+  flow controller graceful shutdown period: 10 sec
+  flow service write delay interval: 500 ms
+  administrative yield duration: 30 sec
+  bored yield duration: 10 millis
+  max concurrent threads: 1
+FlowFile Repository:
+  partitions: 256
+  checkpoint interval: 2 mins
+  always sync: false
+  Swap:
+    threshold: 20000
+    in period: 5 sec
+    in threads: 1
+    out period: 5 sec
+    out threads: 4
+Content Repository:
+  content claim max appendable size: 10 MB
+  content claim max flow files: 100
+  always sync: false
+Provenance Repository:
+  provenance rollover time: 1 min
+Component Status Repository:
+  buffer size: 1440
+  snapshot frequency: 1 min
+Security Properties:
+  keystore: ''
+  keystore type: ''
+  keystore password: ''
+  key password: ''
+  truststore: ''
+  truststore type: ''
+  truststore password: ''
+  ssl protocol: ''
+  Sensitive Props:
+    key:
+    algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+    provider: BC
+Processors:
+- name: GenerateFlowFile
+  id: 7c755ed6-0157-1000-0000-000000000000
+  class: org.apache.nifi.processors.standard.GenerateFlowFile
+  max concurrent tasks: 1
+  scheduling strategy: TIMER_DRIVEN
+  scheduling period: 0 sec
+  penalization period: 30 sec
+  yield period: 1 sec
+  run duration nanos: 0
+  auto-terminated relationships list: []
+  Properties:
+    Batch Size: '1'
+    Data Format: Binary
+    File Size: 0 B
+    Unique FlowFiles: 'false'
+- name: LogAttribute
+  id: 7c75ab71-0157-1000-0000-000000000000
+  class: org.apache.nifi.processors.standard.LogAttribute
+  max concurrent tasks: 1
+  scheduling strategy: TIMER_DRIVEN
+  scheduling period: 0 sec
+  penalization period: 30 sec
+  yield period: 1 sec
+  run duration nanos: 0
+  auto-terminated relationships list:
+  - success
+  Properties:
+    Attributes to Ignore:
+    Attributes to Log:
+    Log Level: info
+    Log Payload: 'false'
+    Log prefix:
+- name: RouteOnAttribute
+  id: 7c768622-0157-1000-0000-000000000000
+  class: org.apache.nifi.processors.standard.RouteOnAttribute
+  max concurrent tasks: 1
+  scheduling strategy: TIMER_DRIVEN
+  scheduling period: 0 sec
+  penalization period: 30 sec
+  yield period: 1 sec
+  run duration nanos: 0
+  auto-terminated relationships list: []
+  Properties:
+    Routing Strategy: Route to Property name
+    abc: ${filename:equals('abc')}
+- name: UpdateAttribute
+  id: 7c79ba25-0157-1000-0000-000000000000
+  class: org.apache.nifi.processors.attributes.UpdateAttribute
+  max concurrent tasks: 1
+  scheduling strategy: TIMER_DRIVEN
+  scheduling period: 0 sec
+  penalization period: 30 sec
+  yield period: 1 sec
+  run duration nanos: 0
+  auto-terminated relationships list: []
+  Properties:
+    Delete Attributes Expression:
+    filename: abc
+Connections:
+- name: GenerateFlowFile/success/UpdateAttribute
+  id: 7c79cce3-0157-1000-0000-000000000000
+  source id: 7c755ed6-0157-1000-0000-000000000000
+  source relationship names:
+  - success
+  destination id: 7c79ba25-0157-1000-0000-000000000000
+  max work queue size: 10000
+  max work queue data size: 1 GB
+  flowfile expiration: 0 sec
+  queue prioritizer class: ''
+- name: RouteOnAttribute/abc/LogAttribute
+  id: 7c798ca3-0157-1000-0000-000000000000
+  source id: 7c768622-0157-1000-0000-000000000000
+  source relationship names:
+  - abc
+  - unmatched
+  destination id: 7c75ab71-0157-1000-0000-000000000000
+  max work queue size: 10000
+  max work queue data size: 1 GB
+  flowfile expiration: 0 sec
+  queue prioritizer class: ''
+- name: UpdateAttribute/success/RouteOnAttribute
+  id: 7c79d576-0157-1000-0000-000000000000
+  source id: 7c79ba25-0157-1000-0000-000000000000
+  source relationship names:
+  - success
+  destination id: 7c768622-0157-1000-0000-000000000000
+  max work queue size: 10000
+  max work queue data size: 1 GB
+  flowfile expiration: 0 sec
+  queue prioritizer class: ''
+Remote Processing Groups: []

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/ReplaceTextExpressionLanguageCSVReformatting.yml
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/ReplaceTextExpressionLanguageCSVReformatting.yml
 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/ReplaceTextExpressionLanguageCSVReformatting.yml
index 93a6281..d740cf2 100644
--- 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/ReplaceTextExpressionLanguageCSVReformatting.yml
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/ReplaceTextExpressionLanguageCSVReformatting.yml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-MiNiFi Config Version: 1
+MiNiFi Config Version: 2
 Flow Controller:
   name: ReplaceTextExpressionLanguageCSVReformatting
   comment: ''
@@ -127,7 +127,8 @@ Connections:
 - name: Generate Empty File/success/Set CSV Content
   id: ca71a875-0ff5-41ef-bbe0-da5de0ca1e08
   source id: e626f756-f018-4670-8802-c8f8e459e15d
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 7ba79381-4317-4c99-bcc0-256ee7ad44e9
   max work queue size: 0
   max work queue data size: 0 MB
@@ -136,7 +137,8 @@ Connections:
 - name: Reformat Date Column/success/No-Op Termination
   id: 7fe8e5c6-6d9b-4b8f-af89-5d543bcc0199
   source id: a25f67cb-029c-466f-b040-9339ba64a4b5
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: bfa4fb38-096b-455d-a10f-2a1ed044bd49
   max work queue size: 0
   max work queue data size: 0 MB
@@ -145,7 +147,8 @@ Connections:
 - name: Set CSV Content/success/Reformat Date Column
   id: 1b327d4e-918f-43bc-97cf-043efed7ffbc
   source id: 7ba79381-4317-4c99-bcc0-256ee7ad44e9
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: a25f67cb-029c-466f-b040-9339ba64a4b5
   max work queue size: 0
   max work queue data size: 0 MB

http://git-wip-us.apache.org/repos/asf/nifi-minifi/blob/d987f0bd/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/StressTestFramework.yml
----------------------------------------------------------------------
diff --git 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/StressTestFramework.yml
 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/StressTestFramework.yml
index a9796bc..be3d200 100644
--- 
a/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/StressTestFramework.yml
+++ 
b/minifi-toolkit/minifi-toolkit-configuration/src/test/resources/StressTestFramework.yml
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-MiNiFi Config Version: 1
+MiNiFi Config Version: 2
 Flow Controller:
   name: StressTestFramework
   comment: ''
@@ -102,7 +102,8 @@ Connections:
 - name: GenerateFlowFile/success/UpdateAttribute
   id: 0e6873cc-cb9d-4e98-92aa-a3319f4c1b02
   source id: 16a47794-5391-4ad2-8d7b-be7ef83b8fee
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 92557c76-f251-45a4-96a4-79057b24e832
   max work queue size: 200
   max work queue data size: 0 MB
@@ -111,7 +112,8 @@ Connections:
 - name: UpdateAttribute/success/RouteOnAttribute
   id: 4c53556e-eb46-458c-9e98-8329a8cf70fd
   source id: 92557c76-f251-45a4-96a4-79057b24e832
-  source relationship name: success
+  source relationship names:
+  - success
   destination id: 397a4910-cc01-4c6b-88c9-e99b17b094e8
   max work queue size: 2000
   max work queue data size: 0 MB

Reply via email to