Skip to content

Commit b06487f

Browse files
committed
Merge branch 'feature/po-center-ii' of github.com:odeimaiz/osparc-simcore into feature/po-center-ii
2 parents d324cbe + d8f9270 commit b06487f

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

services/storage/src/simcore_service_storage/modules/db/file_meta_data.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
import datetime
33
from collections.abc import AsyncGenerator
44
from pathlib import Path
5-
from typing import TypeAlias
5+
from typing import Annotated, TypeAlias
66

77
import sqlalchemy as sa
88
from models_library.basic_types import SHA256Str
99
from models_library.projects import ProjectID
1010
from models_library.projects_nodes_io import NodeID, SimcoreS3FileID
1111
from models_library.users import UserID
1212
from models_library.utils.fastapi_encoders import jsonable_encoder
13-
from pydantic import BaseModel
13+
from pydantic import BaseModel, Field, validate_call
1414
from simcore_postgres_database.storage_models import file_meta_data
1515
from simcore_postgres_database.utils_repos import (
1616
pass_or_acquire_connection,
@@ -35,16 +35,15 @@
3535

3636

3737
class _PathsCursorParameters(BaseModel):
38+
# NOTE: this is a cursor do not put things that can grow unbounded as this goes then through REST APIs or such
3839
offset: int
3940
file_prefix: Path | None
40-
project_ids: list[ProjectID] | None
4141
partial: bool
4242

4343

4444
def _init_pagination(
4545
cursor: GenericCursor | None,
4646
*,
47-
filter_by_project_ids: list[ProjectID] | None,
4847
filter_by_file_prefix: Path | None,
4948
is_partial_prefix: bool,
5049
) -> _PathsCursorParameters:
@@ -53,7 +52,6 @@ def _init_pagination(
5352
return _PathsCursorParameters(
5453
offset=0,
5554
file_prefix=filter_by_file_prefix,
56-
project_ids=filter_by_project_ids,
5755
partial=is_partial_prefix,
5856
)
5957

@@ -229,23 +227,28 @@ async def try_get_directory(
229227
return None
230228
return None
231229

230+
@validate_call(config={"arbitrary_types_allowed": True})
232231
async def list_child_paths(
233232
self,
234233
*,
235234
connection: AsyncConnection | None = None,
236-
filter_by_project_ids: list[ProjectID] | None,
235+
filter_by_project_ids: Annotated[
236+
list[ProjectID] | None, Field(max_length=10000)
237+
],
237238
filter_by_file_prefix: Path | None,
238239
cursor: GenericCursor | None,
239240
limit: int,
240241
is_partial_prefix: bool,
241242
) -> tuple[list[PathMetaData], GenericCursor | None, TotalChildren]:
242243
"""returns a list of FileMetaDataAtDB that are one level deep.
243244
e.g. when no filter is used, these are top level objects
245+
246+
NOTE: if filter_by_project_ids is huge, this will raise ValidationError and someone needs to fix it!
247+
Maybe using a DB join
244248
"""
245249

246250
cursor_params = _init_pagination(
247251
cursor,
248-
filter_by_project_ids=filter_by_project_ids,
249252
filter_by_file_prefix=filter_by_file_prefix,
250253
is_partial_prefix=is_partial_prefix,
251254
)
@@ -278,9 +281,9 @@ async def list_child_paths(
278281
file_meta_data.c.file_id.like(search_prefix),
279282
(
280283
file_meta_data.c.project_id.in_(
281-
[f"{_}" for _ in cursor_params.project_ids]
284+
[f"{_}" for _ in filter_by_project_ids]
282285
)
283-
if cursor_params.project_ids
286+
if filter_by_project_ids
284287
else True
285288
),
286289
)
@@ -303,9 +306,9 @@ async def list_child_paths(
303306
)
304307
.where(
305308
file_meta_data.c.project_id.in_(
306-
[f"{_}" for _ in cursor_params.project_ids]
309+
[f"{_}" for _ in filter_by_project_ids]
307310
)
308-
if cursor_params.project_ids
311+
if filter_by_project_ids
309312
else True
310313
)
311314
.cte("ranked_files")

services/storage/src/simcore_service_storage/utils/simcore_s3_dsm_utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
from contextlib import suppress
23
from pathlib import Path
34
from typing import TypeAlias
@@ -31,6 +32,8 @@
3132
from ..modules.db.projects import ProjectRepository
3233
from .utils import convert_db_to_model
3334

35+
_logger = logging.getLogger(__name__)
36+
3437

3538
async def _list_all_files_in_folder(
3639
*,
@@ -250,6 +253,11 @@ async def list_child_paths_from_s3(
250253
"""
251254
objects_cursor = None
252255
if cursor is not None:
256+
_logger.debug(
257+
"Using cursor for listing child paths in S3 for filter '%s': %s",
258+
file_filter,
259+
cursor,
260+
)
253261
cursor_params = json_loads(cursor)
254262
assert cursor_params["file_filter"] == f"{file_filter}" # nosec
255263
objects_cursor = cursor_params["objects_next_cursor"]
@@ -277,6 +285,11 @@ async def list_child_paths_from_s3(
277285
]
278286
next_cursor = None
279287
if objects_next_cursor:
288+
_logger.debug(
289+
"Next cursor for listing child paths in S3 for filter '%s': %s",
290+
file_filter,
291+
objects_next_cursor,
292+
)
280293
next_cursor = json_dumps(
281294
{
282295
"file_filter": f"{file_filter}",

0 commit comments

Comments
 (0)