dstack icon indicating copy to clipboard operation
dstack copied to clipboard

[Bug]: The 'get_offers_by_requirements' function checks all backends for offers, but doesn't use the backend filter.

Open TheBits opened this issue 3 months ago • 1 comments

dstack version

0.16.1

Python version

3.11.8

Host OS

Arch Linux

Host Arch

x86_64

What happened?

There are two bugs when I run dstack pool add -b cudo for example.

  • [ ] I select the Cudo provider, but the request also goes to the DataCrunch provider.
  • [ ] The server shows a large stack trace of the network exception. We need to handle network exceptions.

CLI logs

No response

Server logs

The admin token is 31c3a0bb-268e-4129-97f0-f9dd143eaeed
The dstack server (no version) is running at http://127.0.0.1:3000

ERROR:    Exception in ASGI application
  + Exception Group Traceback (most recent call last):
  |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_utils.py", line 87, in collapse_excgroups
  |     yield
  |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 190, in __call__
  |     async with anyio.create_task_group() as task_group:
  |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 678, in __aexit__
  |     raise BaseExceptionGroup(
  | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/uvicorn/protocols/http/h11_impl.py", line 412, in run_asgi
    |     result = await app(  # type: ignore[func-returns-value]
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
    |     return await self.app(scope, receive, send)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__
    |     await super().__call__(scope, receive, send)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/applications.py", line 123, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
    |     raise exc
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
    |     await self.app(scope, receive, _send)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/app.py", line 180, in check_client_version
    |     return await call_next(request)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    |     with collapse_excgroups():
    |   File "/usr/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    |     raise exc
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/app.py", line 160, in log_request
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    |     raise app_exc
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
    |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
    |     raise exc
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 758, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 778, in app
    |     await route.handle(scope, receive, send)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 299, in handle
    |     await self.app(scope, receive, send)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 79, in app
    |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
    |     raise exc
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 74, in app
    |     response = await func(request)
    |                ^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/fastapi/routing.py", line 278, in app
    |     raw_response = await run_endpoint_function(
    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
    |     return await dependant.call(**values)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/routers/runs.py", line 136, in get_offers
    |     offers = await runs.get_create_instance_offers(
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/runs.py", line 413, in get_create_instance_offers
    |     offers = await get_offers_by_requirements(
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/runs.py", line 242, in get_offers_by_requirements
    |     backends: List[Backend] = await backends_services.get_project_backends(project=project)
    |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/backends/__init__.py", line 263, in get_project_backends
    |     backends_with_models = await get_project_backends_with_models(project)
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/backends/__init__.py", line 249, in get_project_backends_with_models
    |     backend = await run_async(configurator.get_backend, backend_model)
    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/utils/common.py", line 13, in run_async
    |     return await asyncio.get_running_loop().run_in_executor(None, func_with_args)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    |     result = self.fn(*self.args, **self.kwargs)
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/backends/configurators/datacrunch.py", line 68, in get_backend
    |     return DataCrunchBackend(config=config)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/core/backends/datacrunch/__init__.py", line 12, in __init__
    |     self._compute = DataCrunchCompute(self.config)
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/core/backends/datacrunch/compute.py", line 29, in __init__
    |     self.api_client = DataCrunchAPIClient(config.creds.client_id, config.creds.client_secret)
    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/core/backends/datacrunch/api_client.py", line 14, in __init__
    |     self.client = DataCrunchClient(client_id, client_secret)
    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/datacrunch/datacrunch.py", line 37, in __init__
    |     self._http_client: HTTPClient = HTTPClient(
    |                                     ^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/datacrunch/http_client/http_client.py", line 33, in __init__
    |     self._auth_service.authenticate()
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/datacrunch/authentication/authentication.py", line 42, in authenticate
    |     response = requests.post(
    |                ^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/api.py", line 115, in post
    |     return request("post", url, data=data, json=json, **kwargs)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/api.py", line 59, in request
    |     return session.request(method=method, url=url, **kwargs)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/sessions.py", line 589, in request
    |     resp = self.send(prep, **send_kwargs)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/sessions.py", line 703, in send
    |     r = adapter.send(request, **kwargs)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/adapters.py", line 519, in send
    |     raise ConnectionError(e, request=request)
    | requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.datacrunch.io', port=443): Max retries exceeded with url: /v1/oauth2/token (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x72355d702610>: Failed to establish a new connection: [Errno 101] Network is unreachable'))
    +------------------------------------

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/uvicorn/protocols/http/h11_impl.py", line 412, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__
    await super().__call__(scope, receive, send)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/applications.py", line 123, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
    raise exc
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
    await self.app(scope, receive, _send)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/app.py", line 180, in check_client_version
    return await call_next(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
    with collapse_excgroups():
  File "/usr/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_utils.py", line 93, in collapse_excgroups
    raise exc
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/app.py", line 160, in log_request
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
    raise app_exc
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
    raise exc
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    await app(scope, receive, sender)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 758, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 778, in app
    await route.handle(scope, receive, send)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 299, in handle
    await self.app(scope, receive, send)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 79, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
    raise exc
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    await app(scope, receive, sender)
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/starlette/routing.py", line 74, in app
    response = await func(request)
               ^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/fastapi/routing.py", line 278, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
    return await dependant.call(**values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/routers/runs.py", line 136, in get_offers
    offers = await runs.get_create_instance_offers(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/runs.py", line 413, in get_create_instance_offers
    offers = await get_offers_by_requirements(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/runs.py", line 242, in get_offers_by_requirements
    backends: List[Backend] = await backends_services.get_project_backends(project=project)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/backends/__init__.py", line 263, in get_project_backends
    backends_with_models = await get_project_backends_with_models(project)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/backends/__init__.py", line 249, in get_project_backends_with_models
    backend = await run_async(configurator.get_backend, backend_model)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/utils/common.py", line 13, in run_async
    return await asyncio.get_running_loop().run_in_executor(None, func_with_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/server/services/backends/configurators/datacrunch.py", line 68, in get_backend
    return DataCrunchBackend(config=config)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/core/backends/datacrunch/__init__.py", line 12, in __init__
    self._compute = DataCrunchCompute(self.config)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/core/backends/datacrunch/compute.py", line 29, in __init__
    self.api_client = DataCrunchAPIClient(config.creds.client_id, config.creds.client_secret)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/dstack/_internal/core/backends/datacrunch/api_client.py", line 14, in __init__
    self.client = DataCrunchClient(client_id, client_secret)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/datacrunch/datacrunch.py", line 37, in __init__
    self._http_client: HTTPClient = HTTPClient(
                                    ^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/datacrunch/http_client/http_client.py", line 33, in __init__
    self._auth_service.authenticate()
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/datacrunch/authentication/authentication.py", line 42, in authenticate
    response = requests.post(
               ^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/api.py", line 115, in post
    return request("post", url, data=data, json=json, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thebits/dstack/dstack/.direnv/python-3.11/lib/python3.11/site-packages/requests/adapters.py", line 519, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.datacrunch.io', port=443): Max retries exceeded with url: /v1/oauth2/token (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x72355d702610>: Failed to establish a new connection: [Errno 101] Network is unreachable'))


### Runner logs

_No response_

### Additional Information

_No response_

TheBits avatar Mar 08 '24 08:03 TheBits