feat(cll): pre-cached full CLL map with full_map API parameter#1221
feat(cll): pre-cached full CLL map with full_map API parameter#1221
Conversation
Codecov Report❌ Patch coverage is
... and 5 files with indirect coverage changes 🚀 New features to boost your workflow:
|
|
Added updates in response to @wcchang1115 's feedback:
|
- Add build_full_cll_map() to DbtAdapter: pre-computes CLL for every node in the manifest, includes change analysis, caches on instance - Refactor get_cll() to slice from cached full map instead of computing per-request (no_cll path unchanged) - Add full_map parameter to CLL API: returns complete unfiltered map - Add tests for full map building, caching, change analysis, and API Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Danyel Fisher <danyel@gmail.com>
Signed-off-by: Danyel Fisher <danyel@gmail.com>
ccd558e to
fbbaacc
Compare
Code Review — PR #1221SummaryPre-computes the full column-level lineage map on first access and caches it on the adapter instance. Adds Findings[Warning] Race condition on
|
Rename --cll-full-map to --disable-cll-cache with inverted semantics: the pre-cached full CLL map is now on by default. Users can opt out via --disable-cll-cache or DISABLE_CLL_CACHE envvar. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Danyel Fisher <danyel@gmail.com>
Code Review — PR #1221SummaryPre-cached full CLL map with FindingsNo critical issues found. Architecture notes (informational, not blocking):
VerdictApproved — clean implementation with good test coverage across both code paths. |
Code Review — PR #1221SummaryPre-cached full CLL map with Review QuestionsQ: How to disable the CLL cache?Two mechanisms:
Q: Is the behavior the same between cached and non-cached paths?Yes. The Findings[Info]
|
wcchang1115
left a comment
There was a problem hiding this comment.
Hi danyel
Changes are good for me, just need to fix the conflict.
Resolve conflict in test_dbt_cll.py: keep new compiled_code tests from main and preserve disable_cll_cache fixture on test_seed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Danyel Fisher <danyel@gmail.com>
Summary
build_full_cll_map()toDbtAdapter: pre-computes CLL for every node in the manifest on first call, includes change analysis, caches on adapter instanceget_cll()to slice from the cached full map instead of computing per-request (no_cllpath unchanged)full_mapAPI parameter toPOST /api/cll: returns the complete unfiltered map (99 nodes, 804 columns in jaffle_shop)Disable this tool with
CLI flag:
recce server --disable-cll-cacheEnvironment variable: DISABLE_CLL_CACHE=1 (via Click's envvar at recce/cli.py:498)
Performance (jaffle_shop, 99 models)
Cold impact is ~1.8x slower (computes all models upfront), but warm impact is 18x faster and all subsequent lookups are consistently ~10ms.
This is Part I of the unified CLL project. Part II will update the frontend to call
full_map=trueonce on Impact click, making all column navigation instant (client-side).Test plan
build_full_cll_map, caching, change analysis, unchanged model CLL,full_mapAPIPOST /api/cll {"full_map": true}returns all models and columns🤖 Generated with Claude Code