1
0
Fork 0

Refine query timeout errors

master
Philip O'Toole 8 months ago
parent 7888122a63
commit 7334aafb97

@ -51,6 +51,9 @@ var (
// ErrQueryTimeout is returned when a query times out. // ErrQueryTimeout is returned when a query times out.
ErrQueryTimeout = errors.New("query timeout") ErrQueryTimeout = errors.New("query timeout")
// ErrExecuteTimeout is returned when an execute times out.
ErrExecuteTimeout = errors.New("execute timeout")
) )
// CheckpointMode is the mode in which a checkpoint runs. // CheckpointMode is the mode in which a checkpoint runs.
@ -663,6 +666,7 @@ func (db *DB) executeStmtWithConn(ctx context.Context, stmt *command.Statement,
r, err := e.ExecContext(ctx, stmt.Sql, parameters...) r, err := e.ExecContext(ctx, stmt.Sql, parameters...)
if err != nil { if err != nil {
err = rewriteContextTimeout(err, ErrExecuteTimeout)
result.Error = err.Error() result.Error = err.Error()
return result, err return result, err
} }
@ -862,7 +866,7 @@ func (db *DB) queryStmtWithConn(ctx context.Context, stmt *command.Statement, xT
// Check for errors from iterating over rows. // Check for errors from iterating over rows.
if err := rs.Err(); err != nil { if err := rs.Err(); err != nil {
stats.Add(numQueryErrors, 1) stats.Add(numQueryErrors, 1)
rows.Error = rewriteContextTimeout(err).Error() rows.Error = rewriteContextTimeout(err, ErrQueryTimeout).Error()
return rows, nil return rows, nil
} }
@ -1516,9 +1520,9 @@ func lastModified(path string) (t time.Time, retError error) {
return info.ModTime(), nil return info.ModTime(), nil
} }
func rewriteContextTimeout(err error) error { func rewriteContextTimeout(err, retErr error) error {
if err == context.DeadlineExceeded { if err == context.DeadlineExceeded {
return ErrQueryTimeout return retErr
} }
return err return err
} }

@ -1054,8 +1054,8 @@ FROM test_table t1 LEFT OUTER JOIN test_table t2`
} }
res := r[0] res := r[0]
if !strings.Contains(res.Error, "context deadline exceeded") { if !strings.Contains(res.Error, ErrExecuteTimeout.Error()) {
t.Fatalf("expected context.DeadlineExceeded, got %s", res.Error) t.Fatalf("expected execute timeout, got %s", res.Error)
} }
qr, err := db.QueryStringStmt("SELECT COUNT(*) FROM test_table") qr, err := db.QueryStringStmt("SELECT COUNT(*) FROM test_table")
@ -1125,7 +1125,7 @@ func Test_RequestShouldTimeout(t *testing.T) {
} }
r := res[0] r := res[0]
if !strings.Contains(r.GetQ().Error, "context deadline exceeded") { if !strings.Contains(r.GetQ().Error, ErrQueryTimeout.Error()) {
t.Fatalf("expected context.DeadlineExceeded, got %s", r.GetQ().Error) t.Fatalf("expected context.DeadlineExceeded, got %s", r.GetQ().Error)
} }
} }

Loading…
Cancel
Save