auto-sync: 2026-05-21 11:53:34

This commit is contained in:
cfdaily
2026-05-21 11:53:34 +08:00
parent 6a3808b5cf
commit 9559f138ba
+31 -14
View File
@@ -640,7 +640,7 @@ class Ticker:
reclaimed: List[str] = []
now = datetime.utcnow() # UTC,与 SQLite datetime('now') 一致
# claimed 超时 → 重置为 pending
# claimed 超时 → 重置为 pending(如果 retry_count >= 3 则升级庞统)
claimed = queries.tasks_by_status("claimed")
for task in claimed:
if not task.claimed_at:
@@ -649,20 +649,37 @@ class Ticker:
claimed_time = datetime.fromisoformat(task.claimed_at)
elapsed = (now - claimed_time).total_seconds() / 60.0
if elapsed > self.claim_timeout_minutes:
conn = get_connection(db_path)
try:
ok = self._transition_status(
conn, task.id, "pending",
agent="daemon",
detail={"reason": "claim_timeout",
"elapsed_minutes": round(elapsed, 1)},
)
if ok:
retry_count = getattr(task, 'retry_count', 0) or 0
# 司马懿建议:复用 retry_count>=3 则升级庞统
if retry_count >= 3:
conn = get_connection(db_path)
try:
self._transition_status(
conn, task.id, "escalated",
agent="daemon",
detail={"reason": "claim_timeout_no_taker",
"retry_count": retry_count},
)
reclaimed.append(task.id)
logger.info("Reclaimed %s: claimed → pending (timeout %.1fm)",
task.id, elapsed)
finally:
conn.close()
logger.warning("Escalated %s: no taker after %d broadcasts",
task.id, retry_count)
finally:
conn.close()
else:
conn = get_connection(db_path)
try:
ok = self._transition_status(
conn, task.id, "pending",
agent="daemon",
detail={"reason": "claim_timeout",
"elapsed_minutes": round(elapsed, 1)},
)
if ok:
reclaimed.append(task.id)
logger.info("Reclaimed %s: claimed → pending (timeout %.1fm)",
task.id, elapsed)
finally:
conn.close()
except (ValueError, TypeError):
pass