Compare commits

..
5 changed files with 36 additions and 7 deletions

No files matched your search

+9 -1
View File
@@ -128,7 +128,15 @@ def setup_file_logging():
root_logger.setLevel(logging.INFO)
root_logger.addHandler(app_handler)
root_logger.addHandler(error_handler)
root_logger.addFilter(TraceIdFilter())
# TraceIdFilter 必须挂在 handler 上,而非 root logger。
# logger 级 filter 只对「直接经该 logger 发射」的记录生效;子 logger 的记录向上冒泡
# 到 root 的 handler 时不会经过 root 的 logger 级 filter,导致 %(trace_id)s 缺失并抛
# KeyError('trace_id')。handler 级 filter 对经它格式化的每条记录都生效。
_tid_filter = TraceIdFilter()
app_handler.addFilter(_tid_filter)
error_handler.addFilter(_tid_filter)
access_handler.addFilter(_tid_filter)
# 配置访问日志专用logger
access_logger = logging.getLogger("aiflow.access")
+1 -1
View File
@@ -945,7 +945,7 @@ class SkillTrajectoryLink(Base):
skill_name = Column(String(200), nullable=False, index=True, comment="关联的技能名称")
user_id = Column(String(36), ForeignKey("users.id"), nullable=False, index=True)
trajectory_id = Column(String(36), nullable=True, comment="关联的轨迹ID")
atom_id = Column(String(36), nullable=True, comment="原子任务ID")
atom_id = Column(String(128), nullable=True, comment="原子任务ID(形如 trajectory_id_atom_N,需容纳 UUID+后缀)")
weightscore = Column(Integer, default=0, comment="关联权重分")
created_at = Column(DateTime, default=datetime.now)
@@ -96,10 +96,24 @@ class PipelineScheduler:
self._process_trajectory(db, traj)
except Exception as e:
logger.error(f"处理轨迹 {traj.id} 失败: {e}")
traj.error_msg = str(e)[:500]
traj.retry_count = (traj.retry_count or 0) + 1
traj.status = "error"
db.commit()
# 先回滚失效事务(_process_trajectory 内 commit 失败会让 session
# 进入 rolled-back 状态,不回滚直接再 commit 会抛 PendingRollbackError
# 并级联到外层日志),再写错误状态。
try:
db.rollback()
except Exception:
pass
try:
traj.error_msg = str(e)[:500]
traj.retry_count = (traj.retry_count or 0) + 1
traj.status = "error"
db.commit()
except Exception as ce:
logger.error(f"更新轨迹 {traj.id} 错误状态失败: {ce}")
try:
db.rollback()
except Exception:
pass
finally:
db.close()
except Exception as e:
+1 -1
View File
@@ -70,7 +70,7 @@ CREATE TABLE IF NOT EXISTS `skill_trajectory_links` (
`skill_name` VARCHAR(200) NOT NULL,
`user_id` VARCHAR(36) NOT NULL,
`trajectory_id` VARCHAR(36),
`atom_id` VARCHAR(36),
`atom_id` VARCHAR(128),
`weightscore` INT DEFAULT 0,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_stl_user_skill` (`user_id`, `skill_name`),
+7
View File
@@ -0,0 +1,7 @@
-- 021: 加宽 skill_trajectory_links.atom_id 列
-- 背景:atom_id 实际值形如 "{trajectory_id}_atom_{i}"(UUID 36 + "_atom_" + 序号 ≈ 45 字符),
-- 原 VARCHAR(36) 过短导致写入时 DataError(1406) Data too long,并使会话进入 rolled-back 状态,
-- 级联触发 PendingRollbackError 与日志 trace_id KeyError 刷屏。
-- 本迁移幂等:重复执行 MODIFY 到相同类型为无害 no-op。
ALTER TABLE `skill_trajectory_links` MODIFY COLUMN `atom_id` VARCHAR(128) NULL;