DIRACGrid / DIRACGrid/intercede
[Feature]: Sync facade + DIRAC migration adapter spike
- Dominant language
- Python
- Stars
- 3
- Forks
- 3
- PR merge metrics
- No merged PRs in 30d
Description
## User Story
As a DIRAC maintainer during the transition,
I want a synchronous facade over the async interCEde contract and a documented mapping from the
DIRAC CE conventions,
So that DIRAC's SiteDirector/PushJobAgent/RemoteRunner can adopt interCEde backends before the
DiracX tasks exist, without a hand-maintained parallel sync API.
## Feature Description
- **Sync facade** (interCEde, Tier B): run-to-completion wrapper over the async protocols, usable
only outside an event loop; generated/thin, never a second hand-written contract (IC-ADR-001
Open Issues). Decide its lifetime (transition-only vs kept).
- **Migration mapping doc** (interCEde docs; adapter *code* belongs in DIRAC): the translation
table from the effective DIRAC contract to interCEde —
`":::"` ↔ `JobHandle`; `PilotStampDict` ↔ `Submission.handles`; `S_OK/S_ERROR` +
load-bearing keys (`Value`, `CEInfoDict`, `PilotStampDict`, `ExecutableToKeep`) ↔ typed
results/exceptions; `available()` slot math ↔ caller policy over `LoadReporter.counts()` +
CS `MaxTotalJobs`/`MaxWaitingJobs`; `Tag: Token` ↔ IC-ADR-003 credential config; CS
`ParametersDict` keys ↔ typed backend config (registry request).
- **Spike**: a `dirac-admin-debug-ce`-equivalent script driving an interCEde backend through the
facade (submit → status → fetch → kill) — the smallest end-to-end proof a DIRAC-side adapter is
writable.
## Definition of Done
- [ ] Sync facade shipped + tested (asserts refusal inside a running loop)
- [ ] Mapping doc covers every load-bearing DIRAC convention found in the consumer analysis
- [ ] Debug-CLI spike drives a real backend (Slurm stack) through the facade in CI
- [ ] Facade lifetime decision recorded
## Alternatives Considered
- Parallel hand-written sync protocol — re-creates the two-surface drift the ADR indicts; rejected.
- Putting the S_OK/S_ERROR adapter inside interCEde — DIRAC vocabulary doesn't belong in a
WMS-agnostic library; only the *facade* (sync-over-async) is interCEde's.
## Additional Context
Deferred consumers to keep in mind while writing the mapping: PushJobAgent
(`outputs=["/"]` → `OutputSpec` "everything"), RemoteRunner (same lifecycle), WMSUtilities
(`killPilotsInQueues` bulk kill).
Contributor guide
Assessment
This issue has not been assessed yet.