func()

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
}