Skip to content

Add support for read/write timeouts #375

Closed
@newhook

Description

@newhook

The mysql driver code doesn't have any read/write deadlines. Thats bad as poor network conditions can lead to connections hanging forever. We had, for example, this one:

goroutine 8585754 [IO wait, 6382 minutes]:
net.(_pollDesc).Wait(0xc2097f2f40, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(_pollDesc).WaitRead(0xc2097f2f40, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(_netFD).Read(0xc2097f2ee0, 0xc2109a2000, 0x1000, 0x1000, 0x0, 0x7f74e732fe70, 0xc20a474c80)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(_conn).Read(0xc208955d10, 0xc2109a2000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
github.com/go-sql-driver/mysql.(_buffer).fill(0xc21074e480, 0x4, 0x0, 0x0)
/source/.gopack/vendor/src/github.com/go-sql-driver/mysql/buffer.go:55 +0x28e
github.com/go-sql-driver/mysql.(_buffer).readNext(0xc21074e480, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0)
/source/.gopack/vendor/src/github.com/go-sql-driver/mysql/buffer.go:76 +0x68
github.com/go-sql-driver/mysql.(_mysqlConn).readPacket(0xc209ab0280, 0x0, 0x0, 0x0, 0x0, 0x0)
/source/.gopack/vendor/src/github.com/go-sql-driver/mysql/packets.go:28 +0x7b
github.com/go-sql-driver/mysql.(_mysqlConn).readInitPacket(0xc209ab0280, 0x0, 0x0, 0x0, 0x0, 0x0)
/source/.gopack/vendor/src/github.com/go-sql-driver/mysql/packets.go:146 +0x72
github.com/go-sql-driver/mysql.(_MySQLDriver).Open(0x15ee208, 0xc20802d6c6, 0x35, 0x0, 0x0, 0x0, 0x0)
/source/.gopack/vendor/src/github.com/go-sql-driver/mysql/driver.go:54 +0x3f5
database/sql.(_DB).conn(0xc20841d400, 0xc210aef100, 0x0, 0x0)
/usr/local/go/src/database/sql/sql.go:664 +0x506
database/sql.(_DB).query(0xc20841d400, 0x107aab0, 0x67, 0xc20c53d5f8, 0x1, 0x1, 0x7f74c71ac6b8, 0x0, 0x0)
/usr/local/go/src/database/sql/sql.go:933 +0x43
database/sql.(_DB).Query(0xc20841d400, 0x107aab0, 0x67, 0xc20c53d5f8, 0x1, 0x1, 0x40f1cc, 0x0, 0x0)
/usr/local/go/src/database/sql/sql.go:924 +0xa6
database/sql.(*DB).QueryRow(0xc20841d400, 0x107aab0, 0x67, 0xc20c53d5f8, 0x1, 0x1, 0x40f98f)
/usr/local/go/src/database/sql/sql.go:1002 +0x66

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions