fix(observatory): version non-binding idle claims and preserve grant history

This commit is contained in:
DCCONSTRUCTIONS
2026-09-02 23:40:11 +03:00
parent 049ed3eed4
commit cabd3081c7
8 changed files with 828 additions and 15 deletions
+14 -2
View File
@@ -158,7 +158,10 @@ class ObservatoryWorkerExecutorCapability(_StrictWorkerRequest):
class ObservatoryWorkerClaimRequest(_StrictWorkerRequest):
schema_version: Literal["missioncore.observatory-worker-claim-request/v2"]
schema_version: Literal[
"missioncore.observatory-worker-claim-request/v2",
"missioncore.observatory-worker-claim-request/v3",
]
claim_request_id: str = Field(
min_length=1,
max_length=160,
@@ -276,6 +279,10 @@ def build_observatory_worker_router(
dependencies=[Depends(require_configured_worker)],
)
@router.get("/recorded-jobs/claim-readiness")
def claim_readiness() -> dict[str, object]:
return _queue_call(queue.claim_readiness)
@router.post("/recorded-jobs/claims", response_model=None)
def claim_next(
request: ObservatoryWorkerClaimRequest,
@@ -288,10 +295,15 @@ def build_observatory_worker_router(
capability.recorded_identity()
for capability in request.supported_executor_identities
),
protocol_version=(3 if request.schema_version.endswith("/v3") else 2),
)
)
if claim is None:
return Response(status_code=204)
return Response(status_code=204, headers={
"X-Mission-Core-Idle-Claim": (
"non-binding" if request.schema_version.endswith("/v3") else "durable"
),
})
return claim.as_dict()
@router.get("/recorded-jobs/{job_id}")