feat: transport authoritative workload projections
Assistant: codex Assistant-Model: gpt-5.6-sol Assistant-Session: 01a0230c-b06c-7641-808a-e191b6d1da49
This commit is contained in:
parent
a090903cfc
commit
ab936a1e98
27 changed files with 1671 additions and 15 deletions
|
|
@ -20,6 +20,7 @@ from hub_core.runtime.models import (
|
|||
RegistryRegistration,
|
||||
)
|
||||
from hub_core.runtime.repository_navigation import NavigationProjection
|
||||
from hub_core.runtime.workload_projection import WorkloadProjection
|
||||
|
||||
|
||||
class PortStore(Protocol):
|
||||
|
|
@ -55,6 +56,14 @@ class PortStore(Protocol):
|
|||
self, *, checked_at: datetime, diagnostic: Mapping[str, Any]
|
||||
) -> None: ...
|
||||
|
||||
async def get_workload_projection(self) -> WorkloadProjection | None: ...
|
||||
|
||||
async def replace_workload_projection(self, projection: WorkloadProjection) -> None: ...
|
||||
|
||||
async def mark_workload_projection_stale(
|
||||
self, *, checked_at: datetime, diagnostic: Mapping[str, Any]
|
||||
) -> None: ...
|
||||
|
||||
|
||||
class InMemoryPortStore:
|
||||
"""Deterministic ephemeral backend for local runtime and conformance tests.
|
||||
|
|
@ -72,6 +81,7 @@ class InMemoryPortStore:
|
|||
self._progress_events: list[dict[str, Any]] = []
|
||||
self._interaction_events: list[dict[str, Any]] = []
|
||||
self._repository_navigation: NavigationProjection | None = None
|
||||
self._workload_projection: WorkloadProjection | None = None
|
||||
|
||||
async def readiness_checks(self) -> dict[str, str]:
|
||||
return {"database": "not_applicable"}
|
||||
|
|
@ -174,6 +184,31 @@ class InMemoryPortStore:
|
|||
diagnostics=(deepcopy(dict(diagnostic)),),
|
||||
)
|
||||
|
||||
async def get_workload_projection(self) -> WorkloadProjection | None:
|
||||
async with self._lock:
|
||||
return deepcopy(self._workload_projection)
|
||||
|
||||
async def replace_workload_projection(self, projection: WorkloadProjection) -> None:
|
||||
async with self._lock:
|
||||
self._workload_projection = deepcopy(projection)
|
||||
|
||||
async def mark_workload_projection_stale(
|
||||
self, *, checked_at: datetime, diagnostic: Mapping[str, Any]
|
||||
) -> None:
|
||||
async with self._lock:
|
||||
current = self._workload_projection
|
||||
if current is None:
|
||||
return
|
||||
self._workload_projection = WorkloadProjection(
|
||||
projection_status="stale",
|
||||
source_snapshot=deepcopy(current.source_snapshot),
|
||||
source_checked_at=checked_at,
|
||||
rebuilt_at=current.rebuilt_at,
|
||||
content_hash=current.content_hash,
|
||||
workloads=deepcopy(current.workloads),
|
||||
diagnostics=(deepcopy(dict(diagnostic)),),
|
||||
)
|
||||
|
||||
async def _append_event(
|
||||
self,
|
||||
command: EventCommand,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue