feat: singleflight to deduplicate GET requests #418
+372
−35
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.
Resolves NEX-2296.
Add singleflight to deduplicate concurrent
GET/HEAD/OPTIONS/TRACErequests.Deduplicate concurrent requests to shared list endpoints using singleflight.
Many resources, such as databases, do not have individual endpoints and instead share a single "list" endpoint (e.g.,
ServiceDatabaseList).In practice, the deduplication applies to any identical request (same
method + host + path + query), with list endpoints being the primary motivation.This often results in multiple simultaneous requests for the same data, which can cause redundant API calls and unnecessary load. With singleflight enabled, identical in-flight requests are coalesced into one HTTP call and the buffered response bytes are fanned out to all callers (no persistent caching). Currently, the client uses only
GETfor reading, but additional safe methods may be supported in the future.Tests use
testing/synctestto deterministically validate deduplication and method isolation.Singleflight can be disabled via
AIVEN_CLIENT_ENABLE_SINGLE_FLIGHT/EnableSingleFlightOpt(default:true).