This is an automated email from the ASF dual-hosted git repository.

jgresock pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 4847926  NIFI-9544 - LookupRecord - fixed behavior when no matching 
value in the LRS
4847926 is described below

commit 4847926a4b70d4d02660c7f1cedbf57388b4c3f5
Author: Pierre Villard <[email protected]>
AuthorDate: Thu Jan 6 18:58:57 2022 +0100

    NIFI-9544 - LookupRecord - fixed behavior when no matching value in the LRS
    
    Signed-off-by: Joe Gresock <[email protected]>
    
    This closes #5638.
---
 .../nifi-standard-processors/pom.xml               |  2 ++
 .../nifi/processors/standard/LookupRecord.java     | 13 ++++++----
 .../nifi/processors/standard/TestLookupRecord.java |  6 +++--
 .../lookup-array-input-unmatched.json              | 29 ++++++++++++++++++++++
 .../lookup-array-output-unmatched.json             |  1 +
 5 files changed, 44 insertions(+), 7 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml
index 72d760d..84fffaf 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml
@@ -624,7 +624,9 @@
                         
<exclude>src/test/resources/TestValidateRecord/timestamp.avsc</exclude>
                         
<exclude>src/test/resources/TestValidateRecord/timestamp.json</exclude>
                         
<exclude>src/test/resources/TestLookupRecord/lookup-array-input.json</exclude>
+                        
<exclude>src/test/resources/TestLookupRecord/lookup-array-input-unmatched.json</exclude>
                         
<exclude>src/test/resources/TestLookupRecord/lookup-array-output.json</exclude>
+                        
<exclude>src/test/resources/TestLookupRecord/lookup-array-output-unmatched.json</exclude>
                         
<exclude>src/test/resources/TestValidateRecord/int-maps-schema.avsc</exclude>
                         
<exclude>src/test/resources/TestValidateRecord/int-maps-data.json</exclude>
                         
<exclude>src/test/resources/TestValidateRecord/array-and-map-with-null-element.avro</exclude>
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/LookupRecord.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/LookupRecord.java
index 1f873a5..e25077d 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/LookupRecord.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/LookupRecord.java
@@ -309,6 +309,7 @@ public class LookupRecord extends 
AbstractRouteRecord<Tuple<Map<String, RecordPa
         final Map<String, RecordPath> recordPaths = flowFileContext.getKey();
         final Map<String, Object> lookupCoordinates = new 
HashMap<>(recordPaths.size());
         final String coordinateKey = 
lookupService.getRequiredKeys().iterator().next();
+        boolean hasUnmatchedValue = false;
 
         for (final Map.Entry<String, RecordPath> entry : 
recordPaths.entrySet()) {
             final RecordPath recordPath = entry.getValue();
@@ -338,20 +339,22 @@ public class LookupRecord extends 
AbstractRouteRecord<Tuple<Map<String, RecordPa
                 }
 
                 if (!lookupValueOption.isPresent()) {
-                    final Set<Relationship> rels = routeToMatchedUnmatched ? 
UNMATCHED_COLLECTION : SUCCESS_COLLECTION;
-                    return rels;
+                    hasUnmatchedValue = true;
+                    continue;
                 }
 
                 final Object lookupValue = lookupValueOption.get();
 
                 final DataType inferredDataType = 
DataTypeUtils.inferDataType(lookupValue, RecordFieldType.STRING.getDataType());
                 fieldValue.updateValue(lookupValue, inferredDataType);
-
             }
         }
 
-        final Set<Relationship> rels = routeToMatchedUnmatched ? 
MATCHED_COLLECTION : SUCCESS_COLLECTION;
-        return rels;
+        if (hasUnmatchedValue) {
+            return routeToMatchedUnmatched ? UNMATCHED_COLLECTION : 
SUCCESS_COLLECTION;
+        } else {
+            return routeToMatchedUnmatched ? MATCHED_COLLECTION : 
SUCCESS_COLLECTION;
+        }
     }
 
     private Set<Relationship> doResultPathReplacement(Record record, FlowFile 
flowFile, ProcessContext context, Tuple<Map<String, RecordPath>, RecordPath> 
flowFileContext) {
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestLookupRecord.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestLookupRecord.java
index 48200ea..251a24d 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestLookupRecord.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestLookupRecord.java
@@ -539,14 +539,16 @@ public class TestLookupRecord {
         runner.setProperty("lookupFoo", "/foo/foo");
 
         lookupService.addValue("FR", "France");
-        lookupService.addValue("CA", "Canada");
         lookupService.addValue("fr", "French");
         lookupService.addValue("badkey", "value");
 
-        runner.enqueue(new 
File("src/test/resources/TestLookupRecord/lookup-array-input.json").toPath());
+        runner.enqueue(new 
File("src/test/resources/TestLookupRecord/lookup-array-input-unmatched.json").toPath());
         runner.run();
 
         runner.assertAllFlowFilesTransferred(LookupRecord.REL_UNMATCHED);
+        final MockFlowFile out = 
runner.getFlowFilesForRelationship(LookupRecord.REL_UNMATCHED).get(0);
+        System.out.println(out.getContent());
+        out.assertContentEquals(new 
File("src/test/resources/TestLookupRecord/lookup-array-output-unmatched.json").toPath());
     }
 
     private static class MapLookup extends AbstractControllerService 
implements StringLookupService {
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/TestLookupRecord/lookup-array-input-unmatched.json
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/TestLookupRecord/lookup-array-input-unmatched.json
new file mode 100644
index 0000000..3df6f36
--- /dev/null
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/TestLookupRecord/lookup-array-input-unmatched.json
@@ -0,0 +1,29 @@
+[
+  {
+    "foo" : {
+      "foo" : "key"
+    },
+    "locales": [
+      {
+        "language" : "en",
+        "region" : "CA"
+      }, {
+        "language" : "fr",
+        "region" : "FR"
+      }
+    ]
+  }, {
+    "foo" : {
+      "foo" : "key"
+    },
+    "locales": [
+      {
+        "language" : "fr",
+        "region" : "CA"
+      }, {
+        "language" : "fr",
+        "region" : "FR"
+      }
+    ]
+  }
+]
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/TestLookupRecord/lookup-array-output-unmatched.json
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/TestLookupRecord/lookup-array-output-unmatched.json
new file mode 100644
index 0000000..a7f8786
--- /dev/null
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/TestLookupRecord/lookup-array-output-unmatched.json
@@ -0,0 +1 @@
+[{"foo":{"foo":"key"},"locales":[{"language":"en","region":"CA"},{"language":"French","region":"France"}]},{"foo":{"foo":"key"},"locales":[{"language":"French","region":"CA"},{"language":"French","region":"France"}]}]
\ No newline at end of file

Reply via email to