Skip to content

NIFI-9448 Improve S2S HTTP Extend Transaction Exception Handling#5577

Closed
exceptionfactory wants to merge 1 commit intoapache:mainfrom
exceptionfactory:NIFI-9448
Closed

NIFI-9448 Improve S2S HTTP Extend Transaction Exception Handling#5577
exceptionfactory wants to merge 1 commit intoapache:mainfrom
exceptionfactory:NIFI-9448

Conversation

@exceptionfactory
Copy link
Contributor

Description of PR

NIFI-9448 Improves Site-to-Site HTTP client processing for extend transaction exception handling.

As part of sending or receive files over an HTTP S2S connection, the SiteToSiteRestApiClient starts a background command to request extension of the current transaction on a periodic basis. In situations when the underlying HTTP connection pool throws an IllegalStateException, the background command attempts to close the parent SiteToSiteRestApiClient. This behavior short-circuits potential retry attempts that might otherwise be allowed according to the configured timeout settings.

These changes include refactoring the background command to a separate ExtendTransactionCommand class for easier testing. With the main SiteToSiteRestApiClient already wrapping an Apache HttpComponents HttpClient instance and connection pool, the refactored ExtendTransactionCommand reuses the same client and connection pool as opposed to creating a new instance of SiteToSiteRestApiClient. Additional changes include a null check in PeerSelector to avoid a potential NullPointerException when the Peer Persistence property is not configured. This pull request also removes the SiteToSiteClientIT as it does not provide significant value beyond the existing unit tests.

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:

  • Have you ensured that the full suite of tests is executed via mvn -Pcontrib-check clean install at the root nifi folder?
  • Have you written or updated unit tests to verify your changes?
  • Have you verified that the full build is successful on JDK 8?
  • Have you verified that the full build is successful on JDK 11?
  • If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under ASF 2.0?
  • If applicable, have you updated the LICENSE file, including the main LICENSE file under nifi-assembly?
  • If applicable, have you updated the NOTICE file, including the main NOTICE file found under nifi-assembly?
  • If adding new Properties, have you added .displayName in addition to .name (programmatic access) for each of the new properties?

For documentation related changes:

  • Have you ensured that format looks appropriate for the output in which it is rendered?

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.

- Refactor background transaction extension to ExtendTransactionCommand
- Avoid closing S2S HTTP client for IllegalStateExceptions
- Avoid creating additional S2S HTTP client instance for transaction extension commands
- Add check for extend transaction requests received in client test class
- Add null check for Peer Persistence implementation in PeerSelector
@gresockj gresockj self-requested a review December 7, 2021 20:28
Copy link
Contributor

@gresockj gresockj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this improvement, @exceptionfactory. I think this makes the transaction extension code more intuitive, and removes the additional client created for transaction extension. I was able to reproduce the issue on a cluster under heavy S2S load by using a remote debugger, closing the HttpClient right before extending the transaction, and did not detect any adverse behavior.

Will merge.

@asfgit asfgit closed this in 563df24 Dec 8, 2021
asfgit pushed a commit that referenced this pull request Dec 14, 2021
- Refactor background transaction extension to ExtendTransactionCommand
- Avoid closing S2S HTTP client for IllegalStateExceptions
- Avoid creating additional S2S HTTP client instance for transaction extension commands
- Add check for extend transaction requests received in client test class
- Add null check for Peer Persistence implementation in PeerSelector

Signed-off-by: Joe Gresock <jgresock@gmail.com>

This closes #5577.
krisztina-zsihovszki pushed a commit to krisztina-zsihovszki/nifi that referenced this pull request Jun 28, 2022
- Refactor background transaction extension to ExtendTransactionCommand
- Avoid closing S2S HTTP client for IllegalStateExceptions
- Avoid creating additional S2S HTTP client instance for transaction extension commands
- Add check for extend transaction requests received in client test class
- Add null check for Peer Persistence implementation in PeerSelector

Signed-off-by: Joe Gresock <jgresock@gmail.com>

This closes apache#5577.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants