Enhance the reliability and observability of the task execution engine by introducing retry mechanisms, idempotency, and structured progress tracking. - Implement centralized retry logic with exponential backoff support in `JobLifecycle`. - Add `retry_task` API endpoint and `TaskManager` method for manual task restarts. - Introduce task idempotency using `_idempotency_key` to prevent duplicate executions. - Add `retry_count`, `max_retries`, `last_error`, and `progress` fields to the `Task` model and ensure persistence via `TaskPersistenceService`. - Upgrade `SchedulerService` to use differential synchronization with the persistent `SQLAlchemyJobStore` for better job durability. - Implement structured heartbeat logging to support real-time progress updates. - Update project documentation and ADRs to reflect the new plugin runtime and task resilience patterns. - Add comprehensive unit and integration tests for the new task lifecycle features.
2.9 KiB
2.9 KiB
[DEF:DocArchitecture:Module]
@TIER: STANDARD
@PURPOSE: Placeholder architecture document reserved for future normalized project architecture guidance.
@RELATION: DEPENDS_ON -> [DEF:Std:Architecture:Standard]
Architecture guidance currently lives in .ai/standards/architecture.md and .ai/MODULE_MAP.md.
Интеграционное тестирование с Testcontainers
Проект использует Testcontainers для интеграционных тестов, требующих реальных сервисов (PostgreSQL, ClickHouse, Apache Superset).
Принцип
Каждая тестовая сессия получает изолированные Docker-контейнеры на случайных портах. Контейнеры уничтожаются после завершения сессии. Это гарантирует отсутствие утечек состояния между запусками.
Поддерживаемые сервисы
| Сервис | Образ | Scope | Конфигурация |
|---|---|---|---|
| PostgreSQL | postgres:16-alpine |
session | backend/tests/integration/conftest.py |
| ClickHouse | clickhouse/clickhouse-server:24.3 |
module | test_translate_clickhouse.py |
| Apache Superset | apache/superset:4.1.2 |
session | backend/tests/integration/conftest.py |
Apache Superset Testcontainers
Решение: ADR-0012 — Superset Testcontainers
Архитектура:
Test Session
├── PostgresContainer (общий) # DB: superset_meta
├── Init Container (краткоживущий) # db upgrade → create-admin → init
└── Web Container (на всю сессию) # superset run -p 8088
Запуск:
cd backend && source .venv/bin/activate
python -m pytest tests/integration/test_superset_integration.py -v
# 8 passed in ~25s
Доступные fixtures:
superset_db_url— PostgreSQL URI для метаданных Supersetsuperset_container— запущенный веб-сервер Supersetsuperset_url—http://host:portsuperset_admin_headers— авторизованная сессия (admin:admin123)
Ограничения:
- Для REST API используйте fixture
superset_jwt_headers: JWT-авторизация (/api/v1/security/login) настроена в тестовом контейнере; session cookie предназначена для form-login сценариев. - Метаданные Superset хранятся в отдельной PostgreSQL БД
superset_meta. Fixture устанавливаетpsycopg2-binary, передаёт URI черезSUPERSET_CONFIG_PATHи использует Docker bridge IP; подробности в ADR-0012.