New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NIFI-8120 Added RuntimeException handling on HttpContextMap.complete() #4747
Conversation
b01291a
to
2e33e6e
Compare
@@ -204,7 +206,7 @@ public void onTrigger(final ProcessContext context, final ProcessSession session | |||
|
|||
try { | |||
contextMap.complete(contextIdentifier); | |||
} catch (final IllegalStateException ise) { | |||
} catch (final RuntimeException ise) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ise
seems to be a leftover from the previous version.
Could you please use ce
here too like in line 197.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Renamed to ce
as requested.
@@ -194,7 +192,11 @@ public void onTrigger(final ProcessContext context, final ProcessSession session | |||
} catch (final ProcessException e) { | |||
session.transfer(flowFile, REL_FAILURE); | |||
getLogger().error("Failed to respond to HTTP request for {} due to {}", new Object[]{flowFile, e}); | |||
contextMap.complete(contextIdentifier); | |||
try { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not a new issue but it could be improved around exception handling:
The typical (by convention) error handling flow is logging first, then sending the FF to FAILURE (in case of an exception in session.transfer()
). Like in the last catch block at lines 210-211.
This catch and the others throughout onTrigger() do it vice versa.
I would consider moving the
session.transfer(flowFile, REL_FAILURE);
lines just before the return statements.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That makes sense, reordered this and other session.transfer()
calls to occur after logging.
@turcsanyip Thanks for the review and detailed feedback. I pushed an update incorporating your recommendations. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 LGTM
Merging to main.
@exceptionfactory Thanks for improving the exception handling of this processor and also for the test refactoring / clean-up.
NIFI-8120 Renamed exception variable and reordered log statements This closes apache#4747. Signed-off-by: Peter Turcsanyi <turcsanyi@apache.org>
NIFI-8120 Renamed exception variable and reordered log statements This closes apache#4747. Signed-off-by: Peter Turcsanyi <turcsanyi@apache.org>
Description of PR
NIFI-8120 Adds
RuntimeException
handling for both invocations ofHttpContextMap.complete()
inHandleHttpResponse
Processor. PR #1567 for NIFI-3517 introduced callingHttpContextMap.complete()
whenHandleHttpResponse
failed to send Flow File contents to the HTTP output stream. In cases where the HTTP client has disconnected, however,HttpContextMap.complete()
can throw anIllegalStateException
, wrapping ajava.nio.channels.ClosedChannelException
when attempting to close the server connection. This change includes updated unit tests to confirm that Flow Files will be routed to failure when this situation occurs.In order to streamline the review of the contribution we ask you
to ensure the following steps have been taken:
For all changes:
Is there a JIRA ticket associated with this PR? Is it referenced
in the commit message?
Does your PR title start with NIFI-XXXX where XXXX is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character.
Has your PR been rebased against the latest commit within the target branch (typically
main
)?Is your initial contribution a single, squashed commit? Additional commits in response to PR reviewer feedback should be made on this branch and pushed to allow change tracking. Do not
squash
or use--force
when pushing to allow for clean monitoring of changes.For code changes:
mvn -Pcontrib-check clean install
at the rootnifi
folder?LICENSE
file, including the mainLICENSE
file undernifi-assembly
?NOTICE
file, including the mainNOTICE
file found undernifi-assembly
?.displayName
in addition to .name (programmatic access) for each of the new properties?For documentation related changes:
Note:
Please ensure that once the PR is submitted, you check GitHub Actions CI for build issues and submit an update to your PR as soon as possible.