fix: GCECredentials lazily fetches from the metadata server to ensure a universe domain is known #509
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.
As part of the logging work, to tamp down on the possible glut of logs on startup in high-traffic environments, we stopped eagerly fetching tokens from the client library credentials object. This was intended not to make any functional difference, because credential objects generally fetch their own tokens just-in-time when requested.
However, #508 revealed one case we missed: GCECredentials do not have a
universe_domain
set until the token is fetched, since the universe domain comes from the metadata service. Thus, client libraries would fail to initialize with a universe domain mismatch error. This happens only:gapic-common
gem is older than 0.23.0, because that version temporarily disabled universe domain checking for compute engine for unrelated reasonsBecause the intent is for a future version of
gapic-common
to re-enable universe domain checking, and because some customers have not or cannot updategapic-common
, we're going to work around this by causing GCECredentials to fetch its token just-in-time if its universe_domain is queried.Fixes #508