Matt,

If I were to split an existing failure relationship into several relationships, 
I do not think I would want to auto-terminate in most cases. Specifically, I'm 
interested in a failure relationship for a database disconnect during SQL 
execution (database was online when the connection was verified in the DBCP 
pool, but went down during execution). If I were to find a way to separate this 
into its own relationship, I do not think most users would appreciate it being 
a condition silently not handled by the normal failure path.

Thanks,
  Peter

-----Original Message-----
From: Matt Burgess [mailto:[email protected]] 
Sent: Friday, October 26, 2018 10:18 AM
To: [email protected]
Subject: Re: [EXT] Re: New Standard Pattern - Put Exception that caused failure 
in an attribute

NiFi (as of the last couple releases I think) has the ability to set 
auto-terminating relationships; this IMO is one of those use cases (for NiFi 
1.x). If new relationships are added, they could default to auto-terminate; 
then the existing processors should remain valid.
However we might want an "omnibus Jira" to capture those relationships we'd 
like to remove the auto-termination from in NiFi 2.0.

Regards,
Matt
On Thu, Oct 25, 2018 at 10:12 PM Peter Wicks (pwicks) <[email protected]> wrote:
>
> 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:[email protected]]
> Sent: Thursday, October 25, 2018 10:38 PM
> To: [email protected]
> 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 <[email protected]> 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) <[email protected]> 
> > 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