diff --git a/CHANGELOG.md b/CHANGELOG.md index b2f8868e6..d05493c93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## Unreleased +### Fixed + + - #3841, Log `503` client error to stderr - @taimoorzaeem + ## [12.2.7] - 2025-02-03 ### Fixed diff --git a/src/PostgREST/AppState.hs b/src/PostgREST/AppState.hs index a0f25a9f6..43b154b51 100644 --- a/src/PostgREST/AppState.hs +++ b/src/PostgREST/AppState.hs @@ -265,8 +265,9 @@ usePool AppState{stateObserver=observer, stateMainThreadId=mainThreadId, ..} ses SQL.ServerError{} -> when (Error.status (Error.PgError False err) >= HTTP.status500) $ observer $ QueryErrorCodeHighObs err - SQL.SessionUsageError (SQL.QueryError _ _ (SQL.ClientError _)) -> - pure () + err@(SQL.SessionUsageError (SQL.QueryError _ _ (SQL.ClientError _))) -> + -- An error on the client-side, usually indicates problems wth connection + observer $ QueryErrorCodeHighObs err ) return res diff --git a/test/io/test_io.py b/test/io/test_io.py index d05e1eb52..f6c479a4b 100644 --- a/test/io/test_io.py +++ b/test/io/test_io.py @@ -1644,3 +1644,22 @@ def test_jwt_cache_purges_expired_entries(defaultenv): response = postgrest.session.get("/authors_only", headers=hdrs3) assert response.status_code == 200 + + +def test_pgrst_log_503_client_error_to_stderr(defaultenv): + "PostgREST should log 503 errors to stderr" + + env = { + **defaultenv, + "PGAPPNAME": "test-io", + } + + with run(env=env) as postgrest: + + postgrest.session.get("/rpc/terminate_pgrst?appname=test-io") + + output = postgrest.read_stdout(nlines=6) + + log_message = '{"code":"PGRST001","details":"no connection to the server\\n","hint":null,"message":"Database client error. Retrying the connection."}\n' + + assert any(log_message in line for line in output)