feat: recover on pg_terminate_backend
This commit is contained in:
committed by
Steve Chavez
parent
d54a2f48de
commit
07cb0b582e
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user