fix: when entering idle mode, the old resolve-related resources have … #3402
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
…not been completely processed, and an exception occurs when exiting idle mode immediately.
Description (what this PR does / why we need it):
When grpc quickly enters and exits idle mode, there is a situation where it no longer obtains the latest service information. Previously, it was fixed that when the grpc client enters idle mode, the consul package will no longer watch service information again (#3162).
Recently, I found that it was not in idle mode. The target service was updated, but the client service discovery information was not updated. After investigation, it was found that there were problems with the previous modifications. A logic was added before. Every time it enters idle mode, if the number of watch objects in the serviceset reaches 0, it will try to recycle the serviceset. However, there is a certain delay in recycling the serviceset, and it may be blocked by a tick. Please see the code for details. When the serviceset has not been recycled, it will exit the idle mode immediately. When watching again, the resolve method will no longer be called. If the target service is no longer updated in the future, the client will no longer be able to obtain the latest service information because the goroutine for obtaining service information is no longer available.
What was changed?
Which issue(s) this PR fixes (resolves / be part of):
Other special notes for the reviewers: