You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by oz...@apache.org on 2016/11/08 19:15:21 UTC

nifi git commit: NIFI-2998: Add validator to Avro Record Name in InferAvroSchema

Repository: nifi
Updated Branches:
  refs/heads/master 78020825e -> 63bda32a8


NIFI-2998: Add validator to Avro Record Name in InferAvroSchema

This closes #1187


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

Branch: refs/heads/master
Commit: 63bda32a8befe7f0da01a6c543462f6b2b2daced
Parents: 7802082
Author: Matt Burgess <ma...@apache.org>
Authored: Tue Nov 8 11:56:14 2016 -0500
Committer: Oleg Zhurakousky <ol...@suitcase.io>
Committed: Tue Nov 8 14:14:40 2016 -0500

----------------------------------------------------------------------
 .../nifi/processors/kite/InferAvroSchema.java   |  7 ++++--
 .../processors/kite/TestInferAvroSchema.java    | 24 ++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/63bda32a/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/main/java/org/apache/nifi/processors/kite/InferAvroSchema.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/main/java/org/apache/nifi/processors/kite/InferAvroSchema.java b/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/main/java/org/apache/nifi/processors/kite/InferAvroSchema.java
index aad48ae..0edbd2b 100644
--- a/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/main/java/org/apache/nifi/processors/kite/InferAvroSchema.java
+++ b/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/main/java/org/apache/nifi/processors/kite/InferAvroSchema.java
@@ -57,6 +57,7 @@ import java.util.Set;
 import java.util.HashSet;
 import java.util.Collections;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Pattern;
 
 @Tags({"kite", "avro", "infer", "schema", "csv", "json"})
 @InputRequirement(InputRequirement.Requirement.INPUT_REQUIRED)
@@ -111,6 +112,7 @@ public class InferAvroSchema
     public static final String CSV_MIME_TYPE = "text/csv";
     public static final String AVRO_MIME_TYPE = "application/avro-binary";
     public static final String AVRO_FILE_EXTENSION = ".avro";
+    public static final Pattern AVRO_RECORD_NAME_PATTERN = Pattern.compile("[A-Za-z_]+[A-Za-z0-9_.]*[^.]");
 
     public static final PropertyDescriptor SCHEMA_DESTINATION = new PropertyDescriptor.Builder()
             .name("Schema Output Destination")
@@ -202,10 +204,11 @@ public class InferAvroSchema
 
     public static final PropertyDescriptor RECORD_NAME = new PropertyDescriptor.Builder()
             .name("Avro Record Name")
-            .description("Value to be placed in the Avro record schema \"name\" field.")
+            .description("Value to be placed in the Avro record schema \"name\" field. The value must adhere to the Avro naming "
+                    + "rules for fullname. If Expression Language is present then the evaluated value must adhere to the Avro naming rules.")
             .required(true)
             .expressionLanguageSupported(true)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .addValidator(StandardValidators.createRegexMatchingValidator(AVRO_RECORD_NAME_PATTERN))
             .build();
 
     public static final PropertyDescriptor CHARSET = new PropertyDescriptor.Builder()

http://git-wip-us.apache.org/repos/asf/nifi/blob/63bda32a/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/test/java/org/apache/nifi/processors/kite/TestInferAvroSchema.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/test/java/org/apache/nifi/processors/kite/TestInferAvroSchema.java b/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/test/java/org/apache/nifi/processors/kite/TestInferAvroSchema.java
index 171a64a..e1a9ef9 100644
--- a/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/test/java/org/apache/nifi/processors/kite/TestInferAvroSchema.java
+++ b/nifi-nar-bundles/nifi-kite-bundle/nifi-kite-processors/src/test/java/org/apache/nifi/processors/kite/TestInferAvroSchema.java
@@ -64,6 +64,30 @@ public class TestInferAvroSchema {
     }
 
     @Test
+    public void testRecordName() throws Exception {
+
+        // Dot at the end is invalid
+        runner.setProperty(InferAvroSchema.RECORD_NAME, "org.apache.nifi.contact.");
+        runner.assertNotValid();
+        // Dashes are invalid
+        runner.setProperty(InferAvroSchema.RECORD_NAME, "avro-schema");
+        runner.assertNotValid();
+        // Name cannot start with a digit
+        runner.setProperty(InferAvroSchema.RECORD_NAME, "1Record");
+        runner.assertNotValid();
+        // Name cannot start with a dot
+        runner.setProperty(InferAvroSchema.RECORD_NAME, ".record");
+        runner.assertNotValid();
+
+        runner.setProperty(InferAvroSchema.RECORD_NAME, "avro_schema");
+        runner.assertValid();
+        runner.setProperty(InferAvroSchema.RECORD_NAME, "org.apache.nifi.contact");
+        runner.assertValid();
+        runner.setProperty(InferAvroSchema.RECORD_NAME, "${filename}"); // EL is valid, although its value may not be when evaluated
+        runner.assertValid();
+    }
+
+    @Test
     public void inferAvroSchemaFromHeaderDefinitionOfCSVFile() throws Exception {
 
         runner.assertValid();