1
0
Fork 0

Better errors for timeout

master
Philip O'Toole 8 months ago
parent 0927e632a7
commit b9a1fdb273

@ -48,6 +48,9 @@ var (
// ErrWALReplayDirectoryMismatch is returned when the WAL file(s) are not in the same // ErrWALReplayDirectoryMismatch is returned when the WAL file(s) are not in the same
// directory as the database file. // directory as the database file.
ErrWALReplayDirectoryMismatch = errors.New("WAL file(s) not in same directory as database file") ErrWALReplayDirectoryMismatch = errors.New("WAL file(s) not in same directory as database file")
// ErrQueryTimeout is returned when a query times out.
ErrQueryTimeout = errors.New("query timeout")
) )
// CheckpointMode is the mode in which a checkpoint runs. // CheckpointMode is the mode in which a checkpoint runs.
@ -859,7 +862,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 = err.Error() rows.Error = rewriteContextTimeout(err).Error()
return rows, nil return rows, nil
} }
@ -1512,3 +1515,10 @@ func lastModified(path string) (t time.Time, retError error) {
} }
return info.ModTime(), nil return info.ModTime(), nil
} }
func rewriteContextTimeout(err error) error {
if err == context.DeadlineExceeded {
return ErrQueryTimeout
}
return err
}

@ -1085,8 +1085,8 @@ func Test_QueryShouldTimeout(t *testing.T) {
t.Fatalf("expected one result, got %d: %s", len(r), asJSON(r)) t.Fatalf("expected one result, got %d: %s", len(r), asJSON(r))
} }
res := r[0] res := r[0]
if !strings.Contains(res.Error, "context deadline exceeded") { if !strings.Contains(res.Error, "query timeout") {
t.Fatalf("expected context.DeadlineExceeded, got %s", res.Error) t.Fatalf("expected query timeout, got %s", res.Error)
} }
// ... and with tx // ... and with tx
@ -1101,8 +1101,8 @@ func Test_QueryShouldTimeout(t *testing.T) {
t.Fatalf("expected one result, got %d: %s", len(r), asJSON(r)) t.Fatalf("expected one result, got %d: %s", len(r), asJSON(r))
} }
res = r[0] res = r[0]
if !strings.Contains(res.Error, "context deadline exceeded") { if !strings.Contains(res.Error, "query timeout") {
t.Fatalf("expected context.DeadlineExceeded, got %s", res.Error) t.Fatalf("expected query timeout, got %s", res.Error)
} }
} }
} }

Loading…
Cancel
Save