DatabaseSessionService.list_sessions lacks pagination support
- Langage dominant
- Python
- Étoiles
- 21.5k
- Forks
- 4k
- Merge moyen
- 1 j 14 h
- PR mergées (30 j)
- 37
Description
## Description
`DatabaseSessionService.list_sessions()` queries **all** session rows for a given `app_name` (and optional `user_id`) without any pagination mechanism (`LIMIT`/`OFFSET` or cursor-based). When the number of sessions under an app grows large, this causes severe performance issues.
## Impact
In our production environment with ~10k sessions per app, calling `list_sessions()` takes approximately **74 seconds** to return, making the API endpoint essentially unusable.
## Current Behavior
```python
# base_session_service.py
class ListSessionsResponse(BaseModel):
sessions: list[Session] = Field(default_factory=list)
async def list_sessions(
self, *, app_name: str, user_id: Optional[str] = None
) -> ListSessionsResponse:
...
```
The method returns all sessions at once with no way to limit the result set.
## Proposed Solution
Add pagination support to `BaseSessionService.list_sessions()` and `DatabaseSessionService`:
```python
class ListSessionsResponse(BaseModel):
sessions: list[Session] = Field(default_factory=list)
next_page_token: str | None = None
async def list_sessions(
self,
*,
app_name: str,
user_id: str | None = None,
page_size: int = 20,
page_token: str | None = None,
) -> ListSessionsResponse:
...
```
The implementation should:
- Accept `page_size` (with a reasonable default, e.g. 20, max 100) and `page_token`
- Query with `LIMIT`/`OFFSET` (or cursor-based pagination)
- Order by `update_time DESC` for consistent results
- Return `next_page_token` when more results are available
- Maintain backward compatibility (default behavior returns first page)
## Workaround
We currently bypass `DatabaseSessionService.list_sessions()` by querying PostgreSQL directly with `LIMIT`/`OFFSET` in our service layer.
## Environment
- ADK version: 1.25.1
- Python: 3.12
- Database: PostgreSQL with asyncpg
Guide de contribution
Ouvrir le guide de contribution
Évaluation
Cette issue n'a pas encore été évaluée.