Skip to content

feat(runner): add pull-dispatch coordination layer#55

Open
as535364 wants to merge 1 commit into
mainfrom
feat/runner-coordination-layer
Open

feat(runner): add pull-dispatch coordination layer#55
as535364 wants to merge 1 commit into
mainfrom
feat/runner-coordination-layer

Conversation

@as535364

Copy link
Copy Markdown
Member

Normal-OJ/Normal-OJ#68(sandbox slice 2/4)

新協調層 runner/,pull-based dispatch 的 runner 側基礎。Dark PR——main.py 尚未接線,無任何呼叫者;不修改既有檔案。

內容

  • runner/client.pyBackendClientregister / heartbeat,契約見 spec §7.1–7.2)、RunnerIdentity(memory-only,token repr=False,ADR-0004)、RunnerConfig(parse register 回應的 config,缺 key 落 15/3/8 預設)
  • runner/registration.pyregister_with_backoff:backoff 1→2→4→8→16→30s(之後維持 30、無限重試);401 不重試直接 raise
  • runner/heartbeat.pyHeartbeatThread:interval 取自 register config(預設 15s)、body 夾帶 ActiveJobTracker 快照、連續 2 次 401 → on_fatal(非 401 結果歸零計數)、Event-based 可即時 stop()
  • runner/active_jobs.pyActiveJobTracker:thread-safe add/remove(冪等)/snapshot/len
  • runner/config.pyBACKEND_URLRUNNER_REGISTRATION_TOKENRUNNER_NAME(未設時落 hostname)等;不動舊 BACKEND_API

測試

31 個單元測試,無 docker/網路依賴(注入 fake session):backoff 序列逐值驗證、401 fail-fast/歸零矩陣、request shape(URL/Bearer header/body)、config 預設值、tracker 冪等與 thread-safety、token 不出現在 repr。

備註

BackendClient (register/heartbeat), register_with_backoff (1-2-4-8-16-30s,
401 no-retry), HeartbeatThread (interval from register config, carries
active_job_ids, 2x consecutive 401 fail-fast via on_fatal) and
ActiveJobTracker. Dark slice - nothing wires into main.py yet; unit tests
run without docker.

Normal-OJ/Normal-OJ#68 (sandbox slice 2/4); spec section 10/13, ADR-0004
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant