Skip to content

Commit b722905

Browse files
refactor: log fallback to run_operation and use tenacity before_sleep for retry logging
Co-Authored-By: unknown <>
1 parent 4869797 commit b722905

1 file changed

Lines changed: 20 additions & 5 deletions

File tree

integration_tests/tests/dbt_project.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@
1313
from elementary.clients.dbt.factory import RunnerMethod, create_dbt_runner
1414
from logger import get_logger
1515
from 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

1824
PYTEST_XDIST_WORKER = os.environ.get("PYTEST_XDIST_WORKER", None)
1925
SCHEMA_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

Comments
 (0)