Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e8b96f2

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

File tree

5 files changed

+18
-19
lines changed

5 files changed

+18
-19
lines changed

‎buffer.go‎

Lines changed: 12 additions & 6 deletions
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
}

‎compress.go‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func (c *compIO) writePackets(packets []byte) (int, error) {
195195
}
196196
}
197197

198-
if err := c.mc.writeCompressedPacket(buf.Bytes(), uncompressedLen); err != nil {
198+
if err := c.writeCompressedPacket(buf.Bytes(), uncompressedLen); err != nil {
199199
return 0, err
200200
}
201201
dataLen -= payloadLen
@@ -207,7 +207,8 @@ func (c *compIO) writePackets(packets []byte) (int, error) {
207207

208208
// writeCompressedPacket writes a compressed packet with header.
209209
// data should start with 7 size space for header followed by payload.
210-
func (mc *mysqlConn) writeCompressedPacket(data []byte, uncompressedLen int) error {
210+
func (c *compIO) writeCompressedPacket(data []byte, uncompressedLen int) error {
211+
mc := c.mc
211212
comprLength := len(data) - 7
212213
if debugTrace {
213214
fmt.Printf(
@@ -220,7 +221,7 @@ func (mc *mysqlConn) writeCompressedPacket(data []byte, uncompressedLen int) err
220221
data[3] = mc.compressSequence
221222
putUint24(data[4:7], uncompressedLen)
222223

223-
if _, err := mc.netConn.Write(data); err != nil {
224+
if _, err := mc.buf.writePackets(data); err != nil {
224225
mc.log("writing compressed packet:", err)
225226
return err
226227
}

‎connection.go‎

Lines changed: 0 additions & 1 deletion
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‎

Lines changed: 2 additions & 2 deletions
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‎

Lines changed: 0 additions & 7 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /