From 1bafa4fcbf5ef198880536f2563f45ca0e0b11d8 Mon Sep 17 00:00:00 2001 From: Joseph Percivall Date: Wed, 21 Sep 2016 16:32:35 -0400 Subject: [PATCH] MINIFI-82 Adding support for Processor 'Annotation Data' --- .../bootstrap/util/ConfigTransformer.java | 5 +++ .../commons/schema/ProcessorSchema.java | 15 +++++++ .../src/main/markdown/System_Admin_Guide.md | 1 + .../dto/ProcessorSchemaFunction.java | 5 +++ .../dto/ProcessorSchemaTest.java | 39 +++++++++++++++++++ 5 files changed, 65 insertions(+) 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 00e5ab871..ff16703be 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 @@ -392,6 +392,11 @@ protected static void addProcessor(final Element parentElement, ProcessorSchema addTextElement(element, "schedulingStrategy", processorConfig.getSchedulingStrategy()); addTextElement(element, "runDurationNanos", String.valueOf(processorConfig.getRunDurationNanos())); + String annotationData = processorConfig.getAnnotationData(); + if(annotationData != null && !annotationData.isEmpty()) { + addTextElement(element, "annotationData", annotationData); + } + addConfiguration(element, processorConfig.getProperties()); Collection autoTerminatedRelationships = processorConfig.getAutoTerminatedRelationshipsList(); diff --git a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ProcessorSchema.java b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ProcessorSchema.java index 471762a9c..e2bde4786 100644 --- a/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ProcessorSchema.java +++ b/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/ProcessorSchema.java @@ -37,6 +37,8 @@ public class ProcessorSchema extends BaseSchemaWithIdAndName { public static final String RUN_DURATION_NANOS_KEY = "run duration nanos"; public static final String AUTO_TERMINATED_RELATIONSHIPS_LIST_KEY = "auto-terminated relationships list"; public static final String PROCESSOR_PROPS_KEY = "Properties"; + public static final String ANNOTATION_DATA_KEY = "annotation data"; + public static final int DEFAULT_MAX_CONCURRENT_TASKS = 1; public static final String DEFAULT_PENALIZATION_PERIOD = "30 sec"; public static final String DEFAULT_YIELD_DURATION = "1 sec"; @@ -54,6 +56,7 @@ public class ProcessorSchema extends BaseSchemaWithIdAndName { private Number runDurationNanos = DEFAULT_RUN_DURATION_NANOS; private List autoTerminatedRelationshipsList = DEFAULT_AUTO_TERMINATED_RELATIONSHIPS_LIST; private Map properties = DEFAULT_PROPERTIES; + private String annotationData = ""; public ProcessorSchema(Map map) { super(map, PROCESSORS_KEY); @@ -70,6 +73,8 @@ public ProcessorSchema(Map map) { runDurationNanos = getOptionalKeyAsType(map, RUN_DURATION_NANOS_KEY, Number.class, PROCESSORS_KEY, DEFAULT_RUN_DURATION_NANOS); autoTerminatedRelationshipsList = getOptionalKeyAsType(map, AUTO_TERMINATED_RELATIONSHIPS_LIST_KEY, List.class, PROCESSORS_KEY, DEFAULT_AUTO_TERMINATED_RELATIONSHIPS_LIST); properties = getOptionalKeyAsType(map, PROCESSOR_PROPS_KEY, Map.class, PROCESSORS_KEY, DEFAULT_PROPERTIES); + + annotationData = getOptionalKeyAsType(map, ANNOTATION_DATA_KEY, String.class, PROCESSORS_KEY, ""); } private static boolean isSchedulingStrategy(String string) { @@ -93,6 +98,11 @@ public Map toMap() { result.put(RUN_DURATION_NANOS_KEY, runDurationNanos); result.put(AUTO_TERMINATED_RELATIONSHIPS_LIST_KEY, autoTerminatedRelationshipsList); result.put(PROCESSOR_PROPS_KEY, new TreeMap<>(properties)); + + if(annotationData != null && !annotationData.isEmpty()) { + result.put(ANNOTATION_DATA_KEY, annotationData); + } + return result; } @@ -131,4 +141,9 @@ public List getAutoTerminatedRelationshipsList() { public Map getProperties() { return properties; } + + public String getAnnotationData() { + return annotationData; + } + } diff --git a/minifi-docs/src/main/markdown/System_Admin_Guide.md b/minifi-docs/src/main/markdown/System_Admin_Guide.md index f0e8e9e97..7e60dd409 100644 --- a/minifi-docs/src/main/markdown/System_Admin_Guide.md +++ b/minifi-docs/src/main/markdown/System_Admin_Guide.md @@ -299,6 +299,7 @@ penalization period | Specifies how long FlowFiles will be penal yield period | In the event the processor cannot make progress it should `yield` which will prevent the processor from being scheduled to run for some period of time. That period of time is specific using this property. run duration nanos | If the processor supports batching this property can be used to control how long the Processor should be scheduled to run each time that it is triggered. Smaller values will have lower latency but larger values will have higher throughput. This period should typically only be set between 0 and 2000000000 (2 seconds). auto-terminated relationships list | A YAML list of the relationships to auto-terminate for the processor. +annotation data | Some processors make use of "Annotation Data" in order to do more complex configuration, such as the Advanced portion of UpdateAttribute. This data will be unique to each implementing processor and more than likely will not be written out manually. #### Processor Properties diff --git a/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ProcessorSchemaFunction.java b/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ProcessorSchemaFunction.java index dde36bc43..21b3345f8 100644 --- a/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ProcessorSchemaFunction.java +++ b/minifi-toolkit/minifi-toolkit-configuration/src/main/java/org/apache/nifi/minifi/toolkit/configuration/dto/ProcessorSchemaFunction.java @@ -59,6 +59,11 @@ public ProcessorSchema apply(ProcessorDTO processorDTO) { .collect(Collectors.toList())); map.put(ProcessorSchema.PROCESSOR_PROPS_KEY, new HashMap<>(BaseSchema.nullToEmpty(processorDTOConfig.getProperties()))); + String annotationData = processorDTOConfig.getAnnotationData(); + if(annotationData != null && !annotationData.isEmpty()) { + map.put(ProcessorSchema.ANNOTATION_DATA_KEY, annotationData); + } + return new ProcessorSchema(map); } } diff --git a/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ProcessorSchemaTest.java b/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ProcessorSchemaTest.java index bf072d248..d7458f631 100644 --- a/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ProcessorSchemaTest.java +++ b/minifi-toolkit/minifi-toolkit-configuration/src/test/java/org/apache/nifi/minifi/toolkit/configuration/dto/ProcessorSchemaTest.java @@ -45,6 +45,35 @@ public class ProcessorSchemaTest extends BaseSchemaTester properties = new HashMap<>(); properties.put(testKey, testValue); @@ -87,6 +117,7 @@ public void setup() { map.put(ProcessorSchema.RUN_DURATION_NANOS_KEY, testRunDurationNanos); map.put(ProcessorSchema.AUTO_TERMINATED_RELATIONSHIPS_LIST_KEY, Arrays.asList(testRelationship)); map.put(ProcessorSchema.PROCESSOR_PROPS_KEY, new HashMap<>(properties)); + map.put(ProcessorSchema.ANNOTATION_DATA_KEY, testAnnotationData); } @Test @@ -174,6 +205,13 @@ public void testNoProperties() { assertDtoAndMapConstructorAreSame(0); } + @Test + public void testNoAnnotationData() { + config.setAnnotationData(null); + map.remove(ProcessorSchema.ANNOTATION_DATA_KEY); + assertDtoAndMapConstructorAreSame(0); + } + @Override public void assertSchemaEquals(ProcessorSchema one, ProcessorSchema two) { assertEquals(one.getName(), two.getName()); @@ -186,5 +224,6 @@ public void assertSchemaEquals(ProcessorSchema one, ProcessorSchema two) { assertEquals(one.getRunDurationNanos(), two.getRunDurationNanos()); assertEquals(one.getAutoTerminatedRelationshipsList(), two.getAutoTerminatedRelationshipsList()); assertEquals(one.getProperties(), two.getProperties()); + assertEquals(one.getAnnotationData(), two.getAnnotationData()); } }