Skip to content

Commit 54b1f4a

Browse files
committed
move writeTimeout from mysqlConn to buffer
1 parent 3f89621 commit 54b1f4a

File tree

4 files changed

+14
-16
lines changed

4 files changed

+14
-16
lines changed

buffer.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ const maxCachedBufSize = 256 * 1024
2323
// The buffer is similar to bufio.Reader / Writer but zero-copy-ish
2424
// Also highly optimized for this particular use case.
2525
type buffer struct {
26-
buf []byte // read buffer.
27-
cachedBuf []byte // buffer that will be reused. len(cachedBuf) <= maxCachedBufSize.
28-
nc net.Conn
29-
timeout time.Duration
26+
buf []byte // read buffer.
27+
cachedBuf []byte // buffer that will be reused. len(cachedBuf) <= maxCachedBufSize.
28+
nc net.Conn
29+
readTimeout time.Duration
30+
writeTimeout time.Duration
3031
}
3132

3233
// newBuffer allocates and returns a new buffer.
@@ -64,8 +65,8 @@ func (b *buffer) fill(need int) error {
6465
copy(dest[:n], b.buf)
6566

6667
for {
67-
if b.timeout > 0 {
68-
if err := b.nc.SetReadDeadline(time.Now().Add(b.timeout)); err != nil {
68+
if b.readTimeout > 0 {
69+
if err := b.nc.SetReadDeadline(time.Now().Add(b.readTimeout)); err != nil {
6970
return err
7071
}
7172
}
@@ -159,5 +160,10 @@ func (b *buffer) store(buf []byte) {
159160
// writePackets is a proxy function to nc.Write.
160161
// This is used to make the buffer type compatible with compressed I/O.
161162
func (b *buffer) writePackets(packets []byte) (int, error) {
163+
if b.writeTimeout > 0 {
164+
if err := b.nc.SetWriteDeadline(time.Now().Add(b.writeTimeout)); err != nil {
165+
return 0, err
166+
}
167+
}
162168
return b.nc.Write(packets)
163169
}

connection.go

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ type mysqlConn struct {
3333
connector *connector
3434
maxAllowedPacket int
3535
maxWriteSize int
36-
writeTimeout time.Duration
3736
flags clientFlag
3837
status statusFlag
3938
sequence uint8

connector.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
132132
mc.packetRW = &mc.buf
133133

134134
// Set I/O timeouts
135-
mc.buf.timeout = mc.cfg.ReadTimeout
136-
mc.writeTimeout = mc.cfg.WriteTimeout
135+
mc.buf.readTimeout = mc.cfg.ReadTimeout
136+
mc.buf.writeTimeout = mc.cfg.WriteTimeout
137137

138138
// Reading Handshake Initialization Packet
139139
authData, plugin, err := mc.readHandshakePacket()

packets.go

-7
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,6 @@ func (mc *mysqlConn) writePacket(data []byte) error {
125125
if debugTrace {
126126
fmt.Printf("writePacket: size=%v seq=%v", size, mc.sequence)
127127
}
128-
if mc.writeTimeout > 0 {
129-
if err := mc.netConn.SetWriteDeadline(time.Now().Add(mc.writeTimeout)); err != nil {
130-
mc.cleanup()
131-
mc.log(err)
132-
return err
133-
}
134-
}
135128

136129
n, err := mc.packetRW.writePackets(data[:4+size])
137130
if err != nil {

0 commit comments

Comments
 (0)