feat: recover on pg_terminate_backend

This commit is contained in:
steve-chavez
2023-06-06 14:41:37 -05:00
committed by Steve Chavez
parent d54a2f48de
commit 07cb0b582e
3 changed files with 4 additions and 3 deletions
+1
View File
@@ -14,6 +14,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- #2703, Add pre-config function - @steve-chavez - #2703, Add pre-config function - @steve-chavez
+ New config option `db-pre-config`(empty by default) + New config option `db-pre-config`(empty by default)
+ Allows using the in-database configuration without SUPERUSER + Allows using the in-database configuration without SUPERUSER
- #2781, Start automatic connection recovery when pool connections are closed with pg_terminate_backend - @steve-chavez
### Fixed ### Fixed
+2 -3
View File
@@ -24,8 +24,7 @@ module PostgREST.AppState
, runListener , runListener
) where ) where
import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Char8 as BS8
import qualified Data.ByteString.Lazy as LBS import qualified Data.ByteString.Lazy as LBS
import Data.Either.Combinators (whenLeft) import Data.Either.Combinators (whenLeft)
import qualified Data.Text.Encoding as T import qualified Data.Text.Encoding as T
@@ -456,7 +455,7 @@ checkIsFatal (SQL.ConnectionUsageError e)
where isAuthFailureMessage = where isAuthFailureMessage =
("FATAL: password authentication failed" `isInfixOf` failureMessage) || ("FATAL: password authentication failed" `isInfixOf` failureMessage) ||
("no password supplied" `isInfixOf` failureMessage) ("no password supplied" `isInfixOf` failureMessage)
failureMessage = BS8.unpack $ fromMaybe mempty e failureMessage = BS.unpack $ fromMaybe mempty e
checkIsFatal(SQL.SessionUsageError (SQL.QueryError _ _ (SQL.ResultError serverError))) checkIsFatal(SQL.SessionUsageError (SQL.QueryError _ _ (SQL.ResultError serverError)))
= case serverError of = case serverError of
-- Check for a syntax error (42601 is the pg code). This would mean the error is on our part somehow, so we treat it as fatal. -- Check for a syntax error (42601 is the pg code). This would mean the error is on our part somehow, so we treat it as fatal.
+1
View File
@@ -428,6 +428,7 @@ pgErrorStatus authed (SQL.SessionUsageError (SQL.QueryError _ _ (SQL.ResultError
'5':'3':_ -> HTTP.status503 -- insufficient resources '5':'3':_ -> HTTP.status503 -- insufficient resources
'5':'4':_ -> HTTP.status413 -- too complex '5':'4':_ -> HTTP.status413 -- too complex
'5':'5':_ -> HTTP.status500 -- obj not on prereq state '5':'5':_ -> HTTP.status500 -- obj not on prereq state
'5':'7':'P':'0':'1':_ -> HTTP.status503 -- terminating connection due to administrator command
'5':'7':_ -> HTTP.status500 -- operator intervention '5':'7':_ -> HTTP.status500 -- operator intervention
'5':'8':_ -> HTTP.status500 -- system error '5':'8':_ -> HTTP.status500 -- system error
'F':'0':_ -> HTTP.status500 -- conf file error 'F':'0':_ -> HTTP.status500 -- conf file error