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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user