From 88b7009816e87aa78583e9f7a6c8b055ea8dd244 Mon Sep 17 00:00:00 2001 From: Yian Shang Date: Sun, 19 Apr 2026 01:57:30 -0700 Subject: [PATCH] Fix materialization plan to skip missing nodes instead of crashing. Fix log resolver to preserve original traceback --- datajunction-server/datajunction_server/api/graphql/main.py | 4 ++-- .../datajunction_server/api/graphql/queries/sql.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/datajunction-server/datajunction_server/api/graphql/main.py b/datajunction-server/datajunction_server/api/graphql/main.py index eb68e5331..158b08849 100644 --- a/datajunction-server/datajunction_server/api/graphql/main.py +++ b/datajunction-server/datajunction_server/api/graphql/main.py @@ -84,7 +84,7 @@ async def wrapper(*args, **kwargs): result = await func(*args, **kwargs) logger.info("[GQL] %s", log_args) return result - except Exception as exc: # pragma: no cover + except Exception: # pragma: no cover get_metrics_provider().counter( # pragma: no cover "dj.graphql.errors", tags={"operation": resolver_name}, @@ -94,7 +94,7 @@ async def wrapper(*args, **kwargs): log_args, exc_info=True, ) - raise exc # pragma: no cover + raise # pragma: no cover finally: get_metrics_provider().timer( "dj.graphql.query_ms", diff --git a/datajunction-server/datajunction_server/api/graphql/queries/sql.py b/datajunction-server/datajunction_server/api/graphql/queries/sql.py index 78f1ff6b3..39219bd8a 100644 --- a/datajunction-server/datajunction_server/api/graphql/queries/sql.py +++ b/datajunction-server/datajunction_server/api/graphql/queries/sql.py @@ -167,7 +167,9 @@ async def materialization_plan( for dim in m.rule.level # type: ignore ] grain_from_dims = [ - nodes_lookup[dim.rsplit(SEPARATOR, 1)[0]] for dim in dimensions + nodes_lookup[dim.rsplit(SEPARATOR, 1)[0]] + for dim in dimensions + if dim.rsplit(SEPARATOR, 1)[0] in nodes_lookup ] grain_dimensions = grain_from_rules + grain_from_dims @@ -190,6 +192,7 @@ async def materialization_plan( ].current_version, ) for ref in filter_refs + if ref.rsplit(SEPARATOR, 1)[0] in nodes_lookup ], filters=cube.filters, )