Skip to content

Commit 5a57f14

Browse files
authored
Merge pull request #674 from FlorentinD/ignore-paused-dbs
Skip paused dbs for sessions.list()
2 parents 44c6ecb + ae0f9c3 commit 5a57f14

File tree

3 files changed

+54
-4
lines changed

3 files changed

+54
-4
lines changed

graphdatascience/query_runner/gds_arrow_client.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,14 @@ def create(
3232
tls_root_certs: Optional[bytes] = None,
3333
connection_string_override: Optional[str] = None,
3434
) -> "GdsArrowClient":
35+
if query_runner.server_version() > ServerVersion(2, 6, 0):
36+
debugYields = ["listenAddress", "versions"]
37+
else:
38+
# return enabled to avoid squeeze returning a single str
39+
debugYields = ["listenAddress", "enabled"]
40+
3541
arrow_info = (
36-
query_runner.call_procedure(
37-
endpoint="gds.debug.arrow", custom_error=False, yields=["listenAddress", "versions"]
38-
)
42+
query_runner.call_procedure(endpoint="gds.debug.arrow", custom_error=False, yields=debugYields)
3943
.squeeze()
4044
.to_dict()
4145
)

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)