Files
pad/deploy/k8s/configmap.yaml
T
xarmian c50f0585ad fix(collab): WebSocket dials get their own per-user bucket and a per-user socket cap, and the editor jitters its reconnects (BUG-1308) (#1499)
* fix(collab): WebSocket dials get their own per-user bucket and a per-user socket cap; the web provider jitters its reconnects (BUG-1308)

A collab dial drew on the general per-user API bucket (burst 60), so 100
dials from one user got 60 through, and a user's own dials and REST
calls refused each other. Dials now draw on a CollabDial bucket (5/s,
burst 50), and how many sockets a principal may hold is bounded
separately by PAD_COLLAB_MAX_PER_USER (default 50), refused with 429
collab_limit_exceeded and Retry-After. Both defaults are sized from the
reconnect-storm measurement on BUG-1308's trail (checkpoint 2).

A browser cannot read a refused handshake's status, so the provider's
backoff is what spaces a refused herd out: each step is now jittered to
between half and all of itself.

Claude-Session: https://claude.ai/code/session_01RYiqbqXmxQMoKHsGm8B77N

* docs(collab): PAD_COLLAB_MAX_PER_USER and the collab dial bucket, in the deployment docs, samples and load-test usage (BUG-1308)

Claude-Session: https://claude.ai/code/session_01RYiqbqXmxQMoKHsGm8B77N

* fix(collab): only a WebSocket upgrade is a dial; per-user cap pinned within one workspace; dial-bucket keying stated correctly (BUG-1308, codex round 1)

Claude-Session: https://claude.ai/code/session_01RYiqbqXmxQMoKHsGm8B77N

* docs(collab): a PAD_COLLAB_MAX_PER_USER below 1 means unlimited, as the SSE knobs do (BUG-1308, codex round 2)

Claude-Session: https://claude.ai/code/session_01RYiqbqXmxQMoKHsGm8B77N

* docs(collab): the struct field agrees, 0 or less is unlimited (BUG-1308, codex round 3)

Claude-Session: https://claude.ai/code/session_01RYiqbqXmxQMoKHsGm8B77N
2026-09-24 04:51:57 -04:00

27 lines
873 B
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: pad-config
namespace: pad
data:
PAD_HOST: "0.0.0.0"
PAD_PORT: "7777"
PAD_DB_DRIVER: "postgres"
PAD_DATA_DIR: "/data"
PAD_LOG_LEVEL: "info"
PAD_SECURE_COOKIES: "true"
# Covers BOTH /api/v1/events and /api/v1/events/stream (BUG-2726).
PAD_SSE_MAX_CONNECTIONS: "1000"
PAD_SSE_MAX_PER_WORKSPACE: "100"
PAD_SSE_MAX_PER_USER: "50"
# Open collab WebSockets per user, per instance (BUG-1308).
PAD_COLLAB_MAX_PER_USER: "50"
# Set when this Redis endpoint is shared with another Pad installation.
# Empty/unset keeps the historical key names. Changing it on a running
# deployment makes connected clients resync — see docs/deployment.md.
# PAD_REDIS_NAMESPACE: "prod"
# Set your public URL:
# PAD_URL: "https://pad.example.com"
# CORS origins:
# PAD_CORS_ORIGINS: "https://pad.example.com"