in internal/cloudsql/lazy.go [70:118]
func (c *LazyRefreshCache) ConnectionInfo(
ctx context.Context,
) (ConnectionInfo, error) {
c.mu.Lock()
defer c.mu.Unlock()
// strip monotonic clock with UTC()
now := time.Now().UTC()
// Pad expiration with a buffer to give the client plenty of time to
// establish a connection to the server with the certificate.
exp := c.cached.Expiration.UTC().Add(-refreshBuffer)
if !c.needsRefresh && now.Before(exp) {
c.logger.Debugf(
ctx,
"[%v] Connection info is still valid, using cached info",
c.connName.String(),
)
return c.cached, nil
}
c.logger.Debugf(
ctx,
"[%v] Connection info refresh operation started",
c.connName.String(),
)
ci, err := c.r.ConnectionInfo(ctx, c.connName, c.useIAMAuthNDial)
if err != nil {
c.logger.Debugf(
ctx,
"[%v] Connection info refresh operation failed, err = %v",
c.connName.String(),
err,
)
return ConnectionInfo{}, err
}
c.logger.Debugf(
ctx,
"[%v] Connection info refresh operation complete",
c.connName.String(),
)
c.logger.Debugf(
ctx,
"[%v] Current certificate expiration = %v",
c.connName.String(),
ci.Expiration.UTC().Format(time.RFC3339),
)
c.cached = ci
c.needsRefresh = false
return ci, nil
}