Files
ss-tools/docs/architecture.md
busya 24d3b7d1f9 refactor(task-manager): implement task resilience and execution lifecycle improvements
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.
2026-07-12 15:31:56 +03:00

2.9 KiB
Raw Blame History

[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 для метаданных Superset
  • superset_container — запущенный веб-сервер Superset
  • superset_urlhttp://host:port
  • superset_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.

[/DEF:DocArchitecture:Module]