in internal/cloudsql/instance.go [126:160]
func NewRefreshAheadCache(
cn instance.ConnName,
l debug.ContextLogger,
client *sqladmin.Service,
key *rsa.PrivateKey,
refreshTimeout time.Duration,
tp auth.TokenProvider,
dialerID string,
useIAMAuthNDial bool,
) *RefreshAheadCache {
ctx, cancel := context.WithCancel(context.Background())
i := &RefreshAheadCache{
connName: cn,
logger: l,
l: rate.NewLimiter(rate.Every(refreshInterval), refreshBurst),
r: newAdminAPIClient(
l,
client,
key,
tp,
dialerID,
),
refreshTimeout: refreshTimeout,
useIAMAuthNDial: useIAMAuthNDial,
ctx: ctx,
cancel: cancel,
}
// For the initial refresh operation, set cur = next so that connection
// requests block until the first refresh is complete.
i.mu.Lock()
i.cur = i.scheduleRefresh(0)
i.next = i.cur
i.mu.Unlock()
return i
}