Repository navigation
test: skip unconfigured Postgres tests before importing psycopg - #7502
Conversation
|
Merging this PR will degrade performance by 6.87%
|
| Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|
| ❌ | test_hydration_metadata[200] |
1.7 ms | 1.8 ms | -6.87% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing codex/skip-unconfigured-postgres-tests (2b7a6ae) with main (62d454f)
Footnotes
-
18 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
test_hydration_metadata re-read the cached name, full name, parent and root of every class in a 20- and a 200-substate tree. It came in with #7064 to show the per-class metadata cache replacing the lru_cache whose 128-entry capacity the 200-class tree thrashed. With that cache in place both sizes measure the same cache-hit path, and that path is almost entirely CPython's type attribute cache and call specialization rather than reflex code. That makes it flip on CodSpeed with no related change: [200] alternates between 1.7 and 1.8 ms (-6.9% on #7502, -7.7% on #7501), [20] between 207.6 and 216.7 us (-4.2% on #7410 and #7434, +4.3% on the changelog-only #7445), while every other benchmark reports untouched. Reproduced under callgrind with the same pytest-codspeed instrumentation CI uses. Two runs of the module alone are byte-identical: 1,420,889 Ir for [200]. Running test_state_access.py or test_state_delta.py first in the same process gives 1,363,413 and 1,306,760 Ir (-4.0%, -8.0%) for the unchanged function, while test_hydration_snapshot[200] moves about 1% (5,335,449 to 5,392,507). The count depends on what the process did before the benchmark, not on the code it measures, so no restructuring of the body would settle it. test_hydration_snapshot stays: it walks the same metadata on its way to serializing the tree, so a regression in the metadata path still shows up there, diluted by real work enough to sit under the threshold when nothing changed. The two removed benchmarks show as skipped on CodSpeed until they are archived in the project settings. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011LZPUJkHZur6LUinHeFpZT
test_hydration_metadata re-read the cached name, full name, parent and root of every class in a 20- and a 200-substate tree. It came in with #7064 to show the per-class metadata cache replacing the lru_cache whose 128-entry capacity the 200-class tree thrashed. With that cache in place both sizes measure the same cache-hit path, and that path is almost entirely CPython's type attribute cache and call specialization rather than reflex code. That makes it flip on CodSpeed with no related change: [200] alternates between 1.7 and 1.8 ms (-6.9% on #7502, -7.7% on #7501), [20] between 207.6 and 216.7 us (-4.2% on #7410 and #7434, +4.3% on the changelog-only #7445), while every other benchmark reports untouched. Reproduced under callgrind with the same pytest-codspeed instrumentation CI uses. Two runs of the module alone are byte-identical: 1,420,889 Ir for [200]. Running test_state_access.py or test_state_delta.py first in the same process gives 1,363,413 and 1,306,760 Ir (-4.0%, -8.0%) for the unchanged function, while test_hydration_snapshot[200] moves about 1% (5,335,449 to 5,392,507). The count depends on what the process did before the benchmark, not on the code it measures, so no restructuring of the body would settle it. test_hydration_snapshot stays: it walks the same metadata on its way to serializing the tree, so a regression in the metadata path still shows up there, diluted by real work enough to sit under the threshold when nothing changed. The two removed benchmarks show as skipped on CodSpeed until they are archived in the project settings. Claude-Session: https://claude.ai/code/session_011LZPUJkHZur6LUinHeFpZT Co-authored-by: Claude <noreply@anthropic.com>
On Python 3.15, the workspace uses pure-Python psycopg, which requires a system libpq. The macOS unit job fails during collection because the runner test module imports psycopg before pytest can apply its no-database skip marker.
Skip the Postgres-only module before importing psycopg when
REFLEX_TEST_POSTGRESis unset or empty. An explicitly configured database still requires a working driver and surfaces import failures. This only changes test collection.Type of change
Validation
No news fragment: test-only change.