Skip to content

Commit 37fe842

Browse files
committed
mysql/azuremysql: migrate to use otelsql.OpenDB() for wrap the connector
1 parent cc1db3f commit 37fe842

File tree

1 file changed

+18
-35
lines changed

1 file changed

+18
-35
lines changed

mysql/azuremysql/azuremysql.go

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131
"database/sql/driver"
3232
"fmt"
3333
"net/url"
34-
"strings"
3534
"sync/atomic"
3635

3736
"github.com/XSAM/otelsql"
@@ -67,35 +66,25 @@ func (uo *URLOpener) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, err
6766
if u.Host == "" {
6867
return nil, fmt.Errorf("open Azure database: empty endpoint")
6968
}
70-
password, _ := u.User.Password()
69+
cfg, err := cdkmysql.ConfigFromURL(u)
70+
if err != nil {
71+
return nil, fmt.Errorf("open Azure MySQL: %v", err)
72+
}
7173
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{}),
74+
cfg: cfg,
75+
provider: source,
76+
sem: make(chan struct{}, 1),
77+
ready: make(chan struct{}),
8278
}
8379
c.sem <- struct{}{}
84-
return sql.OpenDB(c), nil
80+
return otelsql.OpenDB(c, uo.TraceOpts...), nil
8581
}
8682

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

10190
func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
@@ -116,29 +105,23 @@ func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
116105
c.sem <- struct{}{} // release
117106
return nil, fmt.Errorf("connect Azure MySql: register TLS: %v", err)
118107
}
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()
108+
c.cfg.TLSConfig = tlsConfigName
130109
close(c.ready)
131110
// Don't release sem: make it block forever, so this case won't be run again.
132111
case <-c.ready:
133112
// Already succeeded.
134113
case <-ctx.Done():
135114
return nil, fmt.Errorf("connect Azure MySql: waiting for certificates: %v", ctx.Err())
136115
}
137-
return c.Driver().Open(c.dsn)
116+
inner, err := mysql.NewConnector(c.cfg)
117+
if err != nil {
118+
return nil, fmt.Errorf("connect Azure MySql: create connector: %v", err)
119+
}
120+
return inner.Connect(ctx)
138121
}
139122

140123
func (c *connector) Driver() driver.Driver {
141-
return otelsql.WrapDriver(mysql.MySQLDriver{}, c.traceOpts...)
124+
return mysql.MySQLDriver{}
142125
}
143126

144127
var tlsConfigCounter uint32

0 commit comments

Comments
 (0)