diff --git a/CHANGELOG.md b/CHANGELOG.md index 91c7342824..b0e3d1ee48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - #3607, Log to stderr when the JWT secret is less than 32 characters long - @laurenceisla - #2858, Performance improvements when calling RPCs via GET using indexes in more cases - @wolfgangwalther - #3560, Log resolved host in "Listening on ..." messages - @develop7 + - #3727, Log maximum pool size - @steve-chavez ### Fixed @@ -20,6 +21,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - #3693, Fix spread embedding errors when using the `count()` aggregate without a field - @laurenceisla + Fixed `"column reference is ambiguous"` error when selecting `?select=...table(col,count())` + Fixed `"column . does not exist"` error when selecting `?select=...table(aias:count())` + - #3727, Clarify "listening" logs - @steve-chavez ### Changed diff --git a/docs/references/observability.rst b/docs/references/observability.rst index 4bb665eb7e..04a261ba48 100644 --- a/docs/references/observability.rst +++ b/docs/references/observability.rst @@ -31,10 +31,10 @@ For diagnostic information about the server itself, PostgREST logs to ``stderr`` .. code:: 06/May/2024:08:16:11 -0500: Starting PostgREST 12.1... - 06/May/2024:08:16:11 -0500: Attempting to connect to the database... 06/May/2024:08:16:11 -0500: Successfully connected to PostgreSQL 14.10 (Ubuntu 14.10-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit - 06/May/2024:08:16:11 -0500: Listening on port 3000 - 06/May/2024:08:16:11 -0500: Listening for notifications on the "pgrst" channel + 06/May/2024:08:16:11 -0500: Connection Pool initialized with a maximum size of 10 connections + 06/May/2024:08:16:11 -0500: API server listening on port 3000 + 06/May/2024:08:16:11 -0500: Listening for database notifications on the "pgrst" channel 06/May/2024:08:16:11 -0500: Config reloaded 06/May/2024:08:16:11 -0500: Schema cache queried in 3.8 milliseconds 06/May/2024:08:16:11 -0500: Schema cache loaded 15 Relations, 8 Relationships, 8 Functions, 0 Domain Representations, 4 Media Type Handlers diff --git a/docs/tutorials/tut0.rst b/docs/tutorials/tut0.rst index 64e0292ca8..f70cf709d6 100644 --- a/docs/tutorials/tut0.rst +++ b/docs/tutorials/tut0.rst @@ -213,12 +213,8 @@ You should see something similar to: .. code-block:: text Starting PostgREST 12.0.2... - Attempting to connect to the database... - Connection successful - Listening on port 3000 - Config reloaded - Listening for notifications on the pgrst channel - Schema cache loaded + Successfully connected to PostgreSQL 14.10 (Ubuntu 14.10-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit + API server listening on port 3000 It's now ready to serve web requests. There are many nice graphical API exploration tools you can use, but for this tutorial we'll use :code:`curl` because it's likely to be installed on your system already. Open a new terminal (leaving the one open that PostgREST is running inside). Try doing an HTTP request for the todos. diff --git a/src/PostgREST/App.hs b/src/PostgREST/App.hs index f99d8683f2..99febebaca 100644 --- a/src/PostgREST/App.hs +++ b/src/PostgREST/App.hs @@ -67,8 +67,6 @@ run appState = do let observer = AppState.getObserver appState conf@AppConfig{..} <- AppState.getConfig appState - observer $ AppStartObs prettyVersion - AppState.schemaCacheLoader appState -- Loads the initial SchemaCache Unix.installSignalHandlers (AppState.getMainThreadId appState) (AppState.schemaCacheLoader appState) (AppState.readInDbConfig False appState) diff --git a/src/PostgREST/AppState.hs b/src/PostgREST/AppState.hs index 45dd2669ab..c52c63d2a9 100644 --- a/src/PostgREST/AppState.hs +++ b/src/PostgREST/AppState.hs @@ -132,6 +132,8 @@ init conf@AppConfig{configLogLevel, configDbPoolSize} = do metricsState <- Metrics.init configDbPoolSize let observer = liftA2 (>>) (Logger.observationLogger loggerState configLogLevel) (Metrics.observationMetrics metricsState) + observer $ AppStartObs prettyVersion + pool <- initPool conf observer (sock, adminSock) <- initSockets conf state' <- initWithPool (sock, adminSock) pool conf loggerState metricsState observer @@ -206,7 +208,7 @@ initSockets AppConfig{..} = do pure (sock, adminSock) initPool :: AppConfig -> ObservationHandler -> IO SQL.Pool -initPool AppConfig{..} observer = +initPool AppConfig{..} observer = do SQL.acquire $ SQL.settings [ SQL.size configDbPoolSize , SQL.acquisitionTimeout $ fromIntegral configDbPoolAcquisitionTimeout @@ -391,6 +393,7 @@ retryingSchemaCacheLoad appState@AppState{stateObserver=observer, stateMainThrea observer $ ExitUnsupportedPgVersion actualPgVersion minimumPgVersion killThread mainThreadId observer $ DBConnectedObs $ pgvFullName actualPgVersion + observer $ PoolInit configDbPoolSize putPgVersion appState actualPgVersion return $ Just actualPgVersion diff --git a/src/PostgREST/Observation.hs b/src/PostgREST/Observation.hs index fc3cbcaa94..9e9866180b 100644 --- a/src/PostgREST/Observation.hs +++ b/src/PostgREST/Observation.hs @@ -49,6 +49,7 @@ data Observation | QueryRoleSettingsErrorObs SQL.UsageError | QueryErrorCodeHighObs SQL.UsageError | QueryPgVersionError SQL.UsageError + | PoolInit Int | PoolAcqTimeoutObs SQL.UsageError | HasqlPoolObs SQL.Observation | PoolRequest @@ -65,9 +66,9 @@ observationMessage = \case AppStartObs ver -> "Starting PostgREST " <> T.decodeUtf8 ver <> "..." AppServerPortObs host port -> - "Listening on " <> host <> ":" <> show port + "API server listening on " <> host <> ":" <> show port AppServerUnixObs sock -> - "Listening on unix socket " <> show sock + "API server listening on unix socket " <> show sock DBConnectedObs ver -> "Successfully connected to " <> ver ExitUnsupportedPgVersion pgVer minPgVer -> @@ -95,15 +96,15 @@ observationMessage = \case QueryPgVersionError usageErr -> "Failed to query the PostgreSQL version. " <> jsonMessage usageErr DBListenStart channel -> do - "Listening for notifications on the " <> show channel <> " channel" + "Listening for database notifications on the " <> show channel <> " channel" DBListenFail channel listenErr -> - "Failed listening for notifications on the " <> show channel <> " channel. " <> ( + "Failed listening for database notifications on the " <> show channel <> " channel. " <> ( case listenErr of Left err -> show err Right err -> showListenerError err ) DBListenRetry delay -> - "Retrying listening for notifications in " <> (show delay::Text) <> " seconds..." + "Retrying listening for database notifications in " <> (show delay::Text) <> " seconds..." DBListenerGotSCacheMsg channel -> "Received a schema cache reload message on the " <> show channel <> " channel" DBListenerGotConfigMsg channel -> @@ -118,6 +119,8 @@ observationMessage = \case "Failed reloading config: " <> err ConfigSucceededObs -> "Config reloaded" + PoolInit poolSize -> + "Connection Pool initialized with a maximum size of " <> show poolSize <> " connections" PoolAcqTimeoutObs usageErr -> jsonMessage usageErr HasqlPoolObs (SQL.ConnectionObservation uuid status) -> diff --git a/test/io/test_io.py b/test/io/test_io.py index 687157339a..75c2ad8617 100644 --- a/test/io/test_io.py +++ b/test/io/test_io.py @@ -1268,7 +1268,7 @@ def test_log_postgrest_host_and_port(defaultenv): ) as postgrest: output = postgrest.read_stdout(nlines=10) - assert f"Listening on {host}:{port}" in output[2] # output-sensitive + assert f"API server listening on {host}:{port}" in output[2] # output-sensitive def test_succeed_w_role_having_superuser_settings(defaultenv):