in internal/proxy/proxy.go [514:563]
func NewClient(ctx context.Context, d cloudsql.Dialer, l cloudsql.Logger, conf *Config, connRefuseNotify func()) (*Client, error) {
// Check if the caller has configured a dialer.
// Otherwise, initialize a new one.
if d == nil {
dialerOpts, err := conf.DialerOptions(l)
if err != nil {
return nil, fmt.Errorf("error initializing dialer: %v", err)
}
d, err = cloudsqlconn.NewDialer(ctx, dialerOpts...)
if err != nil {
return nil, fmt.Errorf("error initializing dialer: %v", err)
}
}
c := &Client{
logger: l,
dialer: d,
connRefuseNotify: connRefuseNotify,
conf: conf,
}
if conf.FUSEDir != "" {
return configureFUSE(c, conf)
}
for _, inst := range conf.Instances {
// Initiate refresh operation and warm the cache.
go func(name string) { _, _ = d.EngineVersion(ctx, name) }(inst.Name)
}
var mnts []*socketMount
pc := newPortConfig(conf.Port)
for _, inst := range conf.Instances {
m, err := c.newSocketMount(ctx, conf, pc, inst)
if err != nil {
for _, m := range mnts {
mErr := m.Close()
if mErr != nil {
l.Errorf("failed to close mount: %v", mErr)
}
}
return nil, fmt.Errorf("[%v] Unable to mount socket: %v", inst.Name, err)
}
l.Infof("[%s] Listening on %s", inst.Name, m.Addr())
mnts = append(mnts, m)
}
c.mnts = mnts
return c, nil
}