refactor(A1): remove Flamenco, simplify render pipeline to Celery-only

- Remove flamenco-manager and flamenco-worker from docker-compose.yml
- Delete flamenco_client.py, flamenco_tasks.py, docker_scaler.py
- Simplify render_dispatcher.py to Celery-only (removes ~300 lines)
- Remove Flamenco beat schedule from celery_app.py
- Clean admin.py: remove flamenco settings, endpoints, threejs validation
- Clean orders.py cancel-render: Celery revoke only
- Clean worker.py: remove flamenco_job_id from activity response
- Migration 032: cancel lingering flamenco jobs, remove flamenco settings
- PLAN.md: mark all decisions confirmed, status IN UMSETZUNG

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-06 15:38:37 +01:00
parent 552922eb8a
commit 1d6864fb64
13 changed files with 1524 additions and 1151 deletions
+16 -69
View File
@@ -920,44 +920,17 @@ async def cancel_line_render(
if line.render_status not in ("processing", "pending"):
raise HTTPException(400, detail=f"Line render_status is '{line.render_status}', nothing to cancel")
cancelled_backend = line.render_backend_used or "unknown"
cancelled_backend = line.render_backend_used or "celery"
errors: list[str] = []
# Cancel Flamenco job if applicable
if line.render_backend_used == "flamenco" and line.flamenco_job_id:
try:
from app.services.flamenco_client import get_flamenco_client
from app.models.system_setting import SystemSetting
row = await db.execute(
select(SystemSetting).where(SystemSetting.key == "flamenco_manager_url")
)
setting = row.scalar_one_or_none()
url = setting.value if setting else "http://flamenco-manager:8080"
client = get_flamenco_client(url)
client.cancel_job(line.flamenco_job_id)
except Exception as exc:
errors.append(f"Flamenco cancel failed: {str(exc)[:200]}")
# Revoke Celery task if applicable
if line.render_backend_used == "celery" or not line.render_backend_used:
try:
from app.tasks.celery_app import celery_app
celery_app.control.revoke(
f"render-{line_id}", terminate=True, signal="SIGTERM"
)
except Exception as exc:
errors.append(f"Celery revoke failed: {str(exc)[:200]}")
# Also kill the Blender subprocess in the renderer microservice.
# The job_id sent to blender-renderer equals the order_line_id.
try:
import httpx as _httpx
_httpx.post(
f"http://blender-renderer:8100/cancel/{line_id}",
timeout=5.0,
)
except Exception:
pass # best-effort; renderer may not be running a job for this line
# Revoke Celery task (best-effort)
try:
from app.tasks.celery_app import celery_app
celery_app.control.revoke(
f"render-{line_id}", terminate=True, signal="SIGTERM"
)
except Exception as exc:
errors.append(f"Celery revoke failed: {str(exc)[:200]}")
# Mark line as cancelled
from sqlalchemy import update as sql_update
@@ -1013,47 +986,21 @@ async def cancel_order_renders(
if not lines:
raise HTTPException(400, detail="No active renders to cancel")
from app.services.flamenco_client import get_flamenco_client
from app.models.system_setting import SystemSetting
from app.tasks.celery_app import celery_app
from sqlalchemy import update as sql_update
# Load Flamenco URL once
row = await db.execute(
select(SystemSetting).where(SystemSetting.key == "flamenco_manager_url")
)
setting = row.scalar_one_or_none()
flamenco_url = setting.value if setting else "http://flamenco-manager:8080"
now = datetime.utcnow()
cancelled_count = 0
errors: list[str] = []
for line in lines:
# Cancel Flamenco job
if line.render_backend_used == "flamenco" and line.flamenco_job_id:
try:
client = get_flamenco_client(flamenco_url)
client.cancel_job(line.flamenco_job_id)
except Exception as exc:
errors.append(f"Line {line.id}: Flamenco cancel failed: {str(exc)[:100]}")
# Revoke Celery task + kill Blender subprocess in renderer service
if line.render_backend_used == "celery" or not line.render_backend_used:
try:
celery_app.control.revoke(
f"render-{line.id}", terminate=True, signal="SIGTERM"
)
except Exception:
pass # Celery revoke is best-effort
try:
import httpx as _httpx
_httpx.post(
f"http://blender-renderer:8100/cancel/{line.id}",
timeout=5.0,
)
except Exception:
pass # best-effort
# Revoke Celery task (best-effort)
try:
celery_app.control.revoke(
f"render-{line.id}", terminate=True, signal="SIGTERM"
)
except Exception:
pass
await db.execute(
sql_update(OrderLine)