生成任务失败积分回退
This commit is contained in:
@@ -16,6 +16,7 @@ from app.services.resource_accounting_service import (
|
||||
)
|
||||
from app.services.video_cover_service import create_video_cover_for_local_video
|
||||
from app.config import settings
|
||||
from app.services.generation_refund_service import mark_generation_record_failed_and_refund_once
|
||||
|
||||
logger = logging.getLogger("videogen")
|
||||
|
||||
@@ -76,6 +77,7 @@ class TaskQueue:
|
||||
GenerationRecord.id == record_id,
|
||||
GenerationRecord.deleted_at.is_(None),
|
||||
)
|
||||
.with_for_update()
|
||||
.limit(1)
|
||||
)
|
||||
record = result.scalar_one_or_none()
|
||||
@@ -92,8 +94,11 @@ class TaskQueue:
|
||||
record_id = record.id
|
||||
|
||||
if not record.seedance_task_id:
|
||||
record.status = "failed"
|
||||
record.error_message = "缺少外部任务ID"
|
||||
await mark_generation_record_failed_and_refund_once(
|
||||
db,
|
||||
record=record,
|
||||
error_message="缺少外部任务ID",
|
||||
)
|
||||
await db.commit()
|
||||
return
|
||||
|
||||
@@ -105,8 +110,11 @@ class TaskQueue:
|
||||
count = self._active.get(record_id, 0) + 1
|
||||
self._active[record_id] = count
|
||||
if count >= MAX_POLLS:
|
||||
record.status = "failed"
|
||||
record.error_message = f"轮询超时: {e}"
|
||||
await mark_generation_record_failed_and_refund_once(
|
||||
db,
|
||||
record=record,
|
||||
error_message=f"轮询超时: {e}",
|
||||
)
|
||||
await db.commit()
|
||||
del self._active[record_id]
|
||||
else:
|
||||
@@ -166,8 +174,11 @@ class TaskQueue:
|
||||
logger.info(f"Video task completed: {record_id}")
|
||||
|
||||
elif status == "failed":
|
||||
record.status = "failed"
|
||||
record.error_message = poll_result.get("error", "视频生成失败")
|
||||
await mark_generation_record_failed_and_refund_once(
|
||||
db,
|
||||
record=record,
|
||||
error_message=poll_result.get("error", "视频生成失败"),
|
||||
)
|
||||
self._active.pop(record_id, None)
|
||||
await db.commit()
|
||||
logger.info(f"Video task failed: {record_id}")
|
||||
@@ -176,8 +187,11 @@ class TaskQueue:
|
||||
count = self._active.get(record_id, 0) + 1
|
||||
self._active[record_id] = count
|
||||
if count >= MAX_POLLS:
|
||||
record.status = "failed"
|
||||
record.error_message = "视频生成超时"
|
||||
await mark_generation_record_failed_and_refund_once(
|
||||
db,
|
||||
record=record,
|
||||
error_message="视频生成超时",
|
||||
)
|
||||
self._active.pop(record_id, None)
|
||||
await db.commit()
|
||||
logger.info(f"Video task timed out: {record_id}")
|
||||
@@ -230,15 +244,21 @@ class TaskQueue:
|
||||
await db.commit()
|
||||
logger.info(f"Image task completed: {record_id}")
|
||||
else:
|
||||
record.status = "failed"
|
||||
record.error_message = poll_result.get("error", "图片生成失败")
|
||||
await mark_generation_record_failed_and_refund_once(
|
||||
db,
|
||||
record=record,
|
||||
error_message=poll_result.get("error", "图片生成失败"),
|
||||
)
|
||||
await db.commit()
|
||||
logger.info(f"Image task failed: {record_id}")
|
||||
_log_image_response(record_id, poll_result)
|
||||
|
||||
except Exception as e:
|
||||
record.status = "failed"
|
||||
record.error_message = str(e)
|
||||
await mark_generation_record_failed_and_refund_once(
|
||||
db,
|
||||
record=record,
|
||||
error_message=str(e),
|
||||
)
|
||||
_log_image_response(record_id, {}, str(e))
|
||||
await db.commit()
|
||||
logger.error(f"Image task failed: {record_id}, error: {e}")
|
||||
|
||||
Reference in New Issue
Block a user