fix(sessions): keep named-pipe socket paths inside the macOS sun_path limit (NEXT-01)
The pipe name mxaccess-gateway-{pid}-session-{32hex} plus .NET's
CoreFxPipe_ prefix overflowed the 104-byte Unix-domain-socket path limit
under the default per-user macOS TMPDIR (~49 chars), so every test that
opened a real pipe threw ArgumentOutOfRangeException at pipe creation
unless TMPDIR=/tmp was exported. Rename to mxgw-{pid}-{sessionUid} (the
session guid hex without the session- prefix; worst-case 43 chars) and
shorten the three test-fixture names the same way. Uniqueness is
unchanged: gateway pid + full session guid. The worker receives the pipe
name via its launch command line, so mixed Server/Worker deploy SHAs are
unaffected. Docs updated in the same change (gateway.md,
GatewayProcessDesign, GatewayConfiguration, Sessions, CLAUDE.md); new
regression test pins the format and the length budget.
Verified: SessionManagerTests 39/39; SessionWorkerClientFactory,
GatewayEndToEndFakeWorkerSmoke, WorkerClient, and ReconnectReplay suites
33/33 under the default macOS TMPDIR — this also retires the
previously-misdiagnosed 'macOS pipe-timeout test failures': they were
this path-length throw, not a timeout-message defect.
This commit is contained in:
+8
-1
@@ -299,9 +299,16 @@ Default transport: one bidirectional named pipe per worker.
|
||||
Pipe name:
|
||||
|
||||
```text
|
||||
mxaccess-gateway-{gatewayProcessId}-{sessionId}
|
||||
mxgw-{gatewayProcessId}-{sessionUid}
|
||||
```
|
||||
|
||||
`sessionUid` is the session id without its `session-` prefix (the raw guid hex).
|
||||
The name is deliberately short: on Unix-like hosts (the macOS/Linux test
|
||||
matrix), .NET named pipes are Unix domain sockets at
|
||||
`$TMPDIR/CoreFxPipe_{name}`, and macOS caps the socket path at 104 bytes while
|
||||
its default per-user `TMPDIR` already spends ~49 of them. The gateway PID keeps
|
||||
the name collision-free across gateway restarts.
|
||||
|
||||
Message framing:
|
||||
|
||||
```text
|
||||
|
||||
Reference in New Issue
Block a user