import logging
from olc.task_schedule.task_schedule import Task, OlcScheduleManager
logger = logging.getLogger(__name__)
class OlcClusterLimiterRefresh(Task):
"""
集群流控批量刷新任务
"""
def run(self):
from olc.limit.cluster.redis.redis_client import OlcRedisManager
if not OlcRedisManager.check_initialized():
return
from olc.limit.cluster.abs_cluster_limiter import AbsClusterLimiter
if not AbsClusterLimiter.is_exception_status():
return
if OlcRedisManager.is_active():
logging.info(f"redis connection recovered, cluster mode restored")
AbsClusterLimiter.recover()
@classmethod
def start(cls):
"""
启动定时任务
:return:
"""
try:
schedule_mgr = OlcScheduleManager.get_instance()
schedule_mgr.create_task(
name="olc-cluster-refresh",
task=OlcClusterLimiterRefresh(),
interval=1,
pool_name="olc-cluster-refresh",
max_worker=1,
)
schedule_mgr.start_task(name="olc-cluster-refresh")
except Exception as e:
logger.warning(f"failed to start cluster-refresh task: {e}")