Skip to content

Commit 78abf4b

Browse files
🐛 Fix listing (currently, project activity only shows the current user's actions; activities of other users are not visible) (#7732)
1 parent 14e0a66 commit 78abf4b

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed

services/director-v2/src/simcore_service_director_v2/api/rpc/_computations.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
from models_library.users import UserID
1414
from servicelib.rabbitmq import RPCRouter
1515
from servicelib.utils import limited_gather
16-
from simcore_service_director_v2.models.comp_tasks import ComputationTaskForRpcDBGet
1716

17+
from ...core.errors import ComputationalRunNotFoundError
18+
from ...models.comp_runs import CompRunsAtDB
19+
from ...models.comp_tasks import ComputationTaskForRpcDBGet
1820
from ...modules.db.repositories.comp_runs import CompRunsRepository
1921
from ...modules.db.repositories.comp_tasks import CompTasksRepository
2022
from ...utils import dask as dask_utils
@@ -95,6 +97,19 @@ async def _fetch_task_log(
9597
return None
9698

9799

100+
async def _get_latest_run_or_none(
101+
comp_runs_repo: CompRunsRepository,
102+
user_id: UserID,
103+
project_uuid: ProjectID,
104+
) -> CompRunsAtDB | None:
105+
try:
106+
return await comp_runs_repo.get(
107+
user_id=user_id, project_id=project_uuid, iteration=None
108+
)
109+
except ComputationalRunNotFoundError:
110+
return None
111+
112+
98113
@router.expose(reraise_if_error_type=())
99114
async def list_computations_latest_iteration_tasks_page(
100115
app: FastAPI,
@@ -127,13 +142,15 @@ async def list_computations_latest_iteration_tasks_page(
127142
# Fetch latest run for each project concurrently
128143
latest_runs = await limited_gather(
129144
*[
130-
comp_runs_repo.get(user_id=user_id, project_id=project_uuid, iteration=None)
145+
_get_latest_run_or_none(comp_runs_repo, user_id, project_uuid)
131146
for project_uuid in unique_project_uuids
132147
],
133148
limit=20,
134149
)
135150
# Build a dict: project_uuid -> iteration
136-
project_uuid_to_iteration = {run.project_uuid: run.iteration for run in latest_runs}
151+
project_uuid_to_iteration = {
152+
run.project_uuid: run.iteration for run in latest_runs if run is not None
153+
}
137154

138155
# Run all log fetches concurrently
139156
log_files = await limited_gather(

services/director-v2/src/simcore_service_director_v2/modules/db/repositories/comp_runs.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,7 @@ async def list_for_user__only_latest_iterations(
221221
if order_by is None:
222222
order_by = OrderBy(field=IDStr("run_id")) # default ordering
223223

224-
base_select_query = sa.select(
225-
*self._COMPUTATION_RUNS_RPC_GET_COLUMNS
226-
).select_from(
224+
_latest_runs = (
227225
sa.select(
228226
comp_runs.c.project_uuid,
229227
sa.func.max(comp_runs.c.iteration).label(
@@ -235,26 +233,28 @@ async def list_for_user__only_latest_iterations(
235233
& (
236234
comp_runs.c.metadata["product_name"].astext == product_name
237235
) # <-- NOTE: We might create a separate column for this for fast retrieval
238-
& (
239-
comp_runs.c.result.in_(
240-
[
241-
RUNNING_STATE_TO_DB[item]
242-
for item in RunningState.list_running_states()
243-
]
244-
)
245-
)
246-
if filter_only_running
247-
else True
248236
)
249237
.group_by(comp_runs.c.project_uuid)
250-
.subquery("latest_runs")
251-
.join(
238+
)
239+
if filter_only_running:
240+
_latest_runs = _latest_runs.where(
241+
comp_runs.c.result.in_(
242+
[
243+
RUNNING_STATE_TO_DB[item]
244+
for item in RunningState.list_running_states()
245+
]
246+
)
247+
)
248+
_latest_runs_subquery = _latest_runs.subquery().alias("latest_runs")
249+
250+
base_select_query = sa.select(
251+
*self._COMPUTATION_RUNS_RPC_GET_COLUMNS
252+
).select_from(
253+
_latest_runs_subquery.join(
252254
comp_runs,
253255
sa.and_(
254-
comp_runs.c.project_uuid
255-
== literal_column("latest_runs.project_uuid"),
256-
comp_runs.c.iteration
257-
== literal_column("latest_runs.latest_iteration"),
256+
comp_runs.c.project_uuid == _latest_runs_subquery.c.project_uuid,
257+
comp_runs.c.iteration == _latest_runs_subquery.c.latest_iteration,
258258
),
259259
)
260260
)

0 commit comments

Comments
 (0)