Skip to content

Commit 33d7d68

Browse files
authored
Merge pull request #697 from FlorentinD/catch-400-on-list-instances
Catch invalid db tier on list-session
2 parents f3cd94a + ab11801 commit 33d7d68

File tree

3 files changed

+44
-6
lines changed

3 files changed

+44
-6
lines changed

graphdatascience/session/aura_api.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class AuraApiError(Exception):
2828
def __init__(self, message: str, status_code: int):
2929
super().__init__(self, message)
3030
self.status_code = status_code
31+
self.message = message
3132

3233

3334
class AuraApi:

graphdatascience/session/dedicated_sessions.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,10 @@ def list(self) -> List[SessionInfo]:
9797
sessions.extend(self._aura_api.list_sessions(db.id))
9898
except AuraApiError as e:
9999
# ignore 404 errors when listing sessions
100-
# it could mean paused sessions or deleted sessions (or an invalid instance type)
101-
if e.status_code != 404:
102-
raise e
100+
# it could mean paused/deleted instance or an invalid db type
101+
if e.status_code == 404 or (e.status_code == 400 and "of tier" in e.message):
102+
continue
103+
raise e
103104

104105
return [SessionInfo.from_session_details(i) for i in sessions]
105106

@@ -109,9 +110,10 @@ def _find_existing_session(self, session_name: str, dbid: str) -> Optional[Sessi
109110
matched_sessions = [s for s in self._aura_api.list_sessions(dbid) if s.name == session_name]
110111
except AuraApiError as e:
111112
# ignore 404 errors when listing sessions
112-
# it could mean paused sessions or deleted sessions (or an invalid instance type)
113-
if e.status_code != 404:
114-
raise e
113+
# it could mean paused/deleted instance or an invalid db type
114+
if e.status_code == 404 or (e.status_code == 400 and "of tier" in e.message):
115+
return None
116+
raise e
115117

116118
if len(matched_sessions) == 0:
117119
return None

graphdatascience/tests/unit/test_dedicated_sessions.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ def _mimic_paused_db_behaviour(self, dbid: str) -> None:
7575
if db and db.status == "paused":
7676
raise AuraApiError(message="Database not found", status_code=404)
7777

78+
if db and db.type == "gds":
79+
raise AuraApiError(
80+
message=f"Database with id `{db.id}` of tier `{db.type}`, which is not supported by sessions.",
81+
status_code=400,
82+
)
83+
7884
def create_instance(
7985
self, name: str, memory: SessionMemoryValue, cloud_provider: str, region: str
8086
) -> InstanceCreateDetails:
@@ -221,6 +227,35 @@ def test_list_session_paused_instance(aura_api: AuraApi) -> None:
221227
assert sessions.list() == [SessionInfo.from_session_details(session)]
222228

223229

230+
def test_list_session_gds_instance(aura_api: AuraApi) -> None:
231+
db = aura_api.create_instance("test", SessionMemory.m_8GB.value, "aws", "leipzig-1")
232+
fake_aura_api = cast(FakeAuraApi, aura_api)
233+
234+
fake_aura_api.id_counter += 1
235+
gds_instance = InstanceSpecificDetails(
236+
id="4242",
237+
status="Creating",
238+
connection_url="foo.bar",
239+
memory=SessionMemory.m_16GB.value,
240+
type="gds",
241+
region="dresden",
242+
name="ds instance",
243+
tenant_id=fake_aura_api._tenant_id,
244+
cloud_provider="aws",
245+
)
246+
fake_aura_api._instances[gds_instance.id] = gds_instance
247+
248+
session = aura_api.create_session(
249+
name="gds-session-my-session-name",
250+
dbid=db.id,
251+
pwd="some_pwd",
252+
memory=SessionMemory.m_8GB.value,
253+
)
254+
sessions = DedicatedSessions(aura_api)
255+
256+
assert sessions.list() == [SessionInfo.from_session_details(session)]
257+
258+
224259
def test_create_session(mocker: MockerFixture, aura_api: AuraApi) -> None:
225260
_setup_db_instance(aura_api)
226261

0 commit comments

Comments
 (0)