mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
fix(task): TaskPoller Redis 分布式锁操作增加异常捕获,避免 Redis 故障时任务轮询崩溃
This commit is contained in:
@@ -220,9 +220,17 @@ class TaskPollerService:
|
|||||||
if not self.redis:
|
if not self.redis:
|
||||||
return "no_redis"
|
return "no_redis"
|
||||||
token = str(uuid4())
|
token = str(uuid4())
|
||||||
acquired = await self.redis.set(
|
try:
|
||||||
self.adapter.lock_key, token, nx=True, ex=self.adapter.lock_ttl
|
acquired = await self.redis.set(
|
||||||
)
|
self.adapter.lock_key, token, nx=True, ex=self.adapter.lock_ttl
|
||||||
|
)
|
||||||
|
except Exception as exc:
|
||||||
|
logger.warning(
|
||||||
|
"[{}] Redis lock acquire failed (best-effort skip): {}",
|
||||||
|
self.adapter.task_type,
|
||||||
|
exc,
|
||||||
|
)
|
||||||
|
return "no_redis"
|
||||||
return token if acquired else None
|
return token if acquired else None
|
||||||
|
|
||||||
async def _release_redis_lock(self, token: str) -> None:
|
async def _release_redis_lock(self, token: str) -> None:
|
||||||
@@ -234,7 +242,14 @@ class TaskPollerService:
|
|||||||
end
|
end
|
||||||
return 0
|
return 0
|
||||||
"""
|
"""
|
||||||
await self.redis.eval(script, 1, self.adapter.lock_key, token)
|
try:
|
||||||
|
await self.redis.eval(script, 1, self.adapter.lock_key, token)
|
||||||
|
except Exception as exc:
|
||||||
|
logger.warning(
|
||||||
|
"[{}] Redis lock release failed (will expire via TTL): {}",
|
||||||
|
self.adapter.task_type,
|
||||||
|
exc,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
_task_poller: TaskPollerService | None = None
|
_task_poller: TaskPollerService | None = None
|
||||||
|
|||||||
Reference in New Issue
Block a user