1313from elementary .clients .dbt .factory import RunnerMethod , create_dbt_runner
1414from logger import get_logger
1515from ruamel .yaml import YAML
16- from tenacity import retry , retry_if_result , stop_after_attempt , wait_fixed
16+ from tenacity import (
17+ RetryCallState ,
18+ retry ,
19+ retry_if_result ,
20+ stop_after_attempt ,
21+ wait_fixed ,
22+ )
1723
1824PYTEST_XDIST_WORKER = os .environ .get ("PYTEST_XDIST_WORKER" , None )
1925SCHEMA_NAME_SUFFIX = f"_{ PYTEST_XDIST_WORKER } " if PYTEST_XDIST_WORKER else ""
@@ -84,15 +90,27 @@ def run_query(self, prerendered_query: str):
8490 try :
8591 return self ._get_query_runner ().run_query (prerendered_query )
8692 except UnsupportedJinjaError :
87- pass
93+ logger . debug ( "Query contains complex Jinja; falling back to run_operation" )
8894
8995 # Slow path: full Jinja rendering via run_operation (with retry).
9096 return self ._run_query_with_run_operation (prerendered_query )
9197
98+ @staticmethod
99+ def _log_retry (retry_state : RetryCallState ) -> None :
100+ """Tenacity before_sleep callback — logs each retry with attempt number."""
101+ logger .warning (
102+ "run_operation('elementary.render_run_query') returned no output; "
103+ "retry %d/%d in %.1fs" ,
104+ retry_state .attempt_number ,
105+ _RUN_QUERY_MAX_RETRIES ,
106+ _RUN_QUERY_RETRY_DELAY_SECONDS ,
107+ )
108+
92109 @retry (
93110 retry = retry_if_result (lambda r : r is None ),
94111 stop = stop_after_attempt (_RUN_QUERY_MAX_RETRIES ),
95112 wait = wait_fixed (_RUN_QUERY_RETRY_DELAY_SECONDS ),
113+ before_sleep = _log_retry .__func__ ,
96114 reraise = True ,
97115 )
98116 def _run_operation_with_retry (self , prerendered_query : str ) -> Optional [list ]:
@@ -103,9 +121,6 @@ def _run_operation_with_retry(self, prerendered_query: str) -> Optional[list]:
103121 )
104122 if run_operation_results :
105123 return json .loads (run_operation_results [0 ])
106- logger .warning (
107- "run_operation('elementary.render_run_query') returned no output, retrying"
108- )
109124 return None
110125
111126 def _run_query_with_run_operation (self , prerendered_query : str ):
0 commit comments