TBR: third_party/go-sql-driver: Add log statements to thridparty go sql
driver to track down bug.
Calls to sql.Exec are sometimes taking 15+ min and returning
"duplicate primary key" errors. Add logging to the go-sql-driver
to find where exactly this is happening. In particular, this CL
intends to isolate whether the issue is the driver or Cloud SQL.
Change-Id: Iaaa324c0d892ffb866013fa5a96a2615274801e6
diff --git a/go/src/github.com/go-sql-driver/mysql/packets.go b/go/src/github.com/go-sql-driver/mysql/packets.go
index f2e385b..c738fa1 100644
--- a/go/src/github.com/go-sql-driver/mysql/packets.go
+++ b/go/src/github.com/go-sql-driver/mysql/packets.go
@@ -78,6 +78,7 @@
// Write packet buffer 'data'
func (mc *mysqlConn) writePacket(data []byte) error {
+ errLog.Print("start: writePacket")
pktLen := len(data) - 4
if pktLen > mc.maxPacketAllowed {
@@ -100,10 +101,13 @@
data[3] = mc.sequence
// Write packet
+ errLog.Print("start: mc.netConn.Write")
n, err := mc.netConn.Write(data[:4+size])
+ errLog.Print("end: mc.netConn.Write")
if err == nil && n == 4+size {
mc.sequence++
if size != maxPacketSize {
+ errLog.Print("end: writePacket")
return nil
}
pktLen -= size
@@ -418,7 +422,9 @@
// Result Set Header Packet
// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::Resultset
func (mc *mysqlConn) readResultSetHeaderPacket() (int, error) {
+ errLog.Print("start: mc.readPacket")
data, err := mc.readPacket()
+ errLog.Print("end: mc.readPacket err:", err)
if err == nil {
switch data[0] {
@@ -426,6 +432,7 @@
return 0, mc.handleOkPacket(data)
case iERR:
+ errLog.Print("err package recieved")
return 0, mc.handleErrorPacket(data)
case iLocalInFile:
diff --git a/go/src/github.com/go-sql-driver/mysql/statement.go b/go/src/github.com/go-sql-driver/mysql/statement.go
index 142ef54..3031cf6 100644
--- a/go/src/github.com/go-sql-driver/mysql/statement.go
+++ b/go/src/github.com/go-sql-driver/mysql/statement.go
@@ -40,7 +40,9 @@
return nil, driver.ErrBadConn
}
// Send command
+ errLog.Print("start: stmt.writeExecutePacket")
err := stmt.writeExecutePacket(args)
+ errLog.Print("end: stmt.writeExecutePacket")
if err != nil {
return nil, err
}
@@ -51,17 +53,23 @@
mc.insertId = 0
// Read Result
+ errLog.Print("start: mc.readResultSetHeaderPacket")
resLen, err := mc.readResultSetHeaderPacket()
+ errLog.Print("end: mc.readResultSetHeaderPacket")
if err == nil {
if resLen > 0 {
// Columns
+ errLog.Print("start: mc.readUntilEOF columns")
err = mc.readUntilEOF()
+ errLog.Print("end: mc.readUntilEOF columns")
if err != nil {
return nil, err
}
// Rows
+ errLog.Print("start: mc.readUntilEOF rows")
err = mc.readUntilEOF()
+ errLog.Print("end: mc.readUntilEOF rows")
}
if err == nil {
return &mysqlResult{