Skip to content
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

Releasing the messages immediately if prefetch is disabled and if there is no (active) downstream #26936

Merged
merged 12 commits into from
Feb 12, 2022

Conversation

anuchandy
Copy link
Member

@anuchandy anuchandy commented Feb 8, 2022

Description

What is not in the scope of this pr

  • There might be corner cases where we benefit from doing the release (such as when the client closes/terminates), but those are not in the scope of this pr. This pr explicitly targets the case when there is no active downstream.

All SDK Contribution checklist:

  • The pull request does not introduce [breaking changes]
  • CHANGELOG is updated for new features, bug fixes or other significant changes.
  • I have read the contribution guidelines.

General Guidelines and Best Practices

  • Title of the pull request is clear and informative.
  • There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

  • Pull request includes test coverage for the included changes.

@ghost ghost added the Service Bus label Feb 8, 2022
@anuchandy anuchandy changed the title Releasing the messages immediately if there is no (unterminated) downstream Releasing the messages immediately if there is no (active) downstream Feb 8, 2022
@anuchandy anuchandy requested a review from srnagar February 9, 2022 01:29
Copy link
Member

@conniey conniey 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 fixing my PR @anuchandy ! One test case I had troubles testing was whether it released messages if they expired while the same current work was polling and that the next work item would get new messages...

@anuchandy anuchandy requested a review from conniey February 11, 2022 00:08
@check-enforcer
Copy link

This pull request is protected by Check Enforcer.

What is Check Enforcer?

Check Enforcer helps ensure all pull requests are covered by at least one check-run (typically an Azure Pipeline). When all check-runs associated with this pull request pass then Check Enforcer itself will pass.

Why am I getting this message?

You are getting this message because Check Enforcer did not detect any check-runs being associated with this pull request within five minutes. This may indicate that your pull request is not covered by any pipelines and so Check Enforcer is correctly blocking the pull request being merged.

What should I do now?

If the check-enforcer check-run is not passing and all other check-runs associated with this PR are passing (excluding license-cla) then you could try telling Check Enforcer to evaluate your pull request again. You can do this by adding a comment to this pull request as follows:
/check-enforcer evaluate
Typically evaulation only takes a few seconds. If you know that your pull request is not covered by a pipeline and this is expected you can override Check Enforcer using the following command:
/check-enforcer override
Note that using the override command triggers alerts so that follow-up investigations can occur (PRs still need to be approved as normal).

What if I am onboarding a new service?

Often, new services do not have validation pipelines associated with them, in order to bootstrap pipelines for a new service, you can issue the following command as a pull request comment:
/azp run prepare-pipelines
This will run a pipeline that analyzes the source tree and creates the pipelines necessary to build and validate your pull request. Once the pipeline has been created you can trigger the pipeline using the following comment:
/azp run java - [service] - ci

@anuchandy
Copy link
Member Author

Hi @conniey, I've added a UT. Regarding the expired messages, I later learned from Ramya that we could not release if it's already expired, so release should happen asap if there are no active receivers.

@anuchandy
Copy link
Member Author

anuchandy commented Feb 11, 2022

The below diagram shows what is with this new release feature, adding it for future reference -

ReleaseMessages

quite_period: a period in the sliding window with no active receivers, any messages during this duration are released.

As illustrated, we continue to use the sliding window, i.e., the prefetch queue is shared, and there is no correlation such as this set of messages belonging to this specific receive call. By design, a receive call can receive messages that arrived as a result of an earlier credit call (e.g., receive_3); those messages are unlikely to be expired as they just arrived

@anuchandy anuchandy marked this pull request as ready for review February 11, 2022 01:22
@anuchandy anuchandy changed the title Releasing the messages immediately if there is no (active) downstream Releasing the messages immediately if prefetch is disabled and if there is no (active) downstream Feb 11, 2022
@anuchandy anuchandy enabled auto-merge (squash) February 12, 2022 23:03
@anuchandy anuchandy merged commit e795856 into Azure:main Feb 12, 2022
@conniey conniey linked an issue Feb 14, 2022 that may be closed by this pull request
xinlian12 pushed a commit to xinlian12/azure-sdk-for-java that referenced this pull request Mar 3, 2022
…re is no (active) downstream (Azure#26936)

* Adding DispositionStatus.RELEASED

* Releasing messages that are expired. On dispose, any buffered messages are disposed.

* Adding test for subscriber.

* Add CHANGELOG.

* Fixing broken test.

* Release message if there is no active downstream (and when prefetch is disabled)

* adding impl doc

* Adding test for message release in no-prefetch scenario

* Ensuring code consistency

Co-authored-by: Weidong Xu <[email protected]>

* Updating changelog to include message-release behavior of sync client when prefetch is disabled

Co-authored-by: Connie Yau <[email protected]>
Co-authored-by: Weidong Xu <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Do not serve expired messages to the user
4 participants