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