File size: 1,227 Bytes
e791b16 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # Version manager for rollout workers
import threading
class VersionManager:
"""Tracks the current policy version and notifies rollout workers.
The orchestrator increments the version after each weight sync. Workers can
query the manager to obtain the latest version number.
"""
def __init__(self, initial_version: int = 0):
self._version = initial_version
self._lock = threading.Lock()
def get_version(self) -> int:
with self._lock:
return self._version
def bump_version(self) -> int:
with self._lock:
self._version += 1
return self._version
# ββ Test-facing API ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def current(self) -> int:
"""Return the current policy version."""
return self.get_version()
def bump(self) -> None:
"""Increment the policy version by 1."""
self.bump_version()
def staleness(self, version: int) -> int:
"""Return how many versions behind ``version`` is relative to current."""
return self.current() - version
|