You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ze...@apache.org on 2019/02/19 10:56:17 UTC

[nifi] branch master updated: NIFI-5987 Fixed issue where an invalid query pulled from an attribute would cause GetMongo to not route to failure.

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 53ca9eb  NIFI-5987 Fixed issue where an invalid query pulled from an attribute would cause GetMongo to not route to failure.
53ca9eb is described below

commit 53ca9eb7e51d69aebd692b43d5861180098a7dc6
Author: Mike Thomsen <mi...@gmail.com>
AuthorDate: Thu Jan 31 19:13:46 2019 -0500

    NIFI-5987 Fixed issue where an invalid query pulled from an attribute would cause GetMongo to not route to failure.
    
    Signed-off-by: zenfenan <ze...@apache.org>
    
    This closes #3285
---
 .../mongodb/AbstractMongoQueryProcessor.java       |  7 +--
 .../apache/nifi/processors/mongodb/GetMongo.java   | 12 +++--
 .../apache/nifi/processors/mongodb/GetMongoIT.java | 57 ++++++++++++++++++++++
 3 files changed, 67 insertions(+), 9 deletions(-)

diff --git a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/AbstractMongoQueryProcessor.java b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/AbstractMongoQueryProcessor.java
index 6660551..7c66b1b 100644
--- a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/AbstractMongoQueryProcessor.java
+++ b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/AbstractMongoQueryProcessor.java
@@ -121,12 +121,7 @@ public abstract class AbstractMongoQueryProcessor extends AbstractMongoProcessor
                 query = Document.parse(new String(out.toByteArray()));
             } catch (Exception ex) {
                 getLogger().error("Error reading FlowFile : ", ex);
-                if (input != null) { //Likely culprit is a bad query
-                    session.transfer(input, REL_FAILURE);
-                    session.commit();
-                } else {
-                    throw new ProcessException(ex);
-                }
+                throw new ProcessException(ex);
             }
         }
 
diff --git a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/GetMongo.java b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/GetMongo.java
index ff65f86..286c47e 100644
--- a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/GetMongo.java
+++ b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/GetMongo.java
@@ -149,10 +149,16 @@ public class GetMongo extends AbstractMongoQueryProcessor {
             }
         }
 
-        final Document query = getQuery(context, session, input );
+        final Document query;
+        try {
+            query = getQuery(context, session, input);
+        } catch (Exception ex) {
+            getLogger().error("Error parsing query.", ex);
+            if (input != null) {
+                session.transfer(input, REL_FAILURE);
+            }
 
-        if (query == null) {
-            return;
+            return; //We need to stop immediately.
         }
 
         final String jsonTypeSetting = context.getProperty(JSON_TYPE).getValue();
diff --git a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/GetMongoIT.java b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/GetMongoIT.java
index 76139d5..286a70d 100644
--- a/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/GetMongoIT.java
+++ b/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/GetMongoIT.java
@@ -581,6 +581,7 @@ public class GetMongoIT {
         Assert.assertTrue(format.matcher((String) result.get("date_field")).matches());
     }
 
+    @Test
     public void testClientService() throws Exception {
         MongoDBClientService clientService = new MongoDBControllerService();
         runner.addControllerService("clientService", clientService);
@@ -594,4 +595,60 @@ public class GetMongoIT {
         runner.run();
         runner.assertTransferCount(GetMongo.REL_SUCCESS, 3);
     }
+
+    @Test
+    public void testInvalidQueryGoesToFailure() {
+        //Test variable registry mode
+        runner.setVariable("badattribute", "<<?>>");
+        runner.setProperty(GetMongo.QUERY, "${badattribute}");
+        runner.run();
+        runner.assertTransferCount(GetMongo.REL_FAILURE, 0);
+        runner.assertTransferCount(GetMongo.REL_SUCCESS, 0);
+        runner.assertTransferCount(GetMongo.REL_ORIGINAL, 0);
+
+        runner.clearTransferState();
+
+        //Test that it doesn't blow up with variable registry values holding a proper value
+        runner.setVariable("badattribute", "{}");
+        runner.run();
+        runner.assertTransferCount(GetMongo.REL_FAILURE, 0);
+        runner.assertTransferCount(GetMongo.REL_SUCCESS, 3);
+        runner.assertTransferCount(GetMongo.REL_ORIGINAL, 0);
+
+        runner.clearTransferState();
+
+        //Test a bad flowfile attribute
+        runner.setIncomingConnection(true);
+        runner.setProperty(GetMongo.QUERY, "${badfromff}");
+        runner.enqueue("<<?>>", new HashMap<String, String>(){{
+            put("badfromff", "{\"prop\":}");
+        }});
+        runner.run();
+        runner.assertTransferCount(GetMongo.REL_FAILURE, 1);
+        runner.assertTransferCount(GetMongo.REL_SUCCESS, 0);
+        runner.assertTransferCount(GetMongo.REL_ORIGINAL, 0);
+
+        runner.clearTransferState();
+
+        //Test for regression on a good query from a flowfile attribute
+        runner.setIncomingConnection(true);
+        runner.setProperty(GetMongo.QUERY, "${badfromff}");
+        runner.enqueue("<<?>>", new HashMap<String, String>(){{
+            put("badfromff", "{}");
+        }});
+        runner.run();
+        runner.assertTransferCount(GetMongo.REL_FAILURE, 0);
+        runner.assertTransferCount(GetMongo.REL_SUCCESS, 3);
+        runner.assertTransferCount(GetMongo.REL_ORIGINAL, 1);
+
+        runner.clearTransferState();
+        runner.removeProperty(GetMongo.QUERY);
+
+        //Test for regression against the body w/out any EL involved.
+        runner.enqueue("<<?>>");
+        runner.run();
+        runner.assertTransferCount(GetMongo.REL_FAILURE, 1);
+        runner.assertTransferCount(GetMongo.REL_SUCCESS, 0);
+        runner.assertTransferCount(GetMongo.REL_ORIGINAL, 0);
+    }
 }