You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@nifi.apache.org by plj <pl...@mitre.org> on 2015/09/16 22:18:59 UTC

is not the most recent version of this FlowFile within this session

Howdy,

  I'm trying to send JSON to a flow file and I get the error "is not the
most recent version of this FlowFile within this session".  I'm not sure
what I'm doing wrong.    Here is a snippet 
                        FlowFile split = processSession.create(original);
                        split = processSession.write(split, new
OutputStreamCallback() {
                            @Override
                            public void process(OutputStream out) throws
IOException {
                                String content = baos.toString("UTF-8");
                                String json = toJSON(content);
                                ObjectMapper mapper = new ObjectMapper();
                                JsonNode actualObj = mapper.readTree(json);
                                logger.info("JSON METADATA \n" +
mapper.defaultPrettyPrintingWriter().writeValueAsString(actualObj));
                               
out.write(mapper.defaultPrettyPrintingWriter().writeValueAsString(actualObj).getBytes(StandardCharsets.UTF_8));    
                            }
                        });


The json is written out to the log

In onTrigger(...) it set "meta" to the flow file "split" above

        processSession.transfer(meta, REL_METADATA);

And it get this error

2015-09-16 16:36:48,482 ERROR [Timer-Driven Process Thread-9]
org.mitre.nifi.NiFiNITFReader
NiFiNITFReader[id=a615ceb9-fa67-4823-9eb0-310ebada5488]
NiFiNITFReader[id=a615ceb9-fa67-4823-9eb0-310ebada5488] failed to process
due to org.apache.nifi.processor.exception.FlowFileHandlingException:
StandardFlowFileRecord[uuid=865d7aac-994c-41ac-a34c-599d92df31b9,claim=1442435806141-1,offset=0,name=i_3001a.ntf,size=1049479]
is not the most recent version of this FlowFile within this session
(StandardProcessSession[id=2]); rolling back session:
org.apache.nifi.processor.exception.FlowFileHandlingException:
StandardFlowFileRecord[uuid=865d7aac-994c-41ac-a34c-599d92df31b9,claim=1442435806141-1,offset=0,name=i_3001a.ntf,size=1049479]
is not the most recent version of this FlowFile within this session
(StandardProcessSession[id=2])



thoughts?

thank you




--
View this message in context: http://apache-nifi-developer-list.39713.n7.nabble.com/is-not-the-most-recent-version-of-this-FlowFile-within-this-session-tp2837.html
Sent from the Apache NiFi Developer List mailing list archive at Nabble.com.

Re: is not the most recent version of this FlowFile within this session

Posted by Mark Payne <ma...@hotmail.com>.
Michael, I think you have the premise exactly right. It's not just when you call session.write, though. It's for any call
that you make to update a FlowFile. For example, if you call session.putAttribute or session.putAllAttributes, those methods
also will return a new FlowFile object that you must capture / use.



> On Sep 16, 2015, at 8:07 PM, Michael Kobit <mk...@gmail.com> wrote:
> 
> It is hard to tell without the rest of your code, but what you have shown
> and the way you are explaining it doesn't seem like this error would happen.
> 
> I've seen this problem when you do a processSession.write(flowfile,
> outputStream -> {}) and you don't capture the returned `flowFile`. Are you
> writing to a flowFile anywhere else and not using the returned value?
> 
> On Wed, Sep 16, 2015 at 5:22 PM plj <pl...@mitre.org> wrote:
> 
>> Howdy,
>> 
>>  I'm trying to send JSON to a flow file and I get the error "is not the
>> most recent version of this FlowFile within this session".  I'm not sure
>> what I'm doing wrong.    Here is a snippet
>>                        FlowFile split = processSession.create(original);
>>                        split = processSession.write(split, new
>> OutputStreamCallback() {
>>                            @Override
>>                            public void process(OutputStream out) throws
>> IOException {
>>                                String content = baos.toString("UTF-8");
>>                                String json = toJSON(content);
>>                                ObjectMapper mapper = new ObjectMapper();
>>                                JsonNode actualObj = mapper.readTree(json);
>>                                logger.info("JSON METADATA \n" +
>> mapper.defaultPrettyPrintingWriter().writeValueAsString(actualObj));
>> 
>> 
>> out.write(mapper.defaultPrettyPrintingWriter().writeValueAsString(actualObj).getBytes(StandardCharsets.UTF_8));
>>                            }
>>                        });
>> 
>> 
>> The json is written out to the log
>> 
>> In onTrigger(...) it set "meta" to the flow file "split" above
>> 
>>        processSession.transfer(meta, REL_METADATA);
>> 
>> And it get this error
>> 
>> 2015-09-16 16:36:48,482 ERROR [Timer-Driven Process Thread-9]
>> org.mitre.nifi.NiFiNITFReader
>> NiFiNITFReader[id=a615ceb9-fa67-4823-9eb0-310ebada5488]
>> NiFiNITFReader[id=a615ceb9-fa67-4823-9eb0-310ebada5488] failed to process
>> due to org.apache.nifi.processor.exception.FlowFileHandlingException:
>> 
>> StandardFlowFileRecord[uuid=865d7aac-994c-41ac-a34c-599d92df31b9,claim=1442435806141-1,offset=0,name=i_3001a.ntf,size=1049479]
>> is not the most recent version of this FlowFile within this session
>> (StandardProcessSession[id=2]); rolling back session:
>> org.apache.nifi.processor.exception.FlowFileHandlingException:
>> 
>> StandardFlowFileRecord[uuid=865d7aac-994c-41ac-a34c-599d92df31b9,claim=1442435806141-1,offset=0,name=i_3001a.ntf,size=1049479]
>> is not the most recent version of this FlowFile within this session
>> (StandardProcessSession[id=2])
>> 
>> 
>> 
>> thoughts?
>> 
>> thank you
>> 
>> 
>> 
>> 
>> --
>> View this message in context:
>> http://apache-nifi-developer-list.39713.n7.nabble.com/is-not-the-most-recent-version-of-this-FlowFile-within-this-session-tp2837.html
>> Sent from the Apache NiFi Developer List mailing list archive at
>> Nabble.com.
>> 


Re: is not the most recent version of this FlowFile within this session

Posted by Michael Kobit <mk...@gmail.com>.
It is hard to tell without the rest of your code, but what you have shown
and the way you are explaining it doesn't seem like this error would happen.

I've seen this problem when you do a processSession.write(flowfile,
outputStream -> {}) and you don't capture the returned `flowFile`. Are you
writing to a flowFile anywhere else and not using the returned value?

On Wed, Sep 16, 2015 at 5:22 PM plj <pl...@mitre.org> wrote:

> Howdy,
>
>   I'm trying to send JSON to a flow file and I get the error "is not the
> most recent version of this FlowFile within this session".  I'm not sure
> what I'm doing wrong.    Here is a snippet
>                         FlowFile split = processSession.create(original);
>                         split = processSession.write(split, new
> OutputStreamCallback() {
>                             @Override
>                             public void process(OutputStream out) throws
> IOException {
>                                 String content = baos.toString("UTF-8");
>                                 String json = toJSON(content);
>                                 ObjectMapper mapper = new ObjectMapper();
>                                 JsonNode actualObj = mapper.readTree(json);
>                                 logger.info("JSON METADATA \n" +
> mapper.defaultPrettyPrintingWriter().writeValueAsString(actualObj));
>
>
> out.write(mapper.defaultPrettyPrintingWriter().writeValueAsString(actualObj).getBytes(StandardCharsets.UTF_8));
>                             }
>                         });
>
>
> The json is written out to the log
>
> In onTrigger(...) it set "meta" to the flow file "split" above
>
>         processSession.transfer(meta, REL_METADATA);
>
> And it get this error
>
> 2015-09-16 16:36:48,482 ERROR [Timer-Driven Process Thread-9]
> org.mitre.nifi.NiFiNITFReader
> NiFiNITFReader[id=a615ceb9-fa67-4823-9eb0-310ebada5488]
> NiFiNITFReader[id=a615ceb9-fa67-4823-9eb0-310ebada5488] failed to process
> due to org.apache.nifi.processor.exception.FlowFileHandlingException:
>
> StandardFlowFileRecord[uuid=865d7aac-994c-41ac-a34c-599d92df31b9,claim=1442435806141-1,offset=0,name=i_3001a.ntf,size=1049479]
> is not the most recent version of this FlowFile within this session
> (StandardProcessSession[id=2]); rolling back session:
> org.apache.nifi.processor.exception.FlowFileHandlingException:
>
> StandardFlowFileRecord[uuid=865d7aac-994c-41ac-a34c-599d92df31b9,claim=1442435806141-1,offset=0,name=i_3001a.ntf,size=1049479]
> is not the most recent version of this FlowFile within this session
> (StandardProcessSession[id=2])
>
>
>
> thoughts?
>
> thank you
>
>
>
>
> --
> View this message in context:
> http://apache-nifi-developer-list.39713.n7.nabble.com/is-not-the-most-recent-version-of-this-FlowFile-within-this-session-tp2837.html
> Sent from the Apache NiFi Developer List mailing list archive at
> Nabble.com.
>

Re: is not the most recent version of this FlowFile within this session

Posted by plj <pl...@mitre.org>.
Thank you for your help.  I was indeed doing other things with flow files. 
I’ve gotten rid of that error but I’m now getting another error.  

transfer relationship not specified

2015-09-17 13:34:53,995 ERROR [Timer-Driven Process Thread-9]
org.mitre.nifi.NiFiNITFReader
NiFiNITFReader[id=a615ceb9-fa67-4823-9eb0-310ebada5488]
NiFiNITFReader[id=a615ceb9-fa67-4823-9eb0-310ebada5488] failed to process
due to org.apache.nifi.processor.exception.FlowFileHandlingException:
StandardFlowFileRecord[uuid=d6e9a5bb-44f9-4e62-ae62-d41eef4635d4,claim=1442511293801-1,offset=0,name=i_3001a.ntf,size=1049479]
transfer relationship not specified; rolling back session:
org.apache.nifi.processor.exception.FlowFileHandlingException:
StandardFlowFileRecord[uuid=d6e9a5bb-44f9-4e62-ae62-d41eef4635d4,claim=1442511293801-1,offset=0,name=i_3001a.ntf,size=1049479]
transfer relationship not specified

I’ve cut my program down to just a test case.  I don’t see what I’m doing
wrong

My code is now:


    public static final Relationship REL_METADATA = new
Relationship.Builder()
            .name("metadata")
            .description("All metadata of the original FlowFile will be
routed to this relationship")
            .build();

    public static final Relationship REL_FAILURE = new
Relationship.Builder()
            .name("failure")
            .description("If a FlowFile fails processing for any reason  it
will be routed to this relationship")
            .build();
    private List<PropertyDescriptor> properties;
    private Set<Relationship> relationships;
    private static Stack<String> stack = new Stack<String>();
    private FlowFile meta = null;


    @Override
    protected void init(final ProcessorInitializationContext context) {
        // relationships
        final Set<Relationship> procRels = new HashSet<Relationship>();
//        procRels.add(REL_SUCCESS);
        procRels.add(REL_FAILURE);
        procRels.add(REL_METADATA);
        relationships = Collections.unmodifiableSet(procRels);
        final List<PropertyDescriptor> properties = new ArrayList<>();
        this.properties = Collections.unmodifiableList(properties);
    }


    @Override
    public Set<Relationship> getRelationships() {
        return relationships;
    }

    @Override
    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
        return properties;
    }

    @Override
    public void onTrigger(ProcessContext processContext, ProcessSession
processSession) throws ProcessException {
        final ProcessorLog logger = getLogger();
        logger.info("IN onTRIGGER");
        final FlowFile original = processSession.get();
        if (original == null) {
            return;
        }
        try {
                meta = processSession.create(original);
                meta = processSession.write(meta, new OutputStreamCallback()
{
                    @Override
                    public void process(OutputStream out) throws IOException
{
                        String content = "THIS IS META DATA ";
                        out.write(content.getBytes(StandardCharsets.UTF_8));    
// just for testing
                    }
                });
        processSession.transfer(meta, REL_METADATA);
        }catch (Exception e){
            e.printStackTrace();
            processSession.transfer(original, REL_FAILURE);
        }
    }



Any thoughts?

thank you




--
View this message in context: http://apache-nifi-developer-list.39713.n7.nabble.com/is-not-the-most-recent-version-of-this-FlowFile-within-this-session-tp2837p2848.html
Sent from the Apache NiFi Developer List mailing list archive at Nabble.com.