fix: render pipeline + multi-tenancy bugs (B-Fix-1 through B-Fix-9)
- Remove worker-thumbnail (no Blender, was competing on thumbnail_rendering) - Move render_order_line_task to thumbnail_rendering queue (render-worker) - Restore template_service.py real implementation (fix circular import shim) - Thread tenant_id through STEP upload, Excel import, product create - Make system tables (output_types, materials, etc.) tenant_id nullable - Fix tenants frontend 307-redirect: use trailing slash /tenants/ - Remove Flamenco + Three.js from Admin UI (unsupported) - Set all output_types render_backend to celery (was flamenco) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -239,42 +239,12 @@ def regenerate_thumbnail(self, cad_file_id: str, part_colors: dict):
|
||||
|
||||
@celery_app.task(name="app.tasks.step_tasks.dispatch_order_line_render", queue="step_processing")
|
||||
def dispatch_order_line_render(order_line_id: str):
|
||||
"""Thin wrapper that calls render_dispatcher.dispatch_render()."""
|
||||
"""Route an order-line render to render_order_line_task."""
|
||||
logger.info(f"Dispatching render for order line: {order_line_id}")
|
||||
try:
|
||||
from app.services.render_dispatcher import dispatch_render
|
||||
result = dispatch_render(order_line_id)
|
||||
logger.info(f"Dispatch result for {order_line_id}: {result}")
|
||||
return result
|
||||
except Exception as exc:
|
||||
logger.error(f"dispatch_order_line_render failed for {order_line_id}: {exc}")
|
||||
# Mark line as failed so it doesn't stay stuck in "processing"
|
||||
try:
|
||||
from sqlalchemy import create_engine, update as sql_update
|
||||
from sqlalchemy.orm import Session
|
||||
from app.config import settings as app_settings
|
||||
from app.models.order_line import OrderLine
|
||||
from datetime import datetime
|
||||
sync_url = app_settings.database_url.replace("+asyncpg", "")
|
||||
eng = create_engine(sync_url)
|
||||
with Session(eng) as s:
|
||||
s.execute(
|
||||
sql_update(OrderLine)
|
||||
.where(OrderLine.id == order_line_id)
|
||||
.values(
|
||||
render_status="failed",
|
||||
render_completed_at=datetime.utcnow(),
|
||||
render_log={"error": f"Dispatch failed: {str(exc)[:500]}"},
|
||||
)
|
||||
)
|
||||
s.commit()
|
||||
eng.dispose()
|
||||
except Exception:
|
||||
logger.exception(f"Failed to mark {order_line_id} as failed after dispatch error")
|
||||
raise
|
||||
render_order_line_task.delay(order_line_id)
|
||||
|
||||
|
||||
@celery_app.task(bind=True, name="app.tasks.step_tasks.render_order_line_task", queue="step_processing", max_retries=3)
|
||||
@celery_app.task(bind=True, name="app.tasks.step_tasks.render_order_line_task", queue="thumbnail_rendering", max_retries=3)
|
||||
def render_order_line_task(self, order_line_id: str):
|
||||
"""Render a specific output type for an order line.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user