Skip to content

Commit 5590aca

Browse files
authored
mysql/azuremysql: use otelsql.OpenDB to wrap the connector (#3629)
1 parent 0efbc16 commit 5590aca

File tree

1 file changed

+22
-33
lines changed

1 file changed

+22
-33
lines changed

mysql/azuremysql/azuremysql.go

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -69,33 +69,28 @@ func (uo *URLOpener) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, err
6969
}
7070
password, _ := u.User.Password()
7171
c := &connector{
72-
addr: u.Host,
73-
user: u.User.Username(),
74-
password: password,
75-
dbName: strings.TrimPrefix(u.Path, "/"),
76-
// Make a copy of TraceOpts to avoid caller modifying.
77-
traceOpts: append([]otelsql.Option(nil), uo.TraceOpts...),
78-
provider: source,
79-
80-
sem: make(chan struct{}, 1),
81-
ready: make(chan struct{}),
72+
cfg: &mysql.Config{
73+
Net: "tcp",
74+
Addr: u.Host,
75+
User: u.User.Username(),
76+
Passwd: password,
77+
AllowCleartextPasswords: true,
78+
AllowNativePasswords: true,
79+
DBName: strings.TrimPrefix(u.Path, "/"),
80+
},
81+
provider: source,
82+
sem: make(chan struct{}, 1),
83+
ready: make(chan struct{}),
8284
}
8385
c.sem <- struct{}{}
84-
return sql.OpenDB(c), nil
86+
return otelsql.OpenDB(c, uo.TraceOpts...), nil
8587
}
8688

8789
type connector struct {
88-
addr string
89-
user string
90-
password string
91-
dbName string
92-
traceOpts []otelsql.Option
93-
9490
sem chan struct{} // receive to acquire, send to release
9591
provider CertPoolProvider // provides the CA certificate pool
96-
97-
ready chan struct{} // closed after writing dsn
98-
dsn string
92+
ready chan struct{} // closed after fetching certs successfully
93+
cfg *mysql.Config
9994
}
10095

10196
func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
@@ -116,29 +111,23 @@ func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
116111
c.sem <- struct{}{} // release
117112
return nil, fmt.Errorf("connect Azure MySql: register TLS: %v", err)
118113
}
119-
cfg := &mysql.Config{
120-
Net: "tcp",
121-
Addr: c.addr,
122-
User: c.user,
123-
Passwd: c.password,
124-
TLSConfig: tlsConfigName,
125-
AllowCleartextPasswords: true,
126-
AllowNativePasswords: true,
127-
DBName: c.dbName,
128-
}
129-
c.dsn = cfg.FormatDSN()
114+
c.cfg.TLSConfig = tlsConfigName
130115
close(c.ready)
131116
// Don't release sem: make it block forever, so this case won't be run again.
132117
case <-c.ready:
133118
// Already succeeded.
134119
case <-ctx.Done():
135120
return nil, fmt.Errorf("connect Azure MySql: waiting for certificates: %v", ctx.Err())
136121
}
137-
return c.Driver().Open(c.dsn)
122+
inner, err := mysql.NewConnector(c.cfg)
123+
if err != nil {
124+
return nil, fmt.Errorf("connect Azure MySql: create connector: %v", err)
125+
}
126+
return inner.Connect(ctx)
138127
}
139128

140129
func (c *connector) Driver() driver.Driver {
141-
return otelsql.WrapDriver(mysql.MySQLDriver{}, c.traceOpts...)
130+
return mysql.MySQLDriver{}
142131
}
143132

144133
var tlsConfigCounter uint32

0 commit comments

Comments
 (0)