How about a third option which is to provide three options:

1) Default - status quo, exceptions cause it to yield
2) Exception = moves forward to success w/ an error attribute, an error log
statement that triggers a bulletin, etc to let data manages know what's
happening.
3) Exception = moves to a failure relationship that is otherwise
autoterminated

On Thu, Feb 8, 2024 at 7:12 PM Matt Burgess <mattyb...@apache.org> wrote:

> Mike's option #2 seems solid but would take a lot of work and there will
> always be inputs we don't account for. I support that work but in code
> sometimes we just do a "catch(Throwable)" just so it doesn't blow up. What
> about a subjectless "try" or "trycatch" function you can wrap around your
> whole expression? If no exception is thrown, the evaluated value will be
> returned but if one is thrown, you can provide some alternate value that
> you can check downstream. As this is optional it would retain the current
> behavior unless you use it, and then it takes the place of all those
> ifElse(isXYZValid()) calls we'd need throughout the expression.
>
> Regards,
> Matt
>
>
> On Wed, Feb 7, 2024 at 8:11 PM Phillip Lord <phillord0...@gmail.com>
> wrote:
>
> > IMO... UpdateAttribute has been around since the beginning of time, I
> can't
> > see adding a failure relationship. At the same time I understand the want
> > for such exceptions to be handled more gracefully rather than rolling
> back
> > indefinitely.
> > I'd vote in favor of considering Moser's option #2... and being able to
> > implement an "if this then that" logic within your flow.
> >
> > Also just thinking... for every UA failure you have to consider a good
> > failure-management strategy, which MIGHT add a lot of noise to the flow.
> > Something that might otherwise easily be identified in a downstream
> > component and/or database/etc.
> >
> > My 2 cents **
> > Phil
> >
> >
> >
> >
> >
> > On Wed, Feb 7, 2024 at 5:18 PM Adam Taft <a...@adamtaft.com> wrote:
> >
> > > Or better, the failure relationship just doesn't even exist until the
> > > property "Has Failure Relationship" is set to True.  This involves
> > updating
> > > UpdateAttribute to have dynamic relationships (the failure
> relationships
> > > appearing on true), which isn't hard to do in processor code.
> > >
> > > This has the advantage of being backwards compatible for existing users
> > and
> > > allows the failure relationship to exist for new configurations.
> > Obviously
> > > the processor would need an update to catch Expression Language
> > exceptions
> > > and then route conditionally to failure.
> > >
> > > Just thinking out loud.
> > > /Adam
> > >
> > >
> > >
> > > On Wed, Feb 7, 2024 at 1:48 PM u...@moosheimer.com <u...@moosheimer.com>
> > > wrote:
> > >
> > > > Hi Mike,
> > > >
> > > > How about the option of introducing a new property that decides
> whether
> > > to
> > > > route to the 'failure' relationship in the event of an error?
> > > > If this property is set to false, then the 'failure' relationship is
> > > > automatically set to 'terminate' (since nothing is routed there
> > anyway).
> > > >
> > > > Then everyone can decide whether and where they want to use this new
> > > > feature or not.
> > > > All other options would still be possible with such a solution.
> > > >
> > > > -- Uwe
> > > >
> > > > > Am 07.02.2024 um 22:15 schrieb Michael Moser <moser...@gmail.com>:
> > > > >
> > > > > Hi Dan,
> > > > >
> > > > > This has been discussed in the past, as you found with those two
> Jira
> > > > > tickets.  Personally, I'm still not sure whether a new failure
> > > > relationship
> > > > > on UpdateAttribute in 2.0 is a good approach.  I have heard from
> some
> > > > > dataflow managers that would not want to go through their entire
> > graph
> > > > when
> > > > > upgrading to 2.0 and update every UpdateAttribute configuration.
> > > > >
> > > > > I have heard some alternatives to a 'failure' relationship that I
> > would
> > > > > like to share as options.
> > > > >
> > > > > 1) Add a new property to UpdateAttribute that controls whether a
> > > flowfile
> > > > > that causes an expression language exception either yields and
> rolls
> > > > back,
> > > > > or silently fails to update the attribute and sends the flowfile to
> > > > > success.  I personally don't like this, because the use case for
> > > "silent
> > > > > failure" seems really like a rarely needed edge case.
> > > > >
> > > > > 2) Identify all expression language methods that can throw an
> > exception
> > > > and
> > > > > document that fact in the Expression Language Guide (some methods
> > > already
> > > > > mention they can throw an "exception bulletin").  Then implement
> new
> > > > > expression methods to check if an expression could fail, and use
> that
> > > in
> > > > > UpdateAttribute advanced rules.  For example, if the format() and
> > > > > formatInstant() methods can fail on a negative number, we create a
> > new
> > > > > method such as isValidMilliseconds().  This already exists for some
> > > > cases,
> > > > > such as isJson() which can do a quick check of some value before
> > > calling
> > > > > jsonPathDelete() on it.
> > > > >
> > > > > I'm curious to hear more thoughts on this.
> > > > >
> > > > > -- Mike
> > > > >
> > > > >
> > > > >
> > > > >> On Wed, Jan 31, 2024 at 11:02 AM Dan S <dsti...@gmail.com> wrote:
> > > > >>
> > > > >> My team is requesting a failure relationship for UpdateAttribute
> as
> > > > seen in
> > > > >> NIFI-5448 <https://issues.apache.org/jira/browse/NIFI-5448> and
> > > > NIFI-6344
> > > > >> <https://issues.apache.org/jira/browse/NIFI-6344> as we are
> > > > >> experiencing the same problem where a NIFI Expression Language is
> > > > throwing
> > > > >> an exception. In the PR for NIFI-5448 it was mentioned this
> feature
> > > > would
> > > > >> have to wait until NIFI 2.0.0. I wanted to know if there is any
> > active
> > > > work
> > > > >> regarding this and whether eventually there will be a failure
> > > > relationship
> > > > >> added to UpdateAttribute?
> > > > >>
> > > >
> > > >
> > >
> >
>

Reply via email to