4.1 KiB
4.1 KiB
Памятка для доработки SciMesh Worker
Это короткие правила по итогам ревью первой версии воркера. Перед новой задачей прочитай также PLAN.md и документ задачи, который тебе дали.
Что делать
- Считай воркер клиентом. Очередью, статусами задач и PostgreSQL управляет только coordinator.
- Сначала скачай и проверь входной файл по SHA-256, затем запусти расчёт.
- Сохраняй файлы только в своей папке
task_id/attempt. - После расчёта сначала загрузи результат через coordinator, затем отправляй результат задачи.
- В
resultпередавай URI, который вернул coordinator, плюс SHA-256 и тип файла. - При ошибке вызывай
/tasks/{id}/failure; при успехе —/tasks/{id}/result. - Для heartbeat используй новое
lease_expires_at, возвращённое coordinator. - Во все запросы, связанные с задачей, передавай
worker_idиattempt. - Пиши тесты не только на успех: проверь ошибку runner, неверный checksum, ошибку загрузки, потерю lease и пустой результат.
- Если поменял API, меняй одновременно Python-код, Go coordinator, документацию и тесты.
Чего не делать
- Не отправляй в coordinator пути вида
worker://...илиfile://.... Coordinator не видит локальные файлы воркера. - Не используй
/resultдля сообщения об ошибке. - Не считай, что проверок Python достаточно: coordinator обязан сам проверить владельца lease, attempt, срок lease и допустимость смены статуса.
- Не повторяй любой HTTP-запрос вслепую. Повторные запросы должны быть
безопасны: одинаковый
(task_id, attempt, worker_id)не должен создавать дубликаты. - Не передавай bearer token на другой домен при редиректе и не пиши токены, traceback или полные локальные пути в логи.
- Не помечай задачу завершённой, если артефакт не загружен надёжно.
- Не меняй контракт API «по ощущениям». Сначала зафиксируй JSON, статусы и переходы состояний в документации.
Мини-чеклист перед коммитом
- Результат загружен в storage coordinator до
POST /result. - Ошибка уходит в
POST /failure, а не вPOST /result. - Heartbeat возвращает новый срок lease, и код его сохраняет.
- В запросах есть верные
worker_idиattempt. - Нет
worker://,file://, токенов и секретов в результатах или логах. - Добавлены тесты на новый сценарий и на ошибку.
pytestи проверка форматирования проходят.
Короткий контекст для нейронки
SciMesh Worker — клиент coordinator, а не владелец очереди. Загружай результат через coordinator до завершения задачи. Успех отправляй в
/result, ошибку — в/failure. Проверяй checksum, lease и attempt. Меняя протокол, обновляй Python, Go, документацию и тесты в одном изменении.