refactor(remove): schema cache load delay config
Remove internal schema cache load and relationship load sleep settings plus the delay wrappers they enabled. Drop IO tests that depended on the removed settings.
This commit is contained in:
committed by
Steve Chavez
parent
86d6ed10bb
commit
913fe001e5
@@ -127,8 +127,6 @@ data AppConfig = AppConfig
|
|||||||
, configRoleSettings :: RoleSettings
|
, configRoleSettings :: RoleSettings
|
||||||
, configRoleIsoLvl :: RoleIsolationLvl
|
, configRoleIsoLvl :: RoleIsolationLvl
|
||||||
, configInternalSCQuerySleep :: Maybe Int32
|
, configInternalSCQuerySleep :: Maybe Int32
|
||||||
, configInternalSCLoadSleep :: Maybe Int32
|
|
||||||
, configInternalSCRelLoadSleep :: Maybe Int32
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data LogLevel = LogCrit | LogError | LogWarn | LogInfo | LogDebug
|
data LogLevel = LogCrit | LogError | LogWarn | LogInfo | LogDebug
|
||||||
@@ -328,8 +326,6 @@ parser optPath env dbSettings roleSettings roleIsolationLvl =
|
|||||||
<*> pure roleSettings
|
<*> pure roleSettings
|
||||||
<*> pure roleIsolationLvl
|
<*> pure roleIsolationLvl
|
||||||
<*> optInt "internal-schema-cache-query-sleep"
|
<*> optInt "internal-schema-cache-query-sleep"
|
||||||
<*> optInt "internal-schema-cache-load-sleep"
|
|
||||||
<*> optInt "internal-schema-cache-relationship-load-sleep"
|
|
||||||
where
|
where
|
||||||
parseErrorVerbosity :: C.Key -> C.Parser C.Config Verbosity
|
parseErrorVerbosity :: C.Key -> C.Parser C.Config Verbosity
|
||||||
parseErrorVerbosity k =
|
parseErrorVerbosity k =
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ import qualified PostgREST.MediaType as MediaType
|
|||||||
import Control.Arrow ((&&&))
|
import Control.Arrow ((&&&))
|
||||||
import qualified Data.FuzzySet as Fuzzy
|
import qualified Data.FuzzySet as Fuzzy
|
||||||
import Protolude
|
import Protolude
|
||||||
import System.IO.Unsafe (unsafePerformIO)
|
|
||||||
|
|
||||||
type TablesFuzzyIndex = HM.HashMap Schema Fuzzy.FuzzySet
|
type TablesFuzzyIndex = HM.HashMap Schema Fuzzy.FuzzySet
|
||||||
|
|
||||||
@@ -180,11 +179,9 @@ querySchemaCache conf@AppConfig{..} = do
|
|||||||
let tabsWViewsPks = addViewPrimaryKeys tabs keyDeps
|
let tabsWViewsPks = addViewPrimaryKeys tabs keyDeps
|
||||||
rels = addInverseRels $ addM2MRels tabsWViewsPks $ addViewM2OAndO2ORels keyDeps m2oRels
|
rels = addInverseRels $ addM2MRels tabsWViewsPks $ addViewM2OAndO2ORels keyDeps m2oRels
|
||||||
|
|
||||||
-- Add delay in loading schema cache when internal-schema-cache-load-sleep config is set
|
return $ removeInternal schemas $ SchemaCache {
|
||||||
return $ delayEval configInternalSCLoadSleep $ removeInternal schemas $ SchemaCache {
|
|
||||||
dbTables = tabsWViewsPks
|
dbTables = tabsWViewsPks
|
||||||
-- Add delay in loading relationships when internal-schema-cache-relationship-load-sleep config is set
|
, dbRelationships = getOverrideRelationshipsMap rels cRels
|
||||||
, dbRelationships = delayEval configInternalSCRelLoadSleep $ getOverrideRelationshipsMap rels cRels
|
|
||||||
, dbRoutines = funcs
|
, dbRoutines = funcs
|
||||||
, dbRepresentations = reps
|
, dbRepresentations = reps
|
||||||
, dbMediaHandlers = HM.union mHdlers initialMediaHandlers -- the custom handlers will override the initial ones
|
, dbMediaHandlers = HM.union mHdlers initialMediaHandlers -- the custom handlers will override the initial ones
|
||||||
@@ -198,7 +195,6 @@ querySchemaCache conf@AppConfig{..} = do
|
|||||||
}
|
}
|
||||||
where
|
where
|
||||||
schemas = toList configDbSchemas
|
schemas = toList configDbSchemas
|
||||||
delayEval confDelay result = maybe result (unsafePerformIO . (($> result) . (threadDelay . (1000 *) . fromIntegral))) confDelay
|
|
||||||
isLogDebug = configLogLevel == LogDebug
|
isLogDebug = configLogLevel == LogDebug
|
||||||
sqlTimedStmt = sqlTimedStatement isLogDebug
|
sqlTimedStmt = sqlTimedStatement isLogDebug
|
||||||
|
|
||||||
|
|||||||
@@ -1447,31 +1447,6 @@ def test_schema_cache_query_sleep_logs(defaultenv):
|
|||||||
assert 1000 < observed_ms < 2000
|
assert 1000 < observed_ms < 2000
|
||||||
|
|
||||||
|
|
||||||
def test_schema_cache_load_sleep_logs(defaultenv):
|
|
||||||
"""Schema cache load sleep should be reflected in the logged load duration."""
|
|
||||||
|
|
||||||
env = {
|
|
||||||
**defaultenv,
|
|
||||||
"PGRST_INTERNAL_SCHEMA_CACHE_LOAD_SLEEP": "1000",
|
|
||||||
}
|
|
||||||
log_pattern = re.compile(r"Schema cache loaded in ([\d.]+) milliseconds")
|
|
||||||
|
|
||||||
with run(env=env, wait_max_seconds=3, no_startup_stdout=False) as postgrest:
|
|
||||||
observed_ms = None
|
|
||||||
collected = []
|
|
||||||
|
|
||||||
lines = postgrest.read_stdout(nlines=10)
|
|
||||||
collected.extend(lines)
|
|
||||||
for line in lines:
|
|
||||||
match = log_pattern.search(line)
|
|
||||||
if match:
|
|
||||||
observed_ms = float(match.group(1))
|
|
||||||
break
|
|
||||||
|
|
||||||
assert observed_ms is not None
|
|
||||||
assert 1000 < observed_ms < 2000
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("timezone_enabled", ["true", "false"])
|
@pytest.mark.parametrize("timezone_enabled", ["true", "false"])
|
||||||
@pytest.mark.parametrize("level", ["crit", "error", "warn", "info", "debug"])
|
@pytest.mark.parametrize("level", ["crit", "error", "warn", "info", "debug"])
|
||||||
def test_schema_cache_query_timings_log(level, timezone_enabled, defaultenv):
|
def test_schema_cache_query_timings_log(level, timezone_enabled, defaultenv):
|
||||||
@@ -2109,54 +2084,6 @@ def test_db_pre_config_with_pg_reserved_words(defaultenv):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_requests_with_resource_embedding_wait_for_schema_cache_reload(defaultenv):
|
|
||||||
"requests that use the schema cache with resource embedding wait long for the schema cache to reload"
|
|
||||||
|
|
||||||
env = {
|
|
||||||
**defaultenv,
|
|
||||||
"PGRST_DB_POOL": "2",
|
|
||||||
"PGRST_INTERNAL_SCHEMA_CACHE_RELATIONSHIP_LOAD_SLEEP": "5100",
|
|
||||||
}
|
|
||||||
|
|
||||||
with run(env=env, wait_max_seconds=30) as postgrest:
|
|
||||||
# reload the schema cache
|
|
||||||
response = postgrest.session.get("/rpc/notify_pgrst")
|
|
||||||
assert response.status_code == 204
|
|
||||||
|
|
||||||
postgrest.wait_until_scache_starts_loading()
|
|
||||||
|
|
||||||
response = postgrest.session.get("/directors?select=id,name,films(title)")
|
|
||||||
assert response.status_code == 200
|
|
||||||
|
|
||||||
assert response.elapsed.total_seconds() > 5
|
|
||||||
|
|
||||||
|
|
||||||
def test_requests_without_resource_embedding_wait_for_schema_cache_reload(defaultenv):
|
|
||||||
"requests that use the schema cache without resource embedding wait less for the schema cache to reload"
|
|
||||||
|
|
||||||
env = {
|
|
||||||
**defaultenv,
|
|
||||||
"PGRST_DB_POOL": "2",
|
|
||||||
"PGRST_INTERNAL_SCHEMA_CACHE_LOAD_SLEEP": "1100",
|
|
||||||
"PGRST_INTERNAL_SCHEMA_CACHE_RELATIONSHIP_LOAD_SLEEP": "5000",
|
|
||||||
}
|
|
||||||
|
|
||||||
with run(env=env, wait_max_seconds=30) as postgrest:
|
|
||||||
# reload the schema cache
|
|
||||||
response = postgrest.session.get("/rpc/notify_pgrst")
|
|
||||||
assert response.status_code == 204
|
|
||||||
|
|
||||||
postgrest.wait_until_scache_starts_loading()
|
|
||||||
|
|
||||||
response = postgrest.session.get("/films")
|
|
||||||
assert response.status_code == 200
|
|
||||||
|
|
||||||
assert (
|
|
||||||
response.elapsed.total_seconds() > 1
|
|
||||||
and response.elapsed.total_seconds() < 5
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def test_server_timing_transaction_duration(defaultenv, metapostgrest):
|
def test_server_timing_transaction_duration(defaultenv, metapostgrest):
|
||||||
"server-timing transaction duration should be accurate"
|
"server-timing transaction duration should be accurate"
|
||||||
|
|
||||||
|
|||||||
@@ -118,8 +118,6 @@ baseCfg = let secret = encodeUtf8 "reallyreallyreallyreallyverysafe" in
|
|||||||
, configRoleSettings = mempty
|
, configRoleSettings = mempty
|
||||||
, configRoleIsoLvl = mempty
|
, configRoleIsoLvl = mempty
|
||||||
, configInternalSCQuerySleep = Nothing
|
, configInternalSCQuerySleep = Nothing
|
||||||
, configInternalSCLoadSleep = Nothing
|
|
||||||
, configInternalSCRelLoadSleep = Nothing
|
|
||||||
, configServerTimingEnabled = True
|
, configServerTimingEnabled = True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -159,8 +159,6 @@ baseCfg = let secret = encodeUtf8 "reallyreallyreallyreallyverysafe" in
|
|||||||
, configRoleSettings = mempty
|
, configRoleSettings = mempty
|
||||||
, configRoleIsoLvl = mempty
|
, configRoleIsoLvl = mempty
|
||||||
, configInternalSCQuerySleep = Nothing
|
, configInternalSCQuerySleep = Nothing
|
||||||
, configInternalSCLoadSleep = Nothing
|
|
||||||
, configInternalSCRelLoadSleep = Nothing
|
|
||||||
, configServerTimingEnabled = True
|
, configServerTimingEnabled = True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user