Revert "refactor: Simplify schema cache loading triggering logic"

This reverts commit 810023a47c.
This commit is contained in:
steve-chavez
2026-04-10 18:16:19 -05:00
committed by Steve Chavez
parent 96bbc86756
commit 9230f3f49a
+12 -12
View File
@@ -1,7 +1,6 @@
{-# LANGUAGE LambdaCase #-} {-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE RecursiveDo #-}
module PostgREST.AppState module PostgREST.AppState
( AppState ( AppState
@@ -46,6 +45,7 @@ import PostgREST.Version (prettyVersion)
import Control.AutoUpdate (defaultUpdateSettings, mkAutoUpdate, import Control.AutoUpdate (defaultUpdateSettings, mkAutoUpdate,
updateAction) updateAction)
import Control.Debounce
import Control.Retry (RetryPolicy, RetryStatus (..), capDelay, import Control.Retry (RetryPolicy, RetryStatus (..), capDelay,
exponentialBackoff, retrying, exponentialBackoff, retrying,
rsPreviousDelay) rsPreviousDelay)
@@ -117,23 +117,15 @@ init conf@AppConfig{configLogLevel, configDbPoolSize} = do
pool <- initPool conf observer pool <- initPool conf observer
initWithPool pool conf loggerState metricsState observer --{ stateSocketREST = sock, stateSocketAdmin = adminSock} initWithPool pool conf loggerState metricsState observer --{ stateSocketREST = sock, stateSocketAdmin = adminSock}
simpleDebounce :: IO () -> IO (IO ())
simpleDebounce act = do
flag <- newEmptyMVar
void $ forkIO $ forever $ do
takeMVar flag
act
pure (void $ tryPutMVar flag ())
initWithPool :: SQL.Pool -> AppConfig -> Logger.LoggerState -> Metrics.MetricsState -> ObservationHandler -> IO AppState initWithPool :: SQL.Pool -> AppConfig -> Logger.LoggerState -> Metrics.MetricsState -> ObservationHandler -> IO AppState
initWithPool pool conf loggerState metricsState observer = mdo initWithPool pool conf loggerState metricsState observer = do
appState <- AppState pool appState <- AppState pool
<$> newIORef minimumPgVersion -- assume we're in a supported version when starting, this will be corrected on a later step <$> newIORef minimumPgVersion -- assume we're in a supported version when starting, this will be corrected on a later step
<*> newIORef Nothing <*> newIORef Nothing
<*> newIORef SCPending <*> newIORef SCPending
<*> newIORef False <*> newIORef False
<*> simpleDebounce (retryingSchemaCacheLoad appState *> threadDelay 100000) -- 100ms cooldown <*> pure (pure ())
<*> newIORef conf <*> newIORef conf
<*> mkAutoUpdate defaultUpdateSettings { updateAction = getCurrentTime } <*> mkAutoUpdate defaultUpdateSettings { updateAction = getCurrentTime }
<*> myThreadId <*> myThreadId
@@ -144,7 +136,15 @@ initWithPool pool conf loggerState metricsState observer = mdo
<*> pure loggerState <*> pure loggerState
<*> pure metricsState <*> pure metricsState
return appState deb <-
let decisecond = 100000 in
mkDebounce defaultDebounceSettings
{ debounceAction = retryingSchemaCacheLoad appState
, debounceFreq = decisecond
, debounceEdge = leadingEdge -- runs the worker at the start and the end
}
return appState { debouncedSCacheLoader = deb}
destroy :: AppState -> IO () destroy :: AppState -> IO ()
destroy = destroyPool destroy = destroyPool