Nikolay Tsvetanov
10/15/2024, 11:29 AME RuntimeError: Timed out while attempting to connect to ephemeral Prefect API server.
Nikolay Tsvetanov
10/15/2024, 11:29 AM@pytest.fixture(autouse=True, scope="session")
def prefect_test_fixture():
> with prefect_test_harness():
madefor/workflows/conftest.py:18:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.12/contextlib.py:137: in __enter__
return next(self.gen)
/usr/local/lib/python3.12/site-packages/prefect/testing/utilities.py:157: in prefect_test_harness
test_server.start(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <prefect.server.api.server.SubprocessASGIServer object at 0x7f10eb8bb350>
timeout = 30
def start(self, timeout: Optional[int] = None):
"""
Start the server in a separate process. Safe to call multiple times; only starts
the server once.
Args:
timeout: The maximum time to wait for the server to start
"""
if not self.running:
if self.port is None:
self.port = self.find_available_port()
assert self.port is not None, "Port must be provided or available"
<http://subprocess_server_logger.info|subprocess_server_logger.info>(f"Starting server on {self.address}")
try:
self.running = True
self.server_process = self._run_uvicorn_command()
atexit.register(self.stop)
with httpx.Client() as client:
response = None
elapsed_time = 0
max_wait_time = (
timeout
or PREFECT_SERVER_EPHEMERAL_STARTUP_TIMEOUT_SECONDS.value()
)
while elapsed_time < max_wait_time:
if self.server_process.poll() == 3:
self.port = self.find_available_port()
self.server_process = self._run_uvicorn_command()
continue
try:
response = client.get(f"{self.api_url}/health")
except httpx.ConnectError:
pass
else:
if response.status_code == 200:
break
time.sleep(0.1)
elapsed_time += 0.1
if response:
response.raise_for_status()
if not response:
error_message = "Timed out while attempting to connect to ephemeral Prefect API server."
if self.server_process.poll() is not None:
error_message += f" Ephemeral server process exited with code {self.server_process.returncode}."
if self.server_process.stdout:
error_message += (
f" stdout: {self.server_process.stdout.read()}"
)
if self.server_process.stderr:
error_message += (
f" stderr: {self.server_process.stderr.read()}"
)
> raise RuntimeError(error_message)
E RuntimeError: Timed out while attempting to connect to ephemeral Prefect API server.
/usr/local/lib/python3.12/site-packages/prefect/server/api/server.py:818: RuntimeError
Nikolay Tsvetanov
10/15/2024, 11:29 AM