story: DGR-041 Register native Shard capabilities without redesigning Meshnet
This commit is contained in:
@@ -220,6 +220,23 @@ class NativeWorkerSupervisor:
|
||||
self._on_available("worker ready and identity verified")
|
||||
return result
|
||||
|
||||
def add_availability_callbacks(
|
||||
self,
|
||||
*,
|
||||
on_available: AvailabilityCallback | None = None,
|
||||
on_unavailable: AvailabilityCallback | None = None,
|
||||
) -> None:
|
||||
"""Attach an integration callback before the worker is started.
|
||||
|
||||
Registration is deliberately supplied by the caller so this supervisor
|
||||
stays independent of Tracker HTTP and of every other backend.
|
||||
"""
|
||||
with self._lock:
|
||||
if self._process is not None:
|
||||
raise NativeWorkerError("availability callbacks must be attached before start")
|
||||
self._on_available = _combine_callbacks(self._on_available, on_available)
|
||||
self._on_unavailable = _combine_callbacks(self._on_unavailable, on_unavailable)
|
||||
|
||||
def restart(self) -> NativeWorkerProbe:
|
||||
"""Withdraw the old capability, stop its process, then prove a fresh one."""
|
||||
self.stop(reason="worker restart requested")
|
||||
@@ -330,6 +347,21 @@ def _sha256_file(path: Path) -> str:
|
||||
return digest.hexdigest()
|
||||
|
||||
|
||||
def _combine_callbacks(
|
||||
first: AvailabilityCallback | None, second: AvailabilityCallback | None
|
||||
) -> AvailabilityCallback | None:
|
||||
if first is None:
|
||||
return second
|
||||
if second is None:
|
||||
return first
|
||||
|
||||
def combined(reason: str) -> None:
|
||||
first(reason)
|
||||
second(reason)
|
||||
|
||||
return combined
|
||||
|
||||
|
||||
def _terminate_process_group(
|
||||
process: subprocess.Popen[str], shutdown_timeout: float, kill_timeout: float
|
||||
) -> None:
|
||||
|
||||
Reference in New Issue
Block a user