From 9a19dff83edba9f4625553c9da54e5873aa439af Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Fri, 2 Jun 2023 19:05:07 -0500 Subject: [PATCH] refactor: move debounceLogAcquisitionTimeout Move it to AppState --- src/PostgREST/App.hs | 9 ++------- src/PostgREST/AppState.hs | 9 +++++++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/PostgREST/App.hs b/src/PostgREST/App.hs index 59fda216a..8b834ee01 100644 --- a/src/PostgREST/App.hs +++ b/src/PostgREST/App.hs @@ -20,7 +20,7 @@ module PostgREST.App import Control.Monad.Except (liftEither) -import Data.Either.Combinators (mapLeft, whenLeft) +import Data.Either.Combinators (mapLeft) import Data.Maybe (fromJust) import Data.String (IsString (..)) import Network.Wai.Handler.Warp (defaultSettings, setHost, setPort, @@ -28,7 +28,6 @@ import Network.Wai.Handler.Warp (defaultSettings, setHost, setPort, import System.Posix.Types (FileMode) import qualified Data.HashMap.Strict as HM -import qualified Hasql.Pool as SQL import qualified Hasql.Transaction.Sessions as SQL import qualified Network.Wai as Wai import qualified Network.Wai.Handler.Warp as Warp @@ -158,11 +157,7 @@ runDbHandler :: AppState.AppState -> Maybe Text -> SQL.Mode -> Bool -> Bool -> D runDbHandler appState isoLvl mode authenticated prepared handler = do dbResp <- lift $ do let transaction = if prepared then SQL.transaction else SQL.unpreparedTransaction - res <- AppState.usePool appState . transaction (toIsolationLevel isoLvl) mode $ runExceptT handler - whenLeft res (\case - SQL.AcquisitionTimeoutUsageError -> AppState.debounceLogAcquisitionTimeout appState -- this can happen rapidly for many requests, so we debounce - _ -> pure ()) - return res + AppState.usePool appState . transaction (toIsolationLevel isoLvl) mode $ runExceptT handler resp <- liftEither . mapLeft Error.PgErr $ diff --git a/src/PostgREST/AppState.hs b/src/PostgREST/AppState.hs index b51d09b2d..28f9ee7e1 100644 --- a/src/PostgREST/AppState.hs +++ b/src/PostgREST/AppState.hs @@ -18,7 +18,6 @@ module PostgREST.AppState , putSchemaCache , putPgVersion , usePool - , debounceLogAcquisitionTimeout , loadSchemaCache , reReadConfig , connectionWorker @@ -27,6 +26,7 @@ module PostgREST.AppState import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS +import Data.Either.Combinators (whenLeft) import qualified Data.Text.Encoding as T import Hasql.Connection (acquire) import qualified Hasql.Notifications as SQL @@ -140,7 +140,12 @@ initPool AppConfig{..} = -- | Run an action with a database connection. usePool :: AppState -> SQL.Session a -> IO (Either SQL.UsageError a) -usePool AppState{..} = SQL.use statePool +usePool AppState{..} x = do + res <- SQL.use statePool x + whenLeft res (\case + SQL.AcquisitionTimeoutUsageError -> debounceLogAcquisitionTimeout -- this can happen rapidly for many requests, so we debounce + _ -> pure ()) + return res -- | Flush the connection pool so that any future use of the pool will -- use connections freshly established after this call.