grok2api / app /control /account /runtime.py
FUCAT's picture
Deploy grok2api to HF Spaces (Docker)
7e55e53
Raw
History Blame Contribute Delete
3.42 kB
"""Account runtime singletons and hot-apply helpers.
These helpers expose the process-local account refresh runtime without making
callers import ``app.main``. Admin handlers use them to reconcile strategy and
scheduler state after hot config updates.
"""
from typing import TYPE_CHECKING, Literal
if TYPE_CHECKING:
from .refresh import AccountRefreshService
from .scheduler import AccountRefreshScheduler
_refresh_service: "AccountRefreshService | None" = None
_refresh_scheduler: "AccountRefreshScheduler | None" = None
_refresh_scheduler_leader = False
def set_refresh_service(service: "AccountRefreshService | None") -> None:
"""Register the process-global account refresh service."""
global _refresh_service
_refresh_service = service
def get_refresh_service() -> "AccountRefreshService | None":
"""Return the registered account refresh service, if any."""
return _refresh_service
def set_refresh_scheduler(scheduler: "AccountRefreshScheduler | None") -> None:
"""Register the process-global account refresh scheduler."""
global _refresh_scheduler
_refresh_scheduler = scheduler
def get_refresh_scheduler() -> "AccountRefreshScheduler | None":
"""Return the registered account refresh scheduler, if any."""
return _refresh_scheduler
def set_refresh_scheduler_leader(is_leader: bool) -> None:
"""Record whether this worker currently owns the refresh scheduler lock."""
global _refresh_scheduler_leader
_refresh_scheduler_leader = bool(is_leader)
def is_refresh_scheduler_leader() -> bool:
"""Return True when this worker is the active refresh-scheduler leader."""
return _refresh_scheduler_leader
def reconcile_refresh_runtime(
enabled: bool | None = None,
) -> Literal["quota", "random"]:
"""Hot-apply refresh strategy and scheduler state for the current worker."""
from app.dataplane.account.selector import current_strategy, set_strategy
from app.platform.config.snapshot import config
from app.platform.logging.logger import logger
refresh_enabled = (
config.get_bool("account.refresh.enabled", False)
if enabled is None
else bool(enabled)
)
target_strategy: Literal["quota", "random"] = (
"quota" if refresh_enabled else "random"
)
previous_strategy = current_strategy()
if previous_strategy != target_strategy:
set_strategy(target_strategy)
scheduler_action = "unchanged"
scheduler = _refresh_scheduler
if scheduler is not None and _refresh_scheduler_leader:
if refresh_enabled:
if not scheduler.is_running():
scheduler.start()
scheduler_action = "started"
elif scheduler.is_running():
scheduler.stop()
scheduler_action = "stopped"
if previous_strategy != target_strategy or scheduler_action != "unchanged":
logger.info(
"account refresh runtime reconciled: previous_strategy={} strategy={} leader={} scheduler_action={}",
previous_strategy,
target_strategy,
_refresh_scheduler_leader,
scheduler_action,
)
return target_strategy
__all__ = [
"get_refresh_service",
"set_refresh_service",
"get_refresh_scheduler",
"set_refresh_scheduler",
"is_refresh_scheduler_leader",
"set_refresh_scheduler_leader",
"reconcile_refresh_runtime",
]