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
// directory as the 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.
@ -859,7 +862,7 @@ func (db *DB) queryStmtWithConn(ctx context.Context, stmt *command.Statement, xT
// Check for errors from iterating over rows.
if err := rs.Err(); err != nil {
stats.Add(numQueryErrors, 1)
rows.Error = err.Error()
rows.Error = rewriteContextTimeout(err).Error()
return rows, nil
}
@ -1512,3 +1515,10 @@ func lastModified(path string) (t time.Time, retError error) {
}
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))
}
res := r[0]
if !strings.Contains(res.Error, "context deadline exceeded") {
t.Fatalf("expected context.DeadlineExceeded, got %s", res.Error)
if !strings.Contains(res.Error, "query timeout") {
t.Fatalf("expected query timeout, got %s", res.Error)
}
// ... 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))
}
res = r[0]
if !strings.Contains(res.Error, "context deadline exceeded") {
t.Fatalf("expected context.DeadlineExceeded, got %s", res.Error)
if !strings.Contains(res.Error, "query timeout") {
t.Fatalf("expected query timeout, got %s", res.Error)
}
}
}

Loading…
Cancel
Save