Mark,

I agree with you that this is the best option in general terms. After thinking 
about it some more I think the biggest use case is for troubleshooting. If a 
file routes to failure, you need to be watching the UI to see what the 
exception was. An admin may have access to the NiFi log files and could grep 
the error out, but a normal user who checks in on the flow and sees a FlowFile 
in the error queue will not know what the cause was; this is especially 
frustrating if retrying the file works without failure the second time... 
Capturing the error message in an attribute makes this easy to find.

One thing I worry about too is adding new relationships to core processors. 
After an upgrade, won't users need to go to each instance of that processor and 
handle the new relationship? Right now I'd swagger we have at least five 
thousand ExecuteSQL processors in our environment; and while we have strong 
scripting skills in my NiFi team, I would not want to encounter this without 
that. 

Thanks,
  Peter

-----Original Message-----
From: Mark Payne [mailto:marka...@hotmail.com] 
Sent: Thursday, October 25, 2018 10:38 PM
To: dev@nifi.apache.org
Subject: [EXT] Re: New Standard Pattern - Put Exception that caused failure in 
an attribute

I agree - the notion of adding a "failure.reason" attribute is, in my opinion, 
an anti-pattern that should be avoided. Relationships are not a workaround but 
rather the preferred approach in this scenario - an attribute I would consider 
a workaround. This is due to the fact that not only is it brittle and complex 
to add processors that route on such things, but there's no reason at all to 
assume that from release to release (even bug fix/increment releases) that the 
Exception type or message will be the same, so the flow could stop working at 
any time after upgrading nifi.
Relationships offer a well-defined way to explicitly indicate "these are the 
possible outcomes,"
similar IMO to Java Exception classes vs. throwing Strings in C.


> On Oct 25, 2018, at 9:47 AM, Bryan Bende <bbe...@gmail.com> wrote:
> 
> I think processors should really have well defined relationships for 
> the error scenarios that need to be handled. Having the exception 
> message is ok for a human who wants to see it, but in order to do 
> anything with it in the flow you will have to have a bunch of 
> parsing/interpreting of the message with a bunch of routing 
> processors, which seems more brittle than just having the appropriate 
> relationships.
> On Thu, Oct 25, 2018 at 1:36 AM Peter Wicks (pwicks) <pwi...@micron.com> 
> wrote:
>> 
>> When a FlowFile is routed to failure, frequently there is no clear reason 
>> without looking into the actual error message.
>> Some processors work around this by creating many different relationships, 
>> but even then frequently the generic Failure relationship also provides 
>> little guidance.
>> 
>> I've seen a few cases recently where processors are including the exception 
>> message as an attribute on the FlowFile when routing to failure 
>> (ExecuteStreamCommand, new PR for ExecuteSQL). Should this be a standard 
>> pattern so that it's easier for users to route failures?
>> 
>> --Peter

Reply via email to