Issue 118: the analytics store answers the dial and times out the query #116

Merged
jschoubben merged 3 commits from issue/118-umami-store-query-timeout into main 2026-09-26 12:20:46 +00:00
@@ -0,0 +1,49 @@
---
status: located
opened: 2026-09-25
located-in: [mesh-catalog modules/umami]
fixed-by:
amended-design:
---
# 118 — umami's store answers the dial and times out the query
## What was observed
The analytics service's public name has answered `502` through the whole of 2026-09-25's migration session
(first noted mid-afternoon, still true at night). The container restart-loops on a
timescale of about a minute. Its own log, every cycle:
```
✓ DATABASE_URL is defined.
✓ Database connection successful.
Invalid `prisma.$queryRaw()` invocation:
Raw query failed. Code: `N/A`. Message: `Operation has timed out`
```
The connection is established — the dial succeeds — and the first raw query then times
out. This is not a credentials fault and not an unreachable store.
## What it is not
- Not the routing layer: the `502` is Traefik faithfully reporting a backend that is
restart-looping. The stale duplicate Traefik router for this name (a HAL-era
hand-authored file beside the mesh-written one) was removed the same night and changed
nothing, as expected.
- Not the mesh's grant machinery: the binding and sealed secret compose, and the store
accepts the login — a wrong credential refuses the dial, and this dial succeeds.
## Where to look
A dial that succeeds and a query that times out, from a container on one network to a
store on another, has the shape of a path-MTU or conntrack fault (large response packets
dropped after the small handshake ones pass), or of the store accepting the TCP
connection while the backend it proxies for is wedged. Neither is proven. What is known
to differ for umami against every working consumer of the same store tonight is nothing
yet — that comparison is the first move.
## Why it is filed rather than chased
The 2026-09-25 session's scope was routing and the build chain; this fault predates the
night's changes, survived them unchanged, and needs its own sitting with the store's own
logs beside the consumer's.