in dialer.go [696:750]
func (d *Dialer) connectionInfoCache(ctx context.Context, uri alloydb.InstanceURI, mr telv2.MetricRecorder) (monitoredCache, bool, error) {
d.lock.RLock()
c, ok := d.cache[uri]
d.lock.RUnlock()
if !ok {
d.lock.Lock()
defer d.lock.Unlock()
// Recheck to ensure instance wasn't created between locks
c, ok = d.cache[uri]
if !ok {
d.logger.Debugf(ctx, "[%v] Connection info added to cache", uri.String())
k, err := d.keyGenerator.rsaKey()
if err != nil {
return monitoredCache{}, ok, err
}
var cache connectionInfoCache
switch {
case d.lazyRefresh:
cache = alloydb.NewLazyRefreshCache(
uri,
d.logger,
d.client, k,
d.refreshTimeout, d.dialerID,
d.disableMetadataExchange,
d.userAgent,
mr,
)
case d.staticConnInfo != nil:
var err error
cache, err = alloydb.NewStaticConnectionInfoCache(
uri,
d.logger,
d.staticConnInfo,
)
if err != nil {
return monitoredCache{}, ok, err
}
default:
cache = alloydb.NewRefreshAheadCache(
uri,
d.logger,
d.client, k,
d.refreshTimeout, d.dialerID,
d.disableMetadataExchange,
d.userAgent,
mr,
)
}
var open uint64
c = monitoredCache{openConns: &open, connectionInfoCache: cache}
d.cache[uri] = c
}
}
return c, ok, nil
}