Mount the worker source in dev so it cannot fall behind the engine
Docs / docs (push) Successful in 47s
Playwright Tests / test-playwright (1, 2) (push) Failing after 29s
Playwright Tests / test-playwright (2, 2) (push) Failing after 21s
pre-commit / pre-commit (push) Failing after 2m9s
Test Backend / test-backend (push) Failing after 51s
Compose Smoke Test / test-compose (push) Failing after 22s
Playwright Tests / merge-reports (push) Failing after 1m13s
Docs / docs (push) Successful in 47s
Playwright Tests / test-playwright (1, 2) (push) Failing after 29s
Playwright Tests / test-playwright (2, 2) (push) Failing after 21s
pre-commit / pre-commit (push) Failing after 2m9s
Test Backend / test-backend (push) Failing after 51s
Compose Smoke Test / test-compose (push) Failing after 22s
Playwright Tests / merge-reports (push) Failing after 1m13s
The engine and the worker speak a version-matched protocol, but compose.dev.yml mounted only backend/fluksio: a reloaded engine talked to the worker baked into the image. Adding the request id to that protocol therefore left every python node failing with "the worker answered request None", because the old worker echoed no id at all. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01StpRc2C6au1WJ1EUU7fsfu
This commit is contained in:
+7
-8
@@ -72,14 +72,13 @@ Specific changes
|
||||
reloader, which reaps nothing that is not its own child. `init: true` on the backend
|
||||
service hands PID 1 to an init that does reap orphans, and would close the whole class
|
||||
rather than one source of it.
|
||||
- BUG/NODE: **every python node on the dev stack fails to build** with
|
||||
`RemoteError: the worker answered request None while <n> was outstanding` — the reply the
|
||||
pool read off the pipe parsed as JSON but carried neither an `id` nor an `event`, so
|
||||
`_exchange` retires the worker and the node goes red. It is not the rebuild scope: a
|
||||
whole-pipeline `reload()` produces the same error on the same nodes. Worth checking against
|
||||
the orphaned workers above, since both follow uvicorn `--reload`. It is why
|
||||
`runtime.spec.ts` "the logs panel shows what a node printed" fails — nothing runs, so
|
||||
nothing prints.
|
||||
- CHORE/INFRA: the engine and the worker speak a version-matched protocol, but only the
|
||||
engine hot-reloads — uvicorn watches `/app/backend`, and a worker process holds the code
|
||||
it started with until it is respawned. So a protocol change reaches one side and not the
|
||||
other, which is how every python node came to fail with `RemoteError: the worker answered
|
||||
request None`. `compose.dev.yml` now mounts `worker/fluksio_worker` beside
|
||||
`backend/fluksio`, which closes the image half. The reload half is open: editing worker
|
||||
source restarts nothing, and the running pool keeps the old code.
|
||||
|
||||
- CHORE/UI: the portal's aggregate tiles have no not-reporting state. A figure an
|
||||
installation never sends renders through `?? 0`, so a missing field reads as a confident
|
||||
|
||||
@@ -112,6 +112,11 @@ services:
|
||||
# sync above — only `docker compose watch` does. Without the mount the
|
||||
# container serves the source baked into the image until it is rebuilt.
|
||||
- ../backend/fluksio:/app/backend/fluksio
|
||||
# The worker speaks a protocol the engine version-matches, so mounting one
|
||||
# without the other leaves a reloaded engine talking to the worker baked
|
||||
# into the image — which is how every python node came to fail with
|
||||
# "the worker answered request None" after a protocol change.
|
||||
- ../worker/fluksio_worker:/app/worker/fluksio_worker
|
||||
environment:
|
||||
SMTP_HOST: "mailcatcher"
|
||||
SMTP_PORT: "1025"
|
||||
|
||||
Reference in New Issue
Block a user