in dialer.go [191:269]
func NewDialer(ctx context.Context, opts ...Option) (*Dialer, error) {
cfg := &dialerConfig{
refreshTimeout: alloydb.RefreshTimeout,
dialFunc: proxy.Dial,
logger: nullLogger{},
userAgents: []string{userAgent},
}
for _, opt := range opts {
opt(cfg)
if cfg.err != nil {
return nil, cfg.err
}
}
if cfg.disableMetadataExchange && cfg.useIAMAuthN {
return nil, errors.New("incompatible options: WithOptOutOfAdvancedConnection " +
"check cannot be used with WithIAMAuthN")
}
userAgent := strings.Join(cfg.userAgents, " ")
// Add user agent to the end to make sure it's not overridden.
cfg.clientOpts = append(cfg.clientOpts, option.WithUserAgent(userAgent))
// If no token source is configured, use ADC's token source.
ts := cfg.tokenSource
if ts == nil {
var err error
ts, err = google.DefaultTokenSource(ctx, CloudPlatformScope)
if err != nil {
return nil, err
}
}
cOpts := append(cfg.alloydbClientOpts, cfg.clientOpts...)
client, err := alloydbadmin.NewAlloyDBAdminRESTClient(ctx, cOpts...)
if err != nil {
return nil, fmt.Errorf("failed to create AlloyDB Admin API client: %v", err)
}
dialCfg := dialCfg{
ipType: alloydb.PrivateIP,
tcpKeepAlive: defaultTCPKeepAlive,
}
for _, opt := range cfg.dialOpts {
opt(&dialCfg)
}
if err := tel.InitMetrics(); err != nil {
return nil, err
}
dialerID := uuid.New().String()
g, err := newKeyGenerator(cfg.rsaKey, cfg.lazyRefresh,
func() (*rsa.PrivateKey, error) {
return rsa.GenerateKey(rand.Reader, 2048)
})
if err != nil {
return nil, err
}
d := &Dialer{
closed: make(chan struct{}),
cache: make(map[alloydb.InstanceURI]monitoredCache),
lazyRefresh: cfg.lazyRefresh,
disableMetadataExchange: cfg.disableMetadataExchange,
disableBuiltInMetrics: cfg.disableBuiltInTelemetry,
staticConnInfo: cfg.staticConnInfo,
keyGenerator: g,
refreshTimeout: cfg.refreshTimeout,
client: client,
clientOpts: cfg.clientOpts,
logger: cfg.logger,
defaultDialCfg: dialCfg,
dialerID: dialerID,
metricRecorders: map[alloydb.InstanceURI]telv2.MetricRecorder{},
dialFunc: cfg.dialFunc,
useIAMAuthN: cfg.useIAMAuthN,
iamTokenSource: ts,
userAgent: userAgent,
buffer: newBuffer(),
}
return d, nil
}