Skip to content

Commit 05731c8

Browse files
committed
Ignore db 404 on list all sessions
As we iterate over all available dbs, these include paused instances. But also this helps with flakyness if a db is deleted in the meantime
1 parent 44c6ecb commit 05731c8

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

graphdatascience/session/dedicated_sessions.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from datetime import datetime, timedelta, timezone
66
from typing import List, Optional
77

8+
from requests.exceptions import HTTPError
9+
810
from graphdatascience.session.algorithm_category import AlgorithmCategory
911
from graphdatascience.session.aura_api import AuraApi
1012
from graphdatascience.session.aura_api_responses import SessionDetails
@@ -94,7 +96,12 @@ def list(self) -> List[SessionInfo]:
9496

9597
sessions: List[SessionDetails] = []
9698
for db in dbs:
97-
sessions.extend(self._aura_api.list_sessions(db.id))
99+
try:
100+
sessions.extend(self._aura_api.list_sessions(db.id))
101+
except HTTPError as e:
102+
# ignore 404 errors when listing sessions as it could mean paused sessions or deleted sessions
103+
if e.response.status_code != 404:
104+
raise e
98105

99106
return [SessionInfo.from_session_details(i) for i in sessions]
100107

graphdatascience/tests/unit/test_dedicated_sessions.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import pytest
77
from pytest_mock import MockerFixture
8+
from requests import Response
9+
from requests.exceptions import HTTPError
810

911
from graphdatascience.session.algorithm_category import AlgorithmCategory
1012
from graphdatascience.session.aura_api import AuraApi
@@ -102,6 +104,14 @@ def delete_instance(self, instance_id: str) -> InstanceSpecificDetails:
102104
return self._instances.pop(instance_id)
103105

104106
def list_sessions(self, dbid: str) -> List[SessionDetails]:
107+
# mimic aura behaviour of paused instances not being in an orchestra
108+
db = self.list_instance(dbid)
109+
if db and db.status == "paused":
110+
response = Response()
111+
response.status_code = 404
112+
response._content = b"database not found"
113+
raise HTTPError(request=None, response=response)
114+
105115
return [v for _, v in self._sessions.items() if v.instance_id == dbid]
106116

107117
def list_instances(self) -> List[InstanceDetails]:
@@ -180,6 +190,35 @@ def test_list_session(aura_api: AuraApi) -> None:
180190
assert sessions.list() == [SessionInfo.from_session_details(session)]
181191

182192

193+
def test_list_session_paused_instance(aura_api: AuraApi) -> None:
194+
db = aura_api.create_instance("test", SessionMemory.m_8GB.value, "aws", "leipzig-1")
195+
fake_aura_api = cast(FakeAuraApi, aura_api)
196+
197+
fake_aura_api.id_counter += 1
198+
paused_db = InstanceSpecificDetails(
199+
id="4242",
200+
status="paused",
201+
connection_url="foo.bar",
202+
memory=SessionMemory.m_16GB.value,
203+
type="",
204+
region="dresden",
205+
name="paused-db",
206+
tenant_id=fake_aura_api._tenant_id,
207+
cloud_provider="aws",
208+
)
209+
fake_aura_api._instances[paused_db.id] = paused_db
210+
211+
session = aura_api.create_session(
212+
name="gds-session-my-session-name",
213+
dbid=db.id,
214+
pwd="some_pwd",
215+
memory=SessionMemory.m_8GB.value,
216+
)
217+
sessions = DedicatedSessions(aura_api)
218+
219+
assert sessions.list() == [SessionInfo.from_session_details(session)]
220+
221+
183222
def test_create_session(mocker: MockerFixture, aura_api: AuraApi) -> None:
184223
_setup_db_instance(aura_api)
185224

0 commit comments

Comments
 (0)