Fix circular dependencies in @azure/cosmos #5374
Merged
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.
There are 2 circular dependency problems
RequestHandler -> RetryUtility -> RequestHandler
Problem:
RequestHandler.execute
callsretryUtitlity.execute
to retry the request if there is an error. HoweverRetryUtility.execute
callsRequestHandler.executeRequest
causing the circular dependencyThere are a few options to fix this:
a) Move retryUtility.execute to RequestHandler
b) Have pass executeRequest to retryUtility.execute as a parameter
c) Move executeRequest to retryUtility
I think option (b) would be preferable because it would provide flexibility of passing any other request to be retried if needed, without a hard dependency on RequestHandler
@ramya-rao-a , @southpolesteve, @HarshaNalluru - What do you think? Do you have any other options in mind?
HeaderUtils -> QueryMetrics -> ClientSideMetrics -> HeaderUtils
Problem:
headerUtils.getInitialHeader
usesqueryMetrics.zero
which alsoclientSideMetrics.zero
. SinceclientSideMetrics.add
usesheaderUtils.getRequestChargeIfAny
.headerUtils.getRequestChargeIfAny
returnsheaders
as is if it is a numberSince
clientSideMetrics.requestCharge
is always a number, we don't really need to callheaderUtils.getRequestChargeIfAny
, we can just useclientSideMetrics.requestCharge
directly.Fixes #5255