Skip to content

Commit 873c19a

Browse files
ferhatelmasfenos
andauthored
fix: database slowdown error message check (#1122)
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com> Co-authored-by: Fabrizio <fabri.feno@gmail.com>
1 parent 528be17 commit 873c19a

2 files changed

Lines changed: 41 additions & 2 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { DatabaseError } from 'pg'
2+
import { isDatabaseSlowDownError } from './database-error'
3+
4+
function databaseError(message: string): DatabaseError {
5+
return new DatabaseError(message, message.length, 'error')
6+
}
7+
8+
describe('isDatabaseSlowDownError', () => {
9+
it('matches cached server login failures with provider-specific suffixes', () => {
10+
const messages = [
11+
'server login has been failing, cached error: connect timeout (server_login_retry)',
12+
'server login has been failing, cached error: the database system is not accepting connections',
13+
'server login has been failing, cached error: pgbouncer cannot connect to server',
14+
]
15+
16+
for (const message of messages) {
17+
expect(isDatabaseSlowDownError(databaseError(message))).toBe(true)
18+
}
19+
})
20+
21+
it('does not match unrelated database errors', () => {
22+
const messages = [
23+
'relation "objects" does not exist',
24+
'duplicate key value violates unique constraint "objects_pkey"',
25+
'syntax error at or near "from"',
26+
]
27+
28+
for (const message of messages) {
29+
expect(isDatabaseSlowDownError(databaseError(message))).toBe(false)
30+
}
31+
})
32+
33+
it('does not match slowdown text on non-database errors', () => {
34+
expect(
35+
isDatabaseSlowDownError(
36+
new Error('server login has been failing, cached error: connect timeout')
37+
)
38+
).toBe(false)
39+
})
40+
})

src/internal/errors/database-error.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ export function isDatabaseSlowDownError(error: Error): boolean {
1010
'no more connections allowed',
1111
'sorry, too many clients already',
1212
'server login has been failing, try again later',
13-
'server login has been failing, cached error: connect timeout (server_login_retry)',
14-
'server login has been failing, cached error: the database system is not accepting connections (server_login_retry)',
13+
'server login has been failing, cached error',
1514
].some((msg) => error.message.includes(msg))
1615
)
1716
}

0 commit comments

Comments
 (0)