Skip to content

Commit 70d8617

Browse files
committed
remove errBadConnNoWrite and markBadConn
1 parent f62f523 commit 70d8617

File tree

5 files changed

+27
-48
lines changed

5 files changed

+27
-48
lines changed

connection.go

+5-14
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,6 @@ func (mc *mysqlConn) handleParams() (err error) {
8686
return
8787
}
8888

89-
// markBadConn replaces errBadConnNoWrite with driver.ErrBadConn.
90-
// This function is used to return driver.ErrBadConn only when safe to retry.
91-
func (mc *mysqlConn) markBadConn(err error) error {
92-
if err == errBadConnNoWrite {
93-
return driver.ErrBadConn
94-
}
95-
return err
96-
}
97-
9889
func (mc *mysqlConn) Begin() (driver.Tx, error) {
9990
return mc.begin(false)
10091
}
@@ -113,7 +104,7 @@ func (mc *mysqlConn) begin(readOnly bool) (driver.Tx, error) {
113104
if err == nil {
114105
return &mysqlTx{mc}, err
115106
}
116-
return nil, mc.markBadConn(err)
107+
return nil, err
117108
}
118109

119110
func (mc *mysqlConn) Close() (err error) {
@@ -315,15 +306,15 @@ func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, err
315306
copied := mc.result
316307
return &copied, err
317308
}
318-
return nil, mc.markBadConn(err)
309+
return nil, err
319310
}
320311

321312
// Internal function to execute commands
322313
func (mc *mysqlConn) exec(query string) error {
323314
handleOk := mc.clearResult()
324315
// Send command
325316
if err := mc.writeCommandPacketStr(comQuery, query); err != nil {
326-
return mc.markBadConn(err)
317+
return err
327318
}
328319

329320
// Read Result
@@ -371,7 +362,7 @@ func (mc *mysqlConn) query(query string, args []driver.Value) (*textRows, error)
371362
// Send command
372363
err := mc.writeCommandPacketStr(comQuery, query)
373364
if err != nil {
374-
return nil, mc.markBadConn(err)
365+
return nil, err
375366
}
376367

377368
// Read Result
@@ -462,7 +453,7 @@ func (mc *mysqlConn) Ping(ctx context.Context) (err error) {
462453

463454
handleOk := mc.clearResult()
464455
if err = mc.writeCommandPacket(comPing); err != nil {
465-
return mc.markBadConn(err)
456+
return err
466457
}
467458

468459
return handleOk.readResultOK()

connection_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ func TestPingMarkBadConnection(t *testing.T) {
169169

170170
err := mc.Ping(context.Background())
171171

172-
if err != driver.ErrBadConn {
173-
t.Errorf("expected driver.ErrBadConn, got %#v", err)
172+
if !errors.Is(err, nc.err) {
173+
t.Errorf("expected %v, got %#v", nc.err, err)
174174
}
175175
}
176176

@@ -186,8 +186,8 @@ func TestPingErrInvalidConn(t *testing.T) {
186186

187187
err := mc.Ping(context.Background())
188188

189-
if err != nc.err {
190-
t.Errorf("expected %#v, got %#v", nc.err, err)
189+
if !errors.Is(err, nc.err) {
190+
t.Errorf("expected %v, got %#v", nc.err, err)
191191
}
192192
}
193193

errors.go

-6
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@ var (
2929
ErrPktSyncMul = errors.New("commands out of sync. Did you run multiple statements at once?")
3030
ErrPktTooLarge = errors.New("packet for query is too large. Try adjusting the `Config.MaxAllowedPacket`")
3131
ErrBusyBuffer = errors.New("busy buffer")
32-
33-
// errBadConnNoWrite is used for connection errors where nothing was sent to the database yet.
34-
// If this happens first in a function starting a database interaction, it should be replaced by driver.ErrBadConn
35-
// to trigger a resend. Use mc.markBadConn(err) to do this.
36-
// See https://github.com/go-sql-driver/mysql/pull/302
37-
errBadConnNoWrite = errors.New("bad connection")
3832
)
3933

4034
var defaultLogger = Logger(log.New(os.Stderr, "[mysql] ", log.Ldate|log.Ltime))

packets.go

+16-22
Original file line numberDiff line numberDiff line change
@@ -125,17 +125,11 @@ func (mc *mysqlConn) writePacket(data []byte) error {
125125

126126
n, err := mc.netConn.Write(data[:4+size])
127127
if err != nil {
128+
mc.cleanup()
128129
if cerr := mc.canceled.Value(); cerr != nil {
129130
return cerr
130131
}
131-
mc.cleanup()
132-
if n == 0 && pktLen == len(data)-4 {
133-
// only for the first loop iteration when nothing was written yet
134-
mc.log(err)
135-
return errBadConnNoWrite
136-
} else {
137-
return err
138-
}
132+
return err
139133
}
140134
if n != 4+size {
141135
// io.Writer(b) must return a non-nil error if it cannot write len(b) bytes.
@@ -305,8 +299,8 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string
305299
data, err := mc.buf.takeBuffer(pktLen + 4)
306300
if err != nil {
307301
// cannot take the buffer. Something must be wrong with the connection
308-
mc.log(err)
309-
return errBadConnNoWrite
302+
mc.cleanup()
303+
return err
310304
}
311305

312306
// ClientFlags [32 bit]
@@ -395,8 +389,8 @@ func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error {
395389
data, err := mc.buf.takeBuffer(pktLen)
396390
if err != nil {
397391
// cannot take the buffer. Something must be wrong with the connection
398-
mc.log(err)
399-
return errBadConnNoWrite
392+
mc.cleanup()
393+
return err
400394
}
401395

402396
// Add the auth data [EOF]
@@ -415,8 +409,8 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error {
415409
data, err := mc.buf.takeSmallBuffer(4 + 1)
416410
if err != nil {
417411
// cannot take the buffer. Something must be wrong with the connection
418-
mc.log(err)
419-
return errBadConnNoWrite
412+
mc.cleanup()
413+
return err
420414
}
421415

422416
// Add command byte
@@ -434,8 +428,8 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error {
434428
data, err := mc.buf.takeBuffer(pktLen + 4)
435429
if err != nil {
436430
// cannot take the buffer. Something must be wrong with the connection
437-
mc.log(err)
438-
return errBadConnNoWrite
431+
mc.cleanup()
432+
return err
439433
}
440434

441435
// Add command byte
@@ -455,8 +449,8 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error {
455449
data, err := mc.buf.takeSmallBuffer(4 + 1 + 4)
456450
if err != nil {
457451
// cannot take the buffer. Something must be wrong with the connection
458-
mc.log(err)
459-
return errBadConnNoWrite
452+
mc.cleanup()
453+
return err
460454
}
461455

462456
// Add command byte
@@ -998,8 +992,8 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
998992
}
999993
if err != nil {
1000994
// cannot take the buffer. Something must be wrong with the connection
1001-
mc.log(err)
1002-
return errBadConnNoWrite
995+
mc.cleanup()
996+
return err
1003997
}
1004998

1005999
// command [1 byte]
@@ -1197,8 +1191,8 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
11971191
if valuesCap != cap(paramValues) {
11981192
data = append(data[:pos], paramValues...)
11991193
if err = mc.buf.store(data); err != nil {
1200-
mc.log(err)
1201-
return errBadConnNoWrite
1194+
mc.cleanup()
1195+
return err
12021196
}
12031197
}
12041198

statement.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
5656
// Send command
5757
err := stmt.writeExecutePacket(args)
5858
if err != nil {
59-
return nil, stmt.mc.markBadConn(err)
59+
return nil, err
6060
}
6161

6262
mc := stmt.mc
@@ -99,7 +99,7 @@ func (stmt *mysqlStmt) query(args []driver.Value) (*binaryRows, error) {
9999
// Send command
100100
err := stmt.writeExecutePacket(args)
101101
if err != nil {
102-
return nil, stmt.mc.markBadConn(err)
102+
return nil, err
103103
}
104104

105105
mc := stmt.mc

0 commit comments

Comments
 (0)