[ 
https://issues.apache.org/jira/browse/NIFI-3255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15820213#comment-15820213
 ] 

ASF GitHub Bot commented on NIFI-3255:
--------------------------------------

Github user ijokarumawak commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/1394#discussion_r95726870
  
    --- Diff: 
nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SplitText.java
 ---
    @@ -326,6 +329,27 @@ public void process(InputStream in) throws IOException 
{
             return splitFlowFiles;
         }
     
    +    /**
    +     * Will merge the two files. This operation has different semantics 
then
    +     * sessioin.merge. Also, it always expects 2 and no more then 2 flow 
files,
    +     * so vararg signature primarily for simplification.
    +     */
    +    private FlowFile merge(ProcessSession session, FlowFile... flowFiles) {
    --- End diff --
    
    Since this method does simply adding header to each split, naming this as 
`prependHeader` would make its purpose clearer. The keyword `merge` is 
counter-intuitive in the context of this SplitText processor. How do you think 
a method signature like this?
    
    ```java
    /**
     * @param split a FlowFile for the split, this will be removed from session
     * @return newly created flow file contains header and split merged
     **/
    private FlowFile prependHeader(ProcessSession session, FlowFile header, 
FlowFile split)
    ```
    
    With this, we don't have to mention that this is different from 
session.merge, nor explain about the var args.


> SplitText fails with IllegalArgumentException: Destination cannot be within 
> sources
> -----------------------------------------------------------------------------------
>
>                 Key: NIFI-3255
>                 URL: https://issues.apache.org/jira/browse/NIFI-3255
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Extensions
>    Affects Versions: 1.1.0, 1.1.1
>            Reporter: Koji Kawamura
>            Assignee: Oleg Zhurakousky
>            Priority: Critical
>
> If SplitText is configured with Header Line Count grater than 0, and input 
> flow file like below is passed, it fails with IllegalArgumentException:
> {code}
> header
> line1
> line2
> {code}
> Stacktrace:
> {code}
> 2016-12-27 16:41:51,016 WARN [Timer-Driven Process Thread-2] 
> o.a.n.c.t.ContinuallyRunProcessorTask java.lang.IllegalArgumentException: 
> Destination cannot be within sources
>         at 
> org.apache.nifi.controller.repository.StandardProcessSession.merge(StandardProcessSession.java:2217)
>  ~[nifi-framework-core-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.nifi.controller.repository.StandardProcessSession.merge(StandardProcessSession.java:2209)
>  ~[nifi-framework-core-1.2.0-SNAPSHOT.jar:1.2.0-SNAPSHOT]
>         at 
> org.apache.nifi.processors.standard.SplitText.generateSplitFlowFiles(SplitText.java:305)
>  ~[na:na]
>         at 
> org.apache.nifi.processors.standard.SplitText.onTrigger(SplitText.java:253) 
> ~[na:na]
>         at 
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
>  ~[nifi-api-1.2.0-SNAPSHOT.jar:1
> {code}
> Marked as critical since this is a regression and breaks existing flow. With 
> 1.0, SplitText produces following output flow files to "split" relationship 
> with the same input flow file and processor configuration:
> {code}
> # output flow file 1
> header
> line1
> # output flow file 2
> header
> line 2
> {code}
> The related code block in the processor has been covered by unit tests, 
> however, since unit test uses MockProcessSession, it skips check conditions 
> in StandardProcessSession. MockProcessSession should be updated, too, in 
> order to catch this type of issue with Unit testing.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to