Skip to content

Commit 829d321

Browse files
committed
Skip listing sessions over paused dbs during delete lookup
1 parent 9a05f35 commit 829d321

File tree

2 files changed

+48
-9
lines changed

2 files changed

+48
-9
lines changed

graphdatascience/session/dedicated_sessions.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ def get_or_create(
5151
# hashing the password to avoid storing the actual db password in Aura
5252
password = hashlib.sha256(db_connection.password.encode()).hexdigest()
5353

54-
# TODO configure session size (and check existing_session has same size)
5554
if existing_session:
5655
self._check_expiry_date(existing_session)
5756
self._check_memory_configuration(existing_session, memory.value)
@@ -106,7 +105,13 @@ def list(self) -> List[SessionInfo]:
106105
return [SessionInfo.from_session_details(i) for i in sessions]
107106

108107
def _find_existing_session(self, session_name: str, dbid: str) -> Optional[SessionDetails]:
109-
matched_sessions = [s for s in self._aura_api.list_sessions(dbid) if s.name == session_name]
108+
matched_sessions: List[SessionDetails] = []
109+
try:
110+
matched_sessions = [s for s in self._aura_api.list_sessions(dbid) if s.name == session_name]
111+
except HTTPError as e:
112+
# ignore 404 errors when listing sessions as it could mean paused sessions or deleted sessions
113+
if e.response.status_code != 404:
114+
raise e
110115

111116
if len(matched_sessions) == 0:
112117
return None

graphdatascience/tests/unit/test_dedicated_sessions.py

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,15 @@ def add_session(self, session: SessionDetails) -> None:
6969

7070
self._sessions[session.id] = session
7171

72+
# aura behaviour of paused instances not being in an orchestra
73+
def _mimic_paused_db_behaviour(self, dbid: str) -> None:
74+
db = self.list_instance(dbid)
75+
if db and db.status == "paused":
76+
response = Response()
77+
response.status_code = 404
78+
response._content = b"database not found"
79+
raise HTTPError(request=None, response=response)
80+
7281
def create_instance(
7382
self, name: str, memory: SessionMemoryValue, cloud_provider: str, region: str
7483
) -> InstanceCreateDetails:
@@ -104,20 +113,16 @@ def delete_instance(self, instance_id: str) -> InstanceSpecificDetails:
104113
return self._instances.pop(instance_id)
105114

106115
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)
116+
self._mimic_paused_db_behaviour(dbid)
114117

115118
return [v for _, v in self._sessions.items() if v.instance_id == dbid]
116119

117120
def list_instances(self) -> List[InstanceDetails]:
118121
return [v for _, v in self._instances.items()]
119122

120123
def list_session(self, session_id: str, dbid: str) -> Optional[SessionDetails]:
124+
self._mimic_paused_db_behaviour(dbid)
125+
121126
matched_instance = self._sessions.get(session_id, None)
122127

123128
if matched_instance:
@@ -399,6 +404,35 @@ def test_delete_nonunique_session(aura_api: AuraApi) -> None:
399404
assert len(sessions.list()) == 2
400405

401406

407+
def test_delete_session_paused_instance(aura_api: AuraApi) -> None:
408+
fake_aura_api = cast(FakeAuraApi, aura_api)
409+
410+
fake_aura_api.id_counter += 1
411+
paused_db = InstanceSpecificDetails(
412+
id="4242",
413+
status="paused",
414+
connection_url="foo.bar",
415+
memory=SessionMemory.m_16GB.value,
416+
type="",
417+
region="dresden",
418+
name="paused-db",
419+
tenant_id=fake_aura_api._tenant_id,
420+
cloud_provider="aws",
421+
)
422+
fake_aura_api._instances[paused_db.id] = paused_db
423+
424+
session = aura_api.create_session(
425+
name="gds-session-my-session-name",
426+
dbid=paused_db.id,
427+
pwd="some_pwd",
428+
memory=SessionMemory.m_8GB.value,
429+
)
430+
sessions = DedicatedSessions(aura_api)
431+
432+
# cannot delete session running against a paused instance
433+
assert not sessions.delete(session.name)
434+
435+
402436
def test_create_waiting_forever() -> None:
403437
aura_api = FakeAuraApi(status_after_creating="updating")
404438
_setup_db_instance(aura_api)

0 commit comments

Comments
 (0)