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